STIR
6.2.0
|
This class defines ranges which can be 'irregular'. More...
#include "stir/IndexRange.h"
Public Types | |
typedef base_type::iterator | iterator |
typedefs such that we do not need to have typename wherever we use iterators | |
typedef base_type::const_iterator | const_iterator |
Public Types inherited from stir::VectorWithOffset< IndexRange< num_dimensions - 1 > > | |
typedef size_t | size_type |
typedef IndexRange< num_dimensions - 1 > | value_type |
typedef value_type & | reference |
typedef const value_type & | const_reference |
typedef ptrdiff_t | difference_type |
typedef IndexRange< num_dimensions - 1 > * | iterator |
typedef IndexRange< num_dimensions - 1 > const * | const_iterator |
typedef std::reverse_iterator< iterator > | reverse_iterator |
typedef std::reverse_iterator< const_iterator > | const_reverse_iterator |
Public Member Functions | |
IndexRange () | |
Empty range. | |
IndexRange (const VectorWithOffset< IndexRange< num_dimensions - 1 >> &range) | |
Make an IndexRange from the base type. | |
IndexRange (const IndexRange< num_dimensions > &range) | |
Copy constructor. | |
IndexRange (const BasicCoordinate< num_dimensions, int > &min, const BasicCoordinate< num_dimensions, int > &max) | |
Construct a regular range given by all minimum indices and all maximum indices. | |
IndexRange (const BasicCoordinate< num_dimensions, int > &sizes) | |
Construct a regular range given by sizes (minimum indices will be 0) | |
size_t | size_all () const |
return the total number of elements in this range | |
bool | operator== (const IndexRange< num_dimensions > &) const |
comparison operator | |
bool | operator!= (const IndexRange< num_dimensions > &) const |
bool | is_regular () const |
checks if the range is 'regular' | |
bool | get_regular_range (BasicCoordinate< num_dimensions, int > &min, BasicCoordinate< num_dimensions, int > &max) const |
find regular range, returns false if the range is not regular | |
Public Member Functions inherited from stir::VectorWithOffset< IndexRange< num_dimensions - 1 > > | |
VectorWithOffset () | |
Default constructor: creates a vector of length 0. | |
VectorWithOffset (const int hsz) | |
Construct a VectorWithOffset of given length (initialised with T() ) | |
VectorWithOffset (const int min_index, const int max_index) | |
Construct a VectorWithOffset with offset min_index (initialised with T() ) | |
STIR_DEPRECATED | VectorWithOffset (const int hsz, IndexRange< num_dimensions - 1 > *const data_ptr, IndexRange< num_dimensions - 1 > *const end_of_data_ptr) |
Construct a VectorWithOffset of given length pointing to existing data. More... | |
STIR_DEPRECATED | VectorWithOffset (const int min_index, const int max_index, IndexRange< num_dimensions - 1 > *const data_ptr, IndexRange< num_dimensions - 1 > *const end_of_data_ptr) |
Construct a VectorWithOffset with offset min_index pointing to existing data. More... | |
VectorWithOffset (const int hsz, const IndexRange< num_dimensions - 1 > *const data_ptr) | |
Construct a VectorWithOffset of given length from a bare pointer (copying data) | |
VectorWithOffset (const int min_index, const int max_index, const IndexRange< num_dimensions - 1 > *const data_ptr) | |
Construct a VectorWithOffset with offset min_index from a bare pointer (copying data) | |
VectorWithOffset (const int min_index, const int max_index, shared_ptr< IndexRange< num_dimensions - 1 > []> data_sptr) | |
Construct a VectorWithOffset sharing existing data. More... | |
VectorWithOffset (const int sz, shared_ptr< IndexRange< num_dimensions - 1 > []> data_sptr) | |
Construct a VectorWithOffset sharing existing data. More... | |
VectorWithOffset (const VectorWithOffset &il) | |
copy constructor | |
VectorWithOffset (VectorWithOffset &&other) noexcept | |
move constructor More... | |
virtual | ~VectorWithOffset () |
Destructor. | |
void | recycle () |
Free all memory and make object as if default-constructed. More... | |
VectorWithOffset & | operator= (const VectorWithOffset &il) |
assignment operator with another vector More... | |
IndexRange< num_dimensions - 1 > & | operator[] (int i) |
allow array-style access, read/write More... | |
const IndexRange< num_dimensions - 1 > & | operator[] (int i) const |
array access, read-only More... | |
IndexRange< num_dimensions - 1 > & | at (int i) |
allow array-style access, read/write, but with range checking (throws std::out_of_range) | |
const IndexRange< num_dimensions - 1 > & | at (int i) const |
array access, read-only, but with range checking (throws std::out_of_range) | |
bool | empty () const |
checks if the vector is empty | |
void | fill (const IndexRange< num_dimensions - 1 > &n) |
fill elements with value n | |
void | apply_lower_threshold (const IndexRange< num_dimensions - 1 > &lower) |
Sets elements below value to the value. | |
void | apply_upper_threshold (const IndexRange< num_dimensions - 1 > &upper) |
Sets elements above value to the value. | |
int | get_length () const |
return number of elements in this vector More... | |
size_t | size () const |
return number of elements in this vector | |
int | get_min_index () const |
get value of first valid index | |
int | get_max_index () const |
get value of last valid index | |
void | set_offset (const int min_index) |
change value of starting index | |
void | set_min_index (const int min_index) |
identical to set_offset() | |
virtual void | grow (const int min_index, const int max_index) |
grow the range of the vector, new elements are set to T() More... | |
void | grow (const unsigned int new_size) |
grow the range of the vector from 0 to new_size-1, new elements are set to T() | |
virtual void | resize (const int min_index, const int max_index) |
change the range of the vector, new elements are set to T() More... | |
void | resize (const unsigned int new_size) |
change the range of the vector from 0 to new_size-1, new elements are set to T() | |
void | reserve (const int min_index, const int max_index) |
make the allocated range at least from min_index to max_index | |
void | reserve (const unsigned int new_size) |
make the allocated range at least from 0 to new_size-1 | |
size_t | capacity () const |
get allocated size | |
bool | owns_memory_for_data () const |
check if this object owns the memory for the data More... | |
int | get_capacity_min_index () const |
get min_index within allocated range More... | |
int | get_capacity_max_index () const |
get max_index within allocated range More... | |
bool | operator== (const VectorWithOffset &iv) const |
bool | operator!= (const VectorWithOffset &iv) const |
IndexRange< num_dimensions - 1 > * | get_data_ptr () |
member function for access to the data via a T* More... | |
const IndexRange< num_dimensions - 1 > * | get_const_data_ptr () const |
member function for access to the data via a const T* More... | |
void | release_data_ptr () |
signal end of access to T* More... | |
void | release_const_data_ptr () const |
signal end of access to const T* More... | |
iterator | begin () |
use to initialise an iterator to the first element of the vector | |
const_iterator | begin () const |
use to initialise an iterator to the first element of the (const) vector | |
iterator | end () |
iterator 'past' the last element of the vector | |
const_iterator | end () const |
iterator 'past' the last element of the (const) vector | |
reverse_iterator | rbegin () |
const_reverse_iterator | rbegin () const |
reverse_iterator | rend () |
const_reverse_iterator | rend () const |
VectorWithOffset & | operator+= (const VectorWithOffset &v) |
adding elements of v to the current vector | |
VectorWithOffset & | operator-= (const VectorWithOffset &v) |
subtracting elements of v from the current vector | |
VectorWithOffset & | operator*= (const VectorWithOffset &v) |
multiplying elements of the current vector with elements of v | |
VectorWithOffset & | operator/= (const VectorWithOffset &v) |
dividing all elements of the current vector by elements of v | |
VectorWithOffset | operator+ (const VectorWithOffset &v) const |
adding vectors, element by element | |
VectorWithOffset | operator- (const VectorWithOffset &v) const |
subtracting vectors, element by element | |
VectorWithOffset | operator* (const VectorWithOffset &v) const |
multiplying vectors, element by element | |
VectorWithOffset | operator/ (const VectorWithOffset &v) const |
dividing vectors, element by element | |
Protected Types | |
typedef VectorWithOffset< IndexRange< num_dimensions - 1 > > | base_type |
Additional Inherited Members | |
Protected Member Functions inherited from stir::VectorWithOffset< IndexRange< num_dimensions - 1 > > | |
void | check_state () const |
Called internally to see if all variables are consistent. More... | |
void | init (const int min_index, const int max_index, IndexRange< num_dimensions - 1 > *const data_ptr, bool copy_data) |
change vector with new index range and point to data_ptr More... | |
Protected Attributes inherited from stir::VectorWithOffset< IndexRange< num_dimensions - 1 > > | |
IndexRange< num_dimensions - 1 > * | num |
pointer to (*this)[0] (taking get_min_index() into account that is). | |
This class defines ranges which can be 'irregular'.
This class allows construction and basic manipulation of 'irregular' (but not completely arbitrary) ranges. As the class diagram shows, an IndexRange<n> is basically a VectorWithOffset with elements of type IndexRange<n-1>. This recursion ends in IndexRange<1> which is simply a pair of numbers, given the start and end of the 1D range.
This means that the outer index runs over an interval of integers. The next level of indices again runs over such an interval, but which interval can depend on the value of the outer index.
For instance for a 2D range of indices i, j, the outer index i could run from 1 to 2, and for i=1, j could run from 4 to 6, while for i=2, j could run from 6 to 8.
Facilities are provided for constructing 'regular' ranges (where the range of the inner indices does not depend on the value of the outer indices). However, storage is currently not optimised for the regular case.
Example of usage: