STIR  6.2.0
Public Types | Public Member Functions | Protected Types | List of all members
stir::IndexRange< num_dimensions > Class Template Reference

This class defines ranges which can be 'irregular'. More...

#include "stir/IndexRange.h"

Inheritance diagram for stir::IndexRange< num_dimensions >:
Inheritance graph
[legend]

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_typereference
 
typedef const value_typeconst_reference
 
typedef ptrdiff_t difference_type
 
typedef IndexRange< num_dimensions - 1 > * iterator
 
typedef IndexRange< num_dimensions - 1 > const * const_iterator
 
typedef std::reverse_iterator< iteratorreverse_iterator
 
typedef std::reverse_iterator< const_iteratorconst_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...
 
VectorWithOffsetoperator= (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
 
VectorWithOffsetoperator+= (const VectorWithOffset &v)
 adding elements of v to the current vector
 
VectorWithOffsetoperator-= (const VectorWithOffset &v)
 subtracting elements of v from the current vector
 
VectorWithOffsetoperator*= (const VectorWithOffset &v)
 multiplying elements of the current vector with elements of v
 
VectorWithOffsetoperator/= (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).
 

Detailed Description

template<int num_dimensions>
class stir::IndexRange< num_dimensions >

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:

IndexRange<3> range = construct_me_an_index_range();
int outer_index = range.get_min_index();
while(outer_index <= range.get_max_index())
{
int level_2_min_index = range[outer_index].get_min_index();
...
}

The documentation for this class was generated from the following files: