| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Defines a set of geometric ranges, and standard operations on it. |
| |
| #ifndef PDF_RANGE_SET_H_ |
| #define PDF_RANGE_SET_H_ |
| |
| #include <ostream> |
| #include <set> |
| #include <string> |
| |
| #include "ui/gfx/range/range.h" |
| |
| namespace chrome_pdf { |
| |
| class RangeSet { |
| public: |
| RangeSet(); |
| explicit RangeSet(const gfx::Range& range); |
| ~RangeSet(); |
| |
| RangeSet(const RangeSet& range_set); |
| RangeSet(RangeSet&& range_set); |
| RangeSet& operator=(const RangeSet& other); |
| |
| bool operator==(const RangeSet& other) const; |
| bool operator!=(const RangeSet& other) const; |
| |
| bool Contains(uint32_t point) const; |
| bool Contains(const gfx::Range& range) const; |
| bool Contains(const RangeSet& range_set) const; |
| |
| bool Intersects(const gfx::Range& range) const; |
| bool Intersects(const RangeSet& range_set) const; |
| |
| void Union(const gfx::Range& range); |
| void Union(const RangeSet& range_set); |
| |
| void Intersect(const gfx::Range& range); |
| void Intersect(const RangeSet& range_set); |
| |
| void Subtract(const gfx::Range& range); |
| void Subtract(const RangeSet& range_set); |
| |
| void Xor(const gfx::Range& range); |
| void Xor(const RangeSet& range_set); |
| |
| bool IsEmpty() const; |
| void Clear(); |
| |
| gfx::Range First() const; |
| gfx::Range Last() const; |
| std::string ToString() const; |
| |
| struct range_compare { |
| bool operator()(const gfx::Range& lval, const gfx::Range& rval) const { |
| return lval.start() < rval.start(); |
| } |
| }; |
| |
| using RangesContainer = std::set<gfx::Range, range_compare>; |
| |
| const RangesContainer& ranges() const { return ranges_; } |
| size_t Size() const { return ranges_.size(); } |
| |
| private: |
| RangesContainer ranges_; |
| }; |
| |
| } // namespace chrome_pdf |
| |
| std::ostream& operator<<(std::ostream& os, |
| const chrome_pdf::RangeSet& range_set); |
| |
| #endif // PDF_RANGE_SET_H_ |