OpenGM  2.3.x
Discrete Graphical Model Library
Public Types | Public Member Functions | List of all members
marray::Marray< T, A > Class Template Reference

Runtime-flexible multi-dimensional array. More...

#include <marray.hxx>

+ Inheritance diagram for marray::Marray< T, A >:
+ Collaboration diagram for marray::Marray< T, A >:

Public Types

typedef View< T, false, A > base
 
typedef base::value_type value_type
 
typedef base::pointer pointer
 
typedef base::const_pointer const_pointer
 
typedef base::reference reference
 
typedef base::const_reference const_reference
 
typedef base::iterator iterator
 
typedef base::reverse_iterator reverse_iterator
 
typedef base::const_iterator const_iterator
 
typedef base::const_reverse_iterator const_reverse_iterator
 
typedef A::template rebind< value_type >::other allocator_type
 
- Public Types inherited from marray::View< T, false, A >
typedef T value_type
 
typedef T ValueType
 
typedef marray_detail::IfBool< isConst, const T *, T * >::type pointer
 
typedef const T * const_pointer
 
typedef marray_detail::IfBool< isConst, const T &, T & >::type reference
 
typedef const T & const_reference
 
typedef Iterator< T, isConst, A > iterator
 
typedef Iterator< T, true, A > const_iterator
 
typedef std::reverse_iterator< iteratorreverse_iterator
 
typedef std::reverse_iterator< const_iteratorconst_reverse_iterator
 
typedef ViewExpression< View< T, isConst, A >, T > base
 
typedef A::template rebind< value_type >::other allocator_type
 
- Public Types inherited from marray::ViewExpression< View< T, isConst, A >, T >
typedef View< T, isConst, A > expression_type
 
typedef T value_type
 

Public Member Functions

 Marray (const allocator_type &=allocator_type())
 Empty constructor. More...
 
 Marray (const T &, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Construct 0-dimensional (scalar) array. More...
 
template<class ShapeIterator >
 Marray (ShapeIterator, ShapeIterator, const T &=T(), const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Construct Marray with initialization. More...
 
template<class ShapeIterator >
 Marray (const InitializationSkipping &, ShapeIterator, ShapeIterator, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Construct Marray without initialization. More...
 
 Marray (const Marray< T, A > &)
 Copy from a Marray. More...
 
template<class E , class Te >
 Marray (const ViewExpression< E, Te > &, const allocator_type &=allocator_type())
 Construct Marray from ViewExpression. More...
 
template<class TLocal , bool isConstLocal, class ALocal >
 Marray (const View< TLocal, isConstLocal, ALocal > &)
 Copy from a View. More...
 
 ~Marray ()
 Destructor. More...
 
Marray< T, A > & operator= (const T &)
 Assignment. More...
 
Marray< T, A > & operator= (const Marray< T, A > &)
 Assignment. More...
 
template<class TLocal , bool isConstLocal, class ALocal >
Marray< T, A > & operator= (const View< TLocal, isConstLocal, ALocal > &)
 Assignment from View. More...
 
template<class E , class Te >
Marray< T, A > & operator= (const ViewExpression< E, Te > &)
 
void assign (const allocator_type &=allocator_type())
 Clear Marray. More...
 
template<class ShapeIterator >
void resize (ShapeIterator, ShapeIterator, const T &=T())
 Resize (existing entries are preserved, new entries are initialized). More...
 
template<class ShapeIterator >
void resize (const InitializationSkipping &, ShapeIterator, ShapeIterator)
 Resize (existing entries are preserved). More...
 
- Public Member Functions inherited from marray::View< T, false, A >
 View (const allocator_type &=allocator_type())
 Empty constructor. More...
 
 View (pointer, const allocator_type &=allocator_type())
 Construct View from a scalar. More...
 
 View (const View< T, false, A > &)
 Construct View from a View on mutable data. More...
 
 View (ShapeIterator, ShapeIterator, pointer, const CoordinateOrder &=defaultOrder, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Construct unstrided View. More...
 
 View (ShapeIterator, ShapeIterator, StrideIterator, pointer, const CoordinateOrder &, const allocator_type &=allocator_type())
 Construct strided View. More...
 
View< T, isConst, A > & operator= (const T &)
 Assignment. More...
 
View< T, isConst, A > & operator= (const View< T, true, A > &)
 Assignment. More...
 
View< T, isConst, A > & operator= (const View< T, false, A > &)
 Assignment. More...
 
View< T, isConst, A > & operator= (const View< TLocal, isConstLocal, ALocal > &)
 Assignment. More...
 
View< T, isConst, A > & operator= (const ViewExpression< E, Te > &)
 
void assign (const allocator_type &=allocator_type())
 Clear View. More...
 
void assign (ShapeIterator, ShapeIterator, pointer, const CoordinateOrder &=defaultOrder, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Initialize unstrided View. More...
 
void assign (ShapeIterator, ShapeIterator, StrideIterator, pointer, const CoordinateOrder &, const allocator_type &=allocator_type())
 Initialize strided View. More...
 
const size_t dimension () const
 Get the dimension. More...
 
const size_t size () const
 Get the number of data items. More...
 
const size_t shape (const size_t) const
 Get the shape in one dimension. More...
 
const size_tshapeBegin () const
 Get a constant iterator to the beginning of the shape vector. More...
 
const size_tshapeEnd () const
 Get a constant iterator to the end of the shape vector. More...
 
const size_t strides (const size_t) const
 Get the strides in one dimension. More...
 
const size_tstridesBegin () const
 Get a constant iterator to the beginning of the strides vector. More...
 
const size_tstridesEnd () const
 Get a constant iterator to the end of the strides vector. More...
 
const CoordinateOrdercoordinateOrder () const
 Get the coordinate order used for scalar indexing and iterators. More...
 
const bool isSimple () const
 Determine whether the shape strides equal the strides of the View. More...
 
bool overlaps (const View< TLocal, isConstLocal, ALocal > &) const
 Check whether two Views overlap. More...
 
reference operator() (U)
 Reference data. More...
 
reference operator() (U) const
 Reference data. More...
 
reference operator() (const size_t, const size_t)
 Reference data in a 2-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t) const
 Reference data in a 2-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t)
 Reference data in a 3-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t) const
 Reference data in a 3-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t)
 Reference data in a 4-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t) const
 Reference data in a 4-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t, const size_t)
 Reference data in a 5-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t, const size_t) const
 Reference data in a 5-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t)
 Reference data in a 10-dimensional View by coordinates. More...
 
reference operator() (const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t, const size_t) const
 Reference data in a 10-dimensional View by coordinates. More...
 
void view (BaseIterator, ShapeIterator, View< T, isConst, A > &) const
 Get a sub-view with the same coordinate order. More...
 
void view (BaseIterator, ShapeIterator, const CoordinateOrder &, View< T, isConst, A > &) const
 Get a sub-view. More...
 
View< T, isConst, A > view (BaseIterator, ShapeIterator) const
 Get a sub-view with the same coordinate order. More...
 
View< T, isConst, A > view (BaseIterator, ShapeIterator, const CoordinateOrder &) const
 Get a sub-view. More...
 
void constView (BaseIterator, ShapeIterator, View< T, true, A > &) const
 Get a sub-view to constant data with the same coordinate order. More...
 
void constView (BaseIterator, ShapeIterator, const CoordinateOrder &, View< T, true, A > &) const
 Get a sub-view to constant data. More...
 
View< T, true, A > constView (BaseIterator, ShapeIterator) const
 Get a sub-view to constant data with the same coordinate order. More...
 
View< T, true, A > constView (BaseIterator, ShapeIterator, const CoordinateOrder &) const
 Get a sub-view to constant data. More...
 
iterator begin ()
 Get an iterator to the beginning. More...
 
const_iterator begin () const
 Get an iterator to the beginning. More...
 
iterator end ()
 Get the end-iterator. More...
 
const_iterator end () const
 Get the end-iterator. More...
 
reverse_iterator rbegin ()
 Get a reserve iterator to the beginning. More...
 
const_reverse_iterator rbegin () const
 Get a reserve iterator to the beginning. More...
 
reverse_iterator rend ()
 Get the reverse end-iterator. More...
 
const_reverse_iterator rend () const
 Get the reverse end-iterator. More...
 
void reshape (ShapeIterator, ShapeIterator)
 Reshape the View. More...
 
void permute (CoordinateIterator)
 Permute dimensions. More...
 
void transpose (const size_t, const size_t)
 Exchange two dimensions. More...
 
void transpose ()
 Reverse dimensions. More...
 
void shift (const int)
 Cycle shift dimensions. More...
 
void squeeze ()
 Remove singleton dimensions by setting their coordinates to zero. More...
 
View< T, isConst, A > reshapedView (ShapeIterator, ShapeIterator) const
 Get a reshaped View. More...
 
View< T, isConst, A > permutedView (CoordinateIterator) const
 Get a View with permuted dimensions. More...
 
View< T, isConst, A > transposedView (const size_t, const size_t) const
 Get a View with two dimensions exchanged. More...
 
View< T, isConst, A > transposedView () const
 Get a View with dimensions reversed. More...
 
View< T, isConst, A > shiftedView (const int) const
 Get a View which dimensions cycle shifted. More...
 
View< T, isConst, A > boundView (const size_t, const size_t=0) const
 Get a View where one coordinate is bound to a value. More...
 
View< T, isConst, A > squeezedView () const
 Get a View where all singleton dimensions have been removed by setting their coordinates to zero. More...
 
