PartsManager: truncate unchecked part of a bitmask
GitOrigin-RevId: 733c1f7a2a63a25103e10392780123e1e2289425
This commit is contained in:
parent
e60c9ab24d
commit
4cee00d938
@ -20,9 +20,12 @@ Bitmask::Bitmask(Ones, int64 count) : data_(narrow_cast<size_t>((count + 7) / 8)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Bitmask::encode() const {
|
std::string Bitmask::encode(int32 prefix_count) const {
|
||||||
// remove zeroes in the end to make encoding deterministic
|
// remove zeroes in the end to make encoding deterministic
|
||||||
td::Slice data(data_);
|
td::Slice data(data_);
|
||||||
|
if (prefix_count != -1) {
|
||||||
|
data.truncate(prefix_count);
|
||||||
|
}
|
||||||
while (!data.empty() && data.back() == '\0') {
|
while (!data.empty() && data.back() == '\0') {
|
||||||
data.remove_suffix(1);
|
data.remove_suffix(1);
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ class Bitmask {
|
|||||||
Bitmask() = default;
|
Bitmask() = default;
|
||||||
Bitmask(Decode, Slice data);
|
Bitmask(Decode, Slice data);
|
||||||
Bitmask(Ones, int64 count);
|
Bitmask(Ones, int64 count);
|
||||||
std::string encode() const;
|
std::string encode(int32 prefix_count = -1) const;
|
||||||
int64 get_ready_prefix_size(int64 offset, int64 part_size, int64 file_size) const;
|
int64 get_ready_prefix_size(int64 offset, int64 part_size, int64 file_size) const;
|
||||||
int64 get_total_size(int64 part_size, int64 file_size) const;
|
int64 get_total_size(int64 part_size, int64 file_size) const;
|
||||||
bool get(int64 offset_part) const;
|
bool get(int64 offset_part) const;
|
||||||
|
@ -170,7 +170,11 @@ int32 PartsManager::get_ready_prefix_count() {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
string PartsManager::get_bitmask() const {
|
string PartsManager::get_bitmask() const {
|
||||||
return bitmask_.encode();
|
int32 prefix_count = -1;
|
||||||
|
if (need_check_) {
|
||||||
|
prefix_count = narrow_cast<int32>(checked_prefix_size_ / part_size_);
|
||||||
|
}
|
||||||
|
return bitmask_.encode(prefix_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Part> PartsManager::start_part() {
|
Result<Part> PartsManager::start_part() {
|
||||||
|
Reference in New Issue
Block a user