-
Notifications
You must be signed in to change notification settings - Fork 0
sparse_range
template <class value_type, class step_type> struct sparse_range
Stores a sparse range of values in [start,finish) traversed with a given step size.
-
typedef value_type type
so that generic wrappers can access this containersvalue_type
-
typedef const_iterator iterator
so that algorithms dependent upon iterator work. - sparse_range::const_iterator
-
value_type start
represents the starting value of the range. -
value_type finish
represents the ending value of the range. -
step_type step
represents the step size of the range.
Set start
and finish
directly and set step
to 1
.
Set start
, finish
, and step
directly.
Copy another range of any type into this one with implicit type casts.
Copy another range of any type into this one with implicit type casts. step
is set to 1
.
Copy another range using it's iterator bounds (this is used by the sub() functions).
Copy another range using it's iterator bounds (this is used by the sub() functions). step
is set to 1
.
Basic functions necessary for algorithm execution.
returns the number of values in this range: (finish-start)/step
.
returns an iterator to the first element.
returns an iterator to one after the last element.
returns an iterator to the last element.
returns an iterator to one before the first element.
returns an iterator to the i
th element.
Returns the value of the first element: start
.
Returns the value of the last element: finish-1
.
Returns the value of the i
th element: start+i
.
Returns the value of the i
th element: start+i
.
wraps this range with a slice. This is particularly useful if an algorithm gives you a container filled with iterators. You can convert it into a slice with a single call to this function.
This is orthogonal to deref()
. If this container is filled with iterators, it returns the index of each iterator.
returns a slice of this container of the elements within the range [start
,end
).
returns a slice of this container of the elements after start
.
returns a slice of all the elements in this container.
returns a slice of all the elements within the range [start
,end
) of a range container.
see above. This returns a copy instead of a slice.
see above. This returns a copy instead of a slice.
see above. This returns a copy instead of a slice.
uses the values of the range container as indices into c
. Returns another range container with the indexed value from c
.
swaps the contents of this range container with another.
sets the contents of this range container equal the contents of another.
bool operator==(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator!=(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<=(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>=(sparse_range<value_type1, step_type1> s1, sparse_range<value_type2, step_type2> s2)
Compares two range containers by comparing start
followed by finish
.
bool operator==(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator!=(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator<(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator>(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator<=(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator>=(sparse_range<value_type1, step_type1> s1, core::slice<container2> s2)
bool operator==(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
bool operator!=(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<=(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>=(core::slice<container1> s1, sparse_range<value_type2, step_type2> s2)
Compares a range container to a generic slice by calling compare()
.
bool operator==(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator!=(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator<(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator>(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator<=(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator>=(sparse_range<value_type1, step_type1> s1, range<value_type2> s2)
bool operator==(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator!=(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator<=(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
bool operator>=(range<value_type1> s1, sparse_range<value_type2, step_type2> s2)
Compares a sparse_range container to a range by calling compare()
.
#include <std/ascii_stream.h>
#include <std/sparse_range.h>
using namespace core;
int main()
{
sparse_range<int> f(3, 15, 3);
cout << f << endl;
return 0;
}
{3, 6, 9, 12}