void coordinatesToIndex (CoordinateIterator, size_t &) const
 Compute the index that corresponds to a sequence of coordinates. More...
 
void coordinatesToOffset (CoordinateIterator, size_t &) const
 Compute the offset that corresponds to a sequence of coordinates. More...
 
void indexToCoordinates (size_t, CoordinateIterator) const
 Compute the coordinate sequence that corresponds to an index. More...
 
void indexToOffset (size_t, size_t &) const
 Compute the offset that corresponds to an index. More...
 
std::string asString (const StringStyle &=MatrixStyle) const
 Output as string. More...
 
- Public Member Functions inherited from marray::ViewExpression< View< T, isConst, A >, T >
const size_t dimension () const
 
const size_t size () const
 
const size_t shape (const size_t j) const
 
const size_tshapeBegin () const
 
const size_tshapeEnd () const
 
bool overlaps (const View< Tv, isConst, A > &v) const
 
const CoordinateOrdercoordinateOrder () const
 
const bool isSimple () const
 
const T & operator() (Accessor it) const
 
const T & operator() (const size_t c0, const size_t c1) const
 
const T & operator() (const size_t c0, const size_t c1, const size_t c2) const
 
const T & operator() (const size_t c0, const size_t c1, const size_t c2, const size_t c3) const
 
const T & operator() (const size_t c0, const size_t c1, const size_t c2, const size_t c3, const size_t c4) const
 
const T & operator[] (const size_t offset) const
 
 operator View< T, isConst, A > & ()
 
 operator View< T, isConst, A >const & () const
 

Detailed Description

template<class T, class A>
class marray::Marray< T, A >

Runtime-flexible multi-dimensional array.

Examples:
interpixel_boundary_segmentation.cxx, and one_to_one_matching.cxx.

Definition at line 52 of file marray.hxx.

Member Typedef Documentation

template<class T, class A>
typedef A::template rebind<value_type>::other marray::Marray< T, A >::allocator_type

Definition at line 560 of file marray.hxx.

template<class T, class A>
typedef View<T, false, A> marray::Marray< T, A >::base

Definition at line 550 of file marray.hxx.

template<class T, class A>
typedef base::const_iterator marray::Marray< T, A >::const_iterator

Definition at line 558 of file marray.hxx.

template<class T, class A>
typedef base::const_pointer marray::Marray< T, A >::const_pointer

Definition at line 553 of file marray.hxx.

template<class T, class A>
typedef base::const_reference marray::Marray< T, A >::const_reference

Definition at line 555 of file marray.hxx.

template<class T, class A>
typedef base::const_reverse_iterator marray::Marray< T, A >::const_reverse_iterator

Definition at line 559 of file marray.hxx.

template<class T, class A>
typedef base::iterator marray::Marray< T, A >::iterator

Definition at line 556 of file marray.hxx.

template<class T, class A>
typedef base::pointer marray::Marray< T, A >::pointer

Definition at line 552 of file marray.hxx.

template<class T, class A>
typedef base::reference marray::Marray< T, A >::reference

Definition at line 554 of file marray.hxx.

template<class T, class A>
typedef base::reverse_iterator marray::Marray< T, A >::reverse_iterator

Definition at line 557 of file marray.hxx.

template<class T, class A>
typedef base::value_type marray::Marray< T, A >::value_type

Definition at line 551 of file marray.hxx.

Constructor & Destructor Documentation

template<class T , class A >
marray::Marray< T, A >::Marray ( const allocator_type allocator = allocator_type())
inline

Empty constructor.

Parameters
allocatorAllocator.

Definition at line 3369 of file marray.hxx.

template<class T, class A >
marray::Marray< T, A >::Marray ( const T &  value,
const CoordinateOrder coordinateOrder = defaultOrder,
const allocator_type allocator = allocator_type() 
)
inline

Construct 0-dimensional (scalar) array.

Parameters
valueValue of the single data item.
coordinateOrderFlag specifying whether FirstMajorOrder or LastMajorOrder is to be used. As the Marray can be resized after construction, the coordinate order has to be set even for a 0-dimensional Marray.
allocatorAllocator.

Definition at line 3390 of file marray.hxx.

template<class T, class A >
template<class ShapeIterator >
marray::Marray< T, A >::Marray ( ShapeIterator  begin,
ShapeIterator  end,
const T &  value = T(),
const CoordinateOrder coordinateOrder = defaultOrder,
const allocator_type allocator = allocator_type() 
)
inline

Construct Marray with initialization.

Parameters
beginIterator to the beginning of a sequence that determines the shape.
endIterator to the end of that sequence.
valueValue with which all entries are initialized.
coordinateOrderFlag specifying whether FirstMajorOrder or LastMajorOrder is to be used.
allocatorAllocator.

Definition at line 3529 of file marray.hxx.

template<class T, class A >
template<class ShapeIterator >
marray::Marray< T, A >::Marray ( const InitializationSkipping is,
ShapeIterator  begin,
ShapeIterator  end,
const CoordinateOrder coordinateOrder = defaultOrder,
const allocator_type allocator = allocator_type() 
)
inline

Construct Marray without initialization.

Parameters
isFlag to be set to SkipInitialization.
beginIterator to the beginning of a sequence that determines the shape.
endIterator to the end of that sequence.
coordinateOrderFlag specifying whether FirstMajorOrder or LastMajorOrder is to be used.
allocatorAllocator.

Definition at line 3562 of file marray.hxx.

template<class T, class A>
marray::Marray< T, A >::Marray ( const Marray< T, A > &  in)
inline

Copy from a Marray.

Parameters
inMarray (source).

Definition at line 3410 of file marray.hxx.

+ Here is the call graph for this function:

template<class T, class A >
template<class E , class Te >
marray::Marray< T, A >::Marray ( const ViewExpression< E, Te > &  expression,
const allocator_type allocator = allocator_type() 
)
inline

Construct Marray from ViewExpression.

Parameters
expressionViewExpression.
allocatorAllocator.

Definition at line 3482 of file marray.hxx.

+ Here is the call graph for this function:

template<class T, class A >
template<class TLocal , bool isConstLocal, class ALocal >
marray::Marray< T, A >::Marray ( const View< TLocal, isConstLocal, ALocal > &  in)
inline

Copy from a View.

Parameters
inView (source).

Definition at line 3437 of file marray.hxx.

template<class T , class A >
marray::Marray< T, A >::~Marray ( )
inline

Destructor.

Definition at line 3615 of file marray.hxx.

Member Function Documentation

template<class T , class A >
void marray::Marray< T, A >::assign ( const allocator_type allocator = allocator_type())
inline

Clear Marray.

Leaves the Marray in the same state as if the empty constructor had been called. Previously allocated memory is de-allocated.

Parameters
allocatorAllocator.
See also
Marray()

Definition at line 3350 of file marray.hxx.

+ Here is the caller graph for this function:

template<class T, class A >
Marray< T, A > & marray::Marray< T, A >::operator= ( const T &  value)
inline

Assignment.

Parameters
valueValue.

All entries are set to value.

Definition at line 3764 of file marray.hxx.

+ Here is the caller graph for this function:

template<class T, class A>
Marray< T, A > & marray::Marray< T, A >::operator= ( const Marray< T, A > &  in)

Assignment.

This operator works as follows:

  • It always attempts to copy the data from 'in'.
  • If 'in' and *this have the same size, already allocated memory is re-used. Otherwise, the memory allocated for *this is freed, and new memory is allocated to take the copy of 'in'.
  • If 'in' is un-initialized, memory allocated for *this is freed.
Parameters
inMarray (source).

Definition at line 3636 of file marray.hxx.

template<class T , class A >
template<class TLocal , bool isConstLocal, class ALocal >
Marray< T, A > & marray::Marray< T, A >::operator= ( const View< TLocal, isConstLocal, ALocal > &  in)

Assignment from View.

This operator works as follows:

  • It always attempts to copy the data from 'in'.
  • If 'in' and *this have overlap, a copy of 'in' is made and assigned to *this.
  • If 'in' and *this have the same size, already allocated memory is re-used. Otherwise, the memory allocated for *this is freed, and new memory is allocated to take the copy of 'in'.
  • If 'in' is un-initialized, memory allocated for *this is freed.
Parameters
inView (source).

Definition at line 3684 of file marray.hxx.

+ Here is the call graph for this function:

template<class T , class A >
template<class E , class Te>
Marray< T, A > & marray::Marray< T, A >::operator= ( const ViewExpression< E, Te > &  expression)
inline

Definition at line 3779 of file marray.hxx.

+ Here is the call graph for this function:

template<class T, class A >
template<class ShapeIterator >
void marray::Marray< T, A >::resize ( ShapeIterator  begin,
ShapeIterator  end,
const T &  value = T() 
)

Resize (existing entries are preserved, new entries are initialized).

Parameters
beginIterator to the beginning of a sequence that determines the new shape.
endIterator to the end of that sequence.
valueInitial value to be assigned to newly allocated entries.

Definition at line 3886 of file marray.hxx.

+ Here is the caller graph for this function:

template<class T, class A >
template<class ShapeIterator >
void marray::Marray< T, A >::resize ( const InitializationSkipping is,
ShapeIterator  begin,
ShapeIterator  end 
)

Resize (existing entries are preserved).

Parameters
isFlag to be set to SkipInitialization.
beginIterator to the beginning of a sequence that determines the new shape.
endIterator to the end of that sequence.

Definition at line 3918 of file marray.hxx.