//------------------------------------------------------------------------------ /* Copyright (c) 2011-2013, OpenCoin, Inc. */ //============================================================================== #ifndef RIPPLE_RANGESET_H #define RIPPLE_RANGESET_H /** A sparse set of integers. */ // VFALCO TODO Replace with juce::SparseSet class RangeSet { public: static const uint32 RangeSetAbsent = static_cast (-1); protected: std::map mRanges; // First is lowest value in range, last is highest value in range typedef std::map::const_iterator const_iterator; typedef std::map::const_reverse_iterator const_reverse_iterator; typedef std::map::value_type value_type; typedef std::map::iterator iterator; static bool contains (value_type const& it, uint32 v) { return (it.first <= v) && (it.second >= v); } void simplify (); public: RangeSet () { } bool hasValue (uint32) const; uint32 getFirst () const; uint32 getNext (uint32) const; uint32 getLast () const; uint32 getPrev (uint32) const; uint32 prevMissing (uint32) const; // largest number not in the set that is less than the given number void setValue (uint32); void setRange (uint32, uint32); void clearValue (uint32); std::string toString () const; }; #endif