diff options
author | Tao Bao <tbao@google.com> | 2017-11-08 02:51:17 +0100 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-11-08 02:51:17 +0100 |
commit | 16b8b8fd1cf9055c9206ddfced90847b21acc340 (patch) | |
tree | c0046df4b42cfbf563c57d8502204ca97f13ab4c /otautil/include | |
parent | Merge "Switch to bionic gtest in bootable/recovery" (diff) | |
parent | otautil: Remove the aborts in RangeSet::Parse(). (diff) | |
download | android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar.gz android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar.bz2 android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar.lz android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar.xz android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.tar.zst android_bootable_recovery-16b8b8fd1cf9055c9206ddfced90847b21acc340.zip |
Diffstat (limited to 'otautil/include')
-rw-r--r-- | otautil/include/otautil/rangeset.h | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/otautil/include/otautil/rangeset.h b/otautil/include/otautil/rangeset.h index c4234d181..af8ae2dee 100644 --- a/otautil/include/otautil/rangeset.h +++ b/otautil/include/otautil/rangeset.h @@ -30,28 +30,35 @@ class RangeSet { explicit RangeSet(std::vector<Range>&& pairs); + // Parses the given string into a RangeSet. Returns the parsed RangeSet, or an empty RangeSet on + // errors. static RangeSet Parse(const std::string& range_text); + // Appends the given Range to the current RangeSet. + bool PushBack(Range range); + + // Clears all the ranges from the RangeSet. + void Clear(); + std::string ToString() const; - // Get the block number for the i-th (starting from 0) block in the RangeSet. + // Gets the block number for the i-th (starting from 0) block in the RangeSet. size_t GetBlockNumber(size_t idx) const; - // RangeSet has half-closed half-open bounds. For example, "3,5" contains blocks 3 and 4. So "3,5" - // and "5,7" are not overlapped. + // Returns whether the current RangeSet overlaps with other. RangeSet has half-closed half-open + // bounds. For example, "3,5" contains blocks 3 and 4. So "3,5" and "5,7" are not overlapped. bool Overlaps(const RangeSet& other) const; - // size() gives the number of Range's in this RangeSet. + // Returns the number of Range's in this RangeSet. size_t size() const { return ranges_.size(); } - // blocks() gives the number of all blocks in this RangeSet. + // Returns the total number of blocks in this RangeSet. size_t blocks() const { return blocks_; } - // We provide const iterators only. std::vector<Range>::const_iterator cbegin() const { return ranges_.cbegin(); } @@ -60,13 +67,20 @@ class RangeSet { return ranges_.cend(); } - // Need to provide begin()/end() since range-based loop expects begin()/end(). + std::vector<Range>::iterator begin() { + return ranges_.begin(); + } + + std::vector<Range>::iterator end() { + return ranges_.end(); + } + std::vector<Range>::const_iterator begin() const { - return ranges_.cbegin(); + return ranges_.begin(); } std::vector<Range>::const_iterator end() const { - return ranges_.cend(); + return ranges_.end(); } // Reverse const iterators for MoveRange(). @@ -78,6 +92,11 @@ class RangeSet { return ranges_.crend(); } + // Returns whether the RangeSet is valid (i.e. non-empty). + explicit operator bool() const { + return !ranges_.empty(); + } + const Range& operator[](size_t i) const { return ranges_[i]; } @@ -109,6 +128,9 @@ class RangeSet { // every block in the original source. class SortedRangeSet : public RangeSet { public: + // The block size when working with offset and file length. + static constexpr size_t kBlockSize = 4096; + SortedRangeSet() {} // Ranges in the the set should be mutually exclusive; and they're sorted by the start block. @@ -122,8 +144,6 @@ class SortedRangeSet : public RangeSet { // Compute the block range the file occupies, and insert that range. void Insert(size_t start, size_t len); - void Clear(); - using RangeSet::Overlaps; bool Overlaps(size_t start, size_t len) const; |