ROSE
0.11.96.11
|
A contiguous range of values.
Represents a contiguous range of size
values beginning at begin
, and defines relationships between two ranges. The ranges are designed such that they can represent unsigned values up to and including the maximum possible values for the data type. However, this means that a range that represents all possible values will have a size() of zero due to overflow.
Floating point ranges are also possible (types "float" or "double") but the behavior of some methods differs slightly from integers. For instance, an integer range containing a single value has size 1, but a floating point range with one value has size zero. The differences are noted in the documentation for the particular methods affected.
Definition at line 50 of file rangemap.h.
#include <rangemap.h>
Public Types | |
typedef T | Value |
typedef std::pair< Range, Range > | Pair |
A pair of ranges. | |
Public Member Functions | |
Range () | |
Create an empty range. More... | |
Range (const Value &first) | |
Create a new range of unit size. More... | |
Range (const Value &first, const Value &size) | |
Create a new range of specified size. More... | |
template<class Other > | |
Range (const Other &other) | |
Create a new range from a different range. | |
Value | size () const |
Returns the number of values represented by the range. More... | |
Pair | split_range_at (const Value &at) const |
Split a range into two parts. More... | |
Range | join (const Range &right) const |
Joins two adjacent ranges. More... | |
std::vector< Range > | erase (const Range &to_erase) const |
Erase part of a range to return zero, one, or two new ranges. More... | |
Range | intersect (const Range &other) const |
Intersection of two ranges. | |
bool | empty () const |
Returns true if this range is empty. More... | |
void | clear () |
Make a range empty. More... | |
bool | begins_with (const Range &x) const |
Do both ranges begin at the same place? More... | |
bool | ends_with (const Range &x) const |
Do both ranges end at the same place? More... | |
bool | begins_after (const Range &x, bool strict=true) const |
Does this range begin (strictly) after the beginning of another range? More... | |
bool | begins_before (const Range &x, bool strict=true) const |
Does this range begin (strictly) before the beginning of another range? More... | |
bool | ends_after (const Range &x, bool strict=true) const |
Does this range end (strictly) after the end of another range? More... | |
bool | ends_before (const Range &x, bool strict=true) const |
Does this range end (strictly) before the end of another range? More... | |
bool | contains (const Range &x, bool strict=false) const |
Does this range contain the argument range? More... | |
bool | contained_in (const Range &x, bool strict=false) const |
Is this range contained in the argument range? More... | |
bool | congruent (const Range &x) const |
Are two ranges equal? More... | |
bool | left_of (const Range &x) const |
Is this range left of the argument range? More... | |
bool | right_of (const Range &x) const |
Is this range right of the argument range? More... | |
bool | overlaps (const Range &x) const |
Does this range overlap with the argument range? More... | |
bool | distinct (const Range &x) const |
Is this range non-overlapping with the argument range? More... | |
bool | abuts_lt (const Range &x) const |
Is this range immediately left of the argument range? More... | |
bool | abuts_gt (const Range &x) const |
Is this range immediately right of the argument range? More... | |
bool | operator== (const Range &x) const |
bool | operator!= (const Range &x) const |
void | print (std::ostream &o) const |
bool | empty () const |
void | clear () |
double | relaxed_first () const |
double | size () const |
void | resize (const double &new_size) |
void | relaxed_resize (const double &new_size) |
Range< double >::Pair | split_range_at (const double &at) const |
double | minimum () |
double | maximum () |
bool | empty () const |
void | clear () |
float | relaxed_first () const |
float | size () const |
void | resize (const float &new_size) |
void | relaxed_resize (const float &new_size) |
Range< float >::Pair | split_range_at (const float &at) const |
float | minimum () |
float | maximum () |
void | first (const Value &first) |
Accessor for the first value of a range. More... | |
const Value | first () const |
Accessor for the first value of a range. More... | |
Value | relaxed_first () const |
Accessor for the first value of a range. More... | |
void | last (const Value &last) |
Accessor for the last value of a range. More... | |
const Value | last () const |
Accessor for the last value of a range. More... | |
const Value | relaxed_last () const |
Accessor for the last value of a range. More... | |
void | resize (const Value &new_size) |
Sets the range size by adjusting the maximum value. More... | |
void | relaxed_resize (const Value &new_size) |
Sets the range size by adjusting the maximum value. More... | |
Static Public Member Functions | |
static Range | inin (const Value &v1, const Value &v2) |
Create a new range by giving the first (inclusive) and last value (inclusive). More... | |
static Value | minimum () |
Return the minimum possible value represented by this range. | |
static Value | maximum () |
Return the maximum possible value represented by this range. | |
static Range | all () |
Return a range that covers all possible values. | |
Protected Attributes | |
Value | r_first |
First value in range. | |
Value | r_last |
Last value in range. | |
Create an empty range.
Ranges may have an empty size, but empty ranges will never appear inside a RangeMap object. The begin
value of an empty range is meaningless.
Definition at line 64 of file rangemap.h.
Create a new range of unit size.
The new range contains only the specified value.
Definition at line 68 of file rangemap.h.
Create a new range of specified size.
If size
is zero then an empty range is created. Note that a zero size is also returned for a range that contains all values, but this is due to overflow. Whether this is an integer range or a floating point range, if size is zero then the range is considered to be empty (but the first
value is remembered). To create a floating point range with a single value, use the single-argument constructor.
Definition at line 75 of file rangemap.h.
References Range< T >::clear(), Range< T >::first(), and Range< T >::r_last.
|
inlinestatic |
Create a new range by giving the first (inclusive) and last value (inclusive).
This is the only way to create a range that contains all values since the size of such a range overflows the range's Value type. If the two values are equal then the created range contains only that value; if the first value is larger than the second then the range is considered to be empty.
Definition at line 94 of file rangemap.h.
Referenced by RangeMap< R, T >::invert_within().
|
inline |
Accessor for the first value of a range.
It does not make sense to ask for the first value of an empty range, and an assertion will fail if such a request is made. However, relaxed_first() will return a value anyway.
Definition at line 105 of file rangemap.h.
|
inline |
Accessor for the first value of a range.
It does not make sense to ask for the first value of an empty range, and an assertion will fail if such a request is made. However, relaxed_first() will return a value anyway.
Definition at line 108 of file rangemap.h.
Referenced by Range< T >::Range().
|
inline |
Accessor for the first value of a range.
It does not make sense to ask for the first value of an empty range, and an assertion will fail if such a request is made. However, relaxed_first() will return a value anyway.
Definition at line 117 of file rangemap.h.
|
inline |
Accessor for the last value of a range.
It does not make sense to ask for the last value of an empty range, and an assertion will fail if such a request is made. However, relaxed_last() will return a value anyway.
Definition at line 129 of file rangemap.h.
|
inline |
Accessor for the last value of a range.
It does not make sense to ask for the last value of an empty range, and an assertion will fail if such a request is made. However, relaxed_last() will return a value anyway.
Definition at line 132 of file rangemap.h.
|
inline |
Accessor for the last value of a range.
It does not make sense to ask for the last value of an empty range, and an assertion will fail if such a request is made. However, relaxed_last() will return a value anyway.
Definition at line 136 of file rangemap.h.
|
inline |
Returns the number of values represented by the range.
Note that if the range contains all possible values then the returned size may be zero due to overflow, in which case the empty() method should also be called to make the determination.
Floating point range sizes are simply the last value minus the first value. Therefore, a singleton floating point range will return a size of zero, while a singleton integer range will return a size of one. This is actualy consistent behavior if you think of an integer value N as the floating point range [N,N+1), where N is included in the range but N+1 is not.
Definition at line 149 of file rangemap.h.
|
inline |
Sets the range size by adjusting the maximum value.
It is an error to change the size of a range from zero to non-zero, but the relaxed_resize() is available for that purpose.
Setting the size to zero causes different behavior for integer ranges than it does for floating point ranges. For integer ranges, setting the size to zero clears the range (makes it empty); for floating point ranges, setting the size to zero causes the range to contain only the starting value. Floating point ranges can be cleared by setting the new size to a negative value. The clear() method should be favored over resize() for making a range empty.
Definition at line 164 of file rangemap.h.
References Range< T >::clear().
|
inline |
Sets the range size by adjusting the maximum value.
It is an error to change the size of a range from zero to non-zero, but the relaxed_resize() is available for that purpose.
Setting the size to zero causes different behavior for integer ranges than it does for floating point ranges. For integer ranges, setting the size to zero clears the range (makes it empty); for floating point ranges, setting the size to zero causes the range to contain only the starting value. Floating point ranges can be cleared by setting the new size to a negative value. The clear() method should be favored over resize() for making a range empty.
Definition at line 173 of file rangemap.h.
Split a range into two parts.
Returns a pair of adjacent ranges such that at
is the first value of the second returned range. The split point must be such that neither range is empty.
Definition at line 186 of file rangemap.h.
Joins two adjacent ranges.
This range must be the left range, and the argument is the right range. They must be adjacent without overlapping. If one of the ranges is empty, then the return value is the other range (which might also be empty).
Definition at line 197 of file rangemap.h.
Erase part of a range to return zero, one, or two new ranges.
The possible situations are:
Definition at line 220 of file rangemap.h.
|
inline |
Returns true if this range is empty.
Note that many of the range comparison methods have special cases for empty ranges. Note that due to overflow, the size() method may return zero for integer ranges if this range contains all possible values. It follows, then that the expressions "empty()" and "0==size()" are not always equal.
Definition at line 251 of file rangemap.h.
|
inline |
Make a range empty.
An empty range is one in which r_first is greater than r_last. We make special provisions here so that relaxed_first() will continue to return the same value as it did before the range was set to empty.
Definition at line 257 of file rangemap.h.
References Range< T >::r_first, and Range< T >::r_last.
Referenced by Range< T >::Range(), and Range< T >::resize().
Do both ranges begin at the same place?
An empty range never begins with any other range, including other empty ranges.
Definition at line 272 of file rangemap.h.
Do both ranges end at the same place?
An empty range never ends with any other range, including other empty ranges.
Definition at line 281 of file rangemap.h.
|
inline |
Does this range begin (strictly) after the beginning of another range?
An empty range never begins after any other range, including other empty ranges.
Definition at line 290 of file rangemap.h.
|
inline |
Does this range begin (strictly) before the beginning of another range?
An empty range never begins before any other range, including other empty ranges.
Definition at line 299 of file rangemap.h.
|
inline |
Does this range end (strictly) after the end of another range?
An empty range never ends after any other range, including other empty ranges.
Definition at line 308 of file rangemap.h.
|
inline |
Does this range end (strictly) before the end of another range?
An empty range never ends before any other range, including other empty ranges.
Definition at line 317 of file rangemap.h.
|
inline |
Does this range contain the argument range?
The argument is contained in this range if the argument starts at or after the start of this range and ends at or before the end of this range. If strict
is true, then the comparisons do not include equality. An empty range does not contain any other range, including other empty ranges.
Definition at line 328 of file rangemap.h.
|
inline |
Is this range contained in the argument range?
This range is contained in the argument range if this range starts at or after the start of the argument and ends at or before the end of the argument. If strict
is true, then the comparisons do not include equality. An empty range does not contain any other range, including other empty ranges.
Definition at line 339 of file rangemap.h.
Are two ranges equal?
They are equal if the start and end at the same place or if they are both empty.
Definition at line 348 of file rangemap.h.
Is this range left of the argument range?
This range is left of the argument range if this range ends before the start of the argument. They may adjoin, but must not overlap. An empty range is never left of any other range, including other empty ranges.
Definition at line 358 of file rangemap.h.
Referenced by RangeMap< R, T >::select_overlapping_ranges().
Is this range right of the argument range?
This range is right of the argument range if this range starts after the end of the argument range. They may adjoin, but must not overlap. An empty range is never right of any other range, including other empty ranges.
Definition at line 368 of file rangemap.h.
Does this range overlap with the argument range?
An empty range does not overlap with any other rance, including other empty ranges.
Definition at line 377 of file rangemap.h.
Referenced by RangeMap< R, T >::select_overlapping_ranges().
Is this range non-overlapping with the argument range?
In other words, do the two ranges represent distinct sets of values? An empty range is always distinct from all other ranges (including other empty ranges).
Definition at line 387 of file rangemap.h.
Is this range immediately left of the argument range?
Returns true if this range ends at the beginning of the argument, with no overlap and no space between them. An empty range does not abut any other range, including other empty ranges.
Definition at line 397 of file rangemap.h.
Is this range immediately right of the argument range?
Returns true if this range begins at the end of the argument, with no overlap and no space between them. An empty range does not abut any other range, including other empty ranges.
Definition at line 407 of file rangemap.h.