6 #ifndef OPENDDS_DCPS_DISJOINTSEQUENCE_H 7 #define OPENDDS_DCPS_DISJOINTSEQUENCE_H 53 bool disjoint()
const;
103 bool invert =
false)
const;
124 template <
typename T>
128 typedef bool (*Compare)(
const TPair&,
const TPair&);
138 return lhs.second < rhs.second;
142 : ranges_(range_less)
145 const_iterator
begin()
const {
return ranges_.begin(); }
146 const_iterator
cbegin()
const {
return ranges_.begin(); }
148 const_iterator
end()
const {
return ranges_.end(); }
149 const_iterator
cend()
const {
return ranges_.end(); }
151 const_reverse_iterator
rbegin()
const {
return ranges_.rbegin(); }
152 const_reverse_iterator
crbegin()
const {
return ranges_.rbegin(); }
154 const_reverse_iterator
rend()
const {
return ranges_.rend(); }
155 const_reverse_iterator
crend()
const {
return ranges_.rend(); }
157 bool empty()
const {
return ranges_.empty(); }
158 size_type
size()
const {
return ranges_.size(); }
161 void add(T lower, T upper)
164 if (has(lower, upper)) {
168 const T above = upper + 1;
169 for (
typename Container::iterator i = lower_bound_i(lower - 1);
170 i != ranges_.end() && (i->first <= above || i->second <= above);
172 lower = (std::min)(lower, i->first);
173 upper = (std::max)(upper, i->second);
177 ranges_.insert(TPair(lower, upper));
187 const typename Container::iterator iter = lower_bound_i(value);
188 if (iter == end() || value < iter->first) {
191 remove_i(iter, value);
196 const T value = begin()->first;
197 remove_i(ranges_.begin(),
value);
201 bool has(T lower, T upper)
const 203 const const_iterator iter = lower_bound(upper);
204 return iter != end() && !(lower < iter->first);
207 bool has(
const TPair& range)
const 209 return has(range.first, range.second);
214 return has(value, value);
219 const const_iterator iter = lower_bound(lower);
220 return iter != end() && !(upper < iter->first);
225 return has_any(range.first, range.second);
228 template <
typename Type>
friend 232 const_iterator
lower_bound(
const TPair& p)
const {
return ranges_.lower_bound(p); }
236 return ranges_.lower_bound(TPair(T() , t));
242 return ranges_.lower_bound(TPair(T() , t));
245 const_iterator
upper_bound(
const TPair& p)
const {
return ranges_.upper_bound(p); }
249 return ranges_.upper_bound(TPair(T() , t));
253 void remove_i(
typename Container::iterator iter, T value)
255 const TPair orig = *iter;
257 if (value == orig.first) {
258 if (value < orig.second) {
259 ranges_.insert(TPair(value + T(1), orig.second));
261 }
else if (value == orig.second) {
262 ranges_.insert(TPair(orig.first, value - T(1)));
264 ranges_.insert(TPair(orig.first, value - T(1)));
265 ranges_.insert(TPair(value + T(1), orig.second));
282 bool insert_bitmap_range(RangeSet::Container::iterator& iter,
const SequenceRange& sr);
295 template <
typename T>
307 #ifdef __ACE_INLINE__ const_iterator lower_bound(const TPair &p) const
bool has(T lower, T upper) const
Container::iterator lower_bound_i(T t)
const LogLevel::Value value
OrderedRanges< SequenceNumber > RangeSet
const_iterator cbegin() const
const_reverse_iterator rbegin() const
bool has_any(const TPair &range) const
#define OpenDDS_Dcps_Export
const_reverse_iterator crbegin() const
const_reverse_iterator reverse_iterator
#define OPENDDS_ASSERT(C)
const_iterator begin() const
void add(T lower, T upper)
bool has(const TPair &range) const
Container::const_reverse_iterator const_reverse_iterator
bool operator==(const DisjointSequence::OrderedRanges< T > &a, const DisjointSequence::OrderedRanges< T > &b)
const_iterator upper_bound(const TPair &p) const
const_iterator cend() const
const_iterator upper_bound(T t) const
bool has_any(T lower, T upper) const
typedef OPENDDS_SET_CMP(GUID_t, GUID_tKeyLessThan) GuidSet
Container::size_type size_type
std::pair< SequenceNumber, SequenceNumber > SequenceRange
const_iterator lower_bound(T t) const
Sequence number abstraction. Only allows positive 64 bit values.
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
Container::const_iterator const_iterator
const_reverse_iterator crend() const
void remove_i(typename Container::iterator iter, T value)
int insert(Container &c, const ValueType &v)
typedef OPENDDS_VECTOR(ActionConnectionRecord) ConnectionRecords
The Internal API and Implementation of OpenDDS.
const_iterator end() const
const_reverse_iterator rend() const
static bool range_less(const TPair &lhs, const TPair &rhs)