Chromium Code Reviews| Index: extent_ranges.h |
| diff --git a/extent_ranges.h b/extent_ranges.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ff089703cc2b8f5a95c40c4220efeeca6c9ee539 |
| --- /dev/null |
| +++ b/extent_ranges.h |
| @@ -0,0 +1,73 @@ |
| +// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_RANGES_H__ |
|
petkov
2010/10/05 05:56:26
CHROMEOS_PLATFORM_UPDATE_ENGINE_EXTENT_RANGES_H__
adlr
2010/10/05 17:47:59
Done.
|
| +#define CHROMEOS_PLATFORM_UPDATE_ENGINE_RANGES_H__ |
| + |
| +#include <map> |
| +#include <set> |
| +#include <vector> |
| + |
| +#include <base/basictypes.h> |
| + |
| +#include "update_engine/delta_diff_generator.h" |
| +#include "update_engine/graph_types.h" |
| +#include "update_engine/update_metadata.pb.h" |
| + |
| +// An ExtentRanges object represents an unordered collection of extents |
| +// (and therefore blocks). Such an object may be modified by adding or |
| +// subtracting blocks (think: set addition or set subtraction). |
| + |
| +namespace chromeos_update_engine { |
| + |
| +struct ExtentLess |
| +{ |
|
petkov
2010/10/05 05:56:26
move { to the previous line
adlr
2010/10/05 17:47:59
Done.
|
| + bool operator()(const Extent& x, const Extent& y) const { |
| + return x.start_block() < y.start_block(); |
| + } |
| +}; |
| + |
| +Extent ExtentForRange(uint64_t start_block, uint64_t num_blocks); |
| + |
| +class ExtentRanges { |
| + public: |
| + typedef std::set<Extent, ExtentLess> ExtentSet; |
| + |
| + ExtentRanges() : blocks_(0) {} |
| + void AddBlock(uint64_t block); |
| + void SubtractBlock(uint64_t block); |
| + void AddExtent(Extent extent); |
| + void SubtractExtent(const Extent& extent); |
| + void AddExtents(const std::vector<Extent>& extents); |
| + void SubtractExtents(const std::vector<Extent>& extents); |
| + void AddRepeatedExtents( |
| + const ::google::protobuf::RepeatedPtrField<Extent> &exts); |
| + void SubtractRepeatedExtents( |
| + const ::google::protobuf::RepeatedPtrField<Extent> &exts); |
| + void AddRanges(const ExtentRanges& ranges); |
| + void SubtractRanges(const ExtentRanges& ranges); |
| + |
| + static bool ExtentsOverlapOrTouch(const Extent& a, const Extent& b); |
| + static bool ExtentsOverlap(const Extent& a, const Extent& b); |
| + |
| + // Dumps contents to the log file. Useful for debugging. |
| + void Dump() const; |
| + |
| + uint64_t blocks() const { return blocks_; } |
| + const ExtentSet& extent_set() const { return extent_set_; } |
| + |
| + // Returns an ordered vector of extents for |count| blocks, |
| + // using extents in extent_set_. The returned extents are not |
| + // removed from extent_set_. |count| must be less than or equal to |
| + // the number of blocks in this extent set. |
| + std::vector<Extent> GetExtentsForBlockCount(uint64_t count) const; |
| + |
| + private: |
| + ExtentSet extent_set_; |
| + uint64_t blocks_; |
| +}; |
| + |
| +} // namespace chromeos_update_engine |
| + |
| +#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_RANGES_H__ |