ITK  4.9.0
Insight Segmentation and Registration Toolkit
Classes | Public Types | Public Member Functions | Private Attributes | Related Functions | List of all members
itk::VariableLengthVector< TValue > Class Template Reference

#include <itkConstantBoundaryCondition.h>

Detailed Description

template<typename TValue>
class itk::VariableLengthVector< TValue >

Represents an array whose length can be defined at run-time.

This class is templated over the data type. This data-type is meant to be a scalar, such as float, double etc...

Note
ITK itself provides several classes that can serve as Arrays.
  • FixedArray - Compile time fixed length arrays that's intended to represent an enumerated collection of n entities.
  • Array - Run time resizeable array that is intended to hold a collection of n entities
  • Vector - Compile time fixed length array that is intended to hold a collection of n data types. A vector usually has a mathematical meaning. It should only be used when mathematical operations such as addition, multiplication by a scalar, product etc make sense.
  • VariableLengthVector - Run time array that is intended to hold a collection of scalar data types. Again, it should be used only when mathematical operations on it are relevant. If not, use an Array.
  • Point - Represents the spatial coordinates of a spatial location. Operators on Point reflect geometrical concepts.
For the reasons listed above, you cannot instantiate
VariableLengthVector< bool >
.
Design Considerations: We do not derive from vnl_vector to avoid being limited by the explicit template instantiations of vnl_vector and other hacks that vnl folks have been forced to use.
Note
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.
See Also
CovariantVector
SymmetricSecondRankTensor
RGBPixel
DiffusionTensor3D
Wiki Examples:
Invariant
If m_LetArrayManageMemory is true, m_Data is deletable (whether it's null or pointing to something with no elements. i.e. m_NumElements may be 0 and yet m_Data may be not null.)
Examples:
WikiExamples/ImageProcessing/UnaryFunctorImageFilter.cxx, WikiExamples/SimpleOperations/VariableLengthVector.cxx, WikiExamples/VectorImages/VectorImage.cxx, WikiExamples/VectorImages/VectorImageToImageAdaptor.cxx, and WikiExamples/VectorImages/VectorIndexSelectionCastImageFilter.cxx.

Definition at line 27 of file itkConstantBoundaryCondition.h.

Classes

struct  AllocateRootPolicy
 
struct  AlwaysReallocate
 
struct  DontShrinkToFit
 
struct  DumpOldValues
 
struct  KeepOldValues
 
struct  KeepValuesRootPolicy
 
struct  NeverReallocate
 
struct  ShrinkToFit
 

Public Types

typedef TValue ComponentType
 
typedef unsigned int ElementIdentifier
 
typedef NumericTraits
< ValueType >::RealType 
RealValueType
 
typedef VariableLengthVector Self
 
typedef TValue ValueType
 

Public Member Functions

TValue * AllocateElements (ElementIdentifier size) const
 
void DestroyExistingData () noexcept
 
SelfFastAssign (const Self &v) noexcept
 
void Fill (TValue const &v) noexcept
 
const TValue * GetDataPointer () const noexcept
 
const TValue & GetElement (unsigned int i) const noexcept
 
RealValueType GetNorm () const noexcept
 
RealValueType GetSquaredNorm () const noexcept
 
bool IsAProxy () const noexcept
 
bool operator!= (const Self &v) const noexcept
 
Selfoperator- () noexcept
 
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Selfoperator= (VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &rhs)
 
Selfoperator= (const Self &v)
 
Selfoperator= (TValue const &v) noexcept
 
bool operator== (const Self &v) const noexcept
 
TValue & operator[] (unsigned int i) noexcept
 
TValue const & operator[] (unsigned int i) const noexcept
 
void SetData (TValue *data, bool LetArrayManageMemory=false) noexcept
 
void SetData (TValue *data, unsigned int sz, bool LetArrayManageMemory=false) noexcept
 
void SetElement (unsigned int i, const TValue &value) noexcept
 
template<typename TReallocatePolicy , typename TKeepValuesPolicy >
void SetSize (unsigned int sz, TReallocatePolicy reallocatePolicy, TKeepValuesPolicy keepValues)
 
 VariableLengthVector ()
 
 VariableLengthVector (unsigned int dimension)
 
 VariableLengthVector (ValueType *data, unsigned int sz, bool LetArrayManageMemory=false)
 
 VariableLengthVector (const ValueType *data, unsigned int sz, bool LetArrayManageMemory=false)
 
 VariableLengthVector (const VariableLengthVector< TValue > &v)
 
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
 VariableLengthVector (VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &rhs)
 
 ~VariableLengthVector ()
 
template<typename T >
 VariableLengthVector (const VariableLengthVector< T > &v)
 
void Swap (Self &v) noexcept
 
template<typename T >
Selfoperator= (const VariableLengthVector< T > &v)
 
unsigned int Size (void) const noexcept
 
unsigned int GetSize (void) const noexcept
 
unsigned int GetNumberOfElements (void) const noexcept
 
void SetSize (unsigned int sz, bool destroyExistingData=true)
 
void Reserve (ElementIdentifier size)
 
Selfoperator-- () noexcept
 
Selfoperator++ () noexcept
 
Self operator-- (int)
 
Self operator++ (int)
 
template<typename T >
Selfoperator-= (const VariableLengthVector< T > &v) noexcept
 
Selfoperator-= (TValue s) noexcept
 
template<typename T >
Selfoperator+= (const VariableLengthVector< T > &v) noexcept
 
Selfoperator+= (TValue s) noexcept
 
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Selfoperator+= (VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &rhs) noexcept
 
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Selfoperator-= (VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &rhs) noexcept
 
template<typename T >
Selfoperator*= (T s) noexcept
 
Selfoperator*= (TValue s) noexcept
 
template<typename T >
Selfoperator/= (T s) noexcept
 

Private Attributes

TValue * m_Data
 
bool m_LetArrayManageMemory
 
ElementIdentifier m_NumElements
 

Related Functions

(Note that these are not member functions.)

template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf
< Details::op::CanBeMultiplied
< TExpr1, TExpr2 >
, VariableLengthVectorExpression
< TExpr1, TExpr2,
Details::op::Mult > >::Type 
operator* (TExpr1 const &lhs, TExpr2 const &rhs) noexcept
 
template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf
< Details::op::CanBeAddedOrSubstracted
< TExpr1, TExpr2 >
, VariableLengthVectorExpression
< TExpr1, TExpr2,
Details::op::Plus > >::Type 
operator+ (TExpr1 const &lhs, TExpr2 const &rhs) noexcept
 
template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf
< Details::op::CanBeAddedOrSubstracted
< TExpr1, TExpr2 >
, VariableLengthVectorExpression
< TExpr1, TExpr2,
Details::op::Sub > >::Type 
operator- (TExpr1 const &lhs, TExpr2 const &rhs) noexcept
 
template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf
< Details::op::CanBeDivided
< TExpr1, TExpr2 >
, VariableLengthVectorExpression
< TExpr1, TExpr2,
Details::op::Div > >::Type 
operator/ (TExpr1 const &lhs, TExpr2 const &rhs) noexcept
 
Serialization
template<typename TValue >
std::ostream & operator<< (std::ostream &os, const VariableLengthVector< TValue > &arr)
 
Standard compliance functions
template<typename T >
void swap (VariableLengthVector< T > &l_, VariableLengthVector< T > &r_) noexcept
 

Member Typedef Documentation

template<typename TValue>
typedef TValue itk::VariableLengthVector< TValue >::ComponentType

Definition at line 310 of file itkVariableLengthVector.h.

template<typename TValue>
typedef unsigned int itk::VariableLengthVector< TValue >::ElementIdentifier

Typedef used to indicate the number of elements in the vector

Definition at line 315 of file itkVariableLengthVector.h.

template<typename TValue>
typedef NumericTraits< ValueType >::RealType itk::VariableLengthVector< TValue >::RealValueType

Definition at line 311 of file itkVariableLengthVector.h.

template<typename TValue>
typedef VariableLengthVector itk::VariableLengthVector< TValue >::Self

Definition at line 312 of file itkVariableLengthVector.h.

template<typename TValue>
typedef TValue itk::VariableLengthVector< TValue >::ValueType

The element type stored at each location in the Array.

Definition at line 309 of file itkVariableLengthVector.h.

Constructor & Destructor Documentation

template<typename TValue>
itk::VariableLengthVector< TValue >::VariableLengthVector ( )

Default constructor. It is created with an empty array it has to be allocated later by assignment, SetSize() or Reserve().

Postcondition
m_Data is null
m_NumElements is 0
m_LetArrayManageMemory is true
template<typename TValue>
itk::VariableLengthVector< TValue >::VariableLengthVector ( unsigned int  dimension)
explicit

Constructor with size. Size can only be changed by assignment, SetSize() or Reserve().

Postcondition
m_Data is not null and points to an array of m_NumElements, even if m_NumElements is 0
values are left uninitialized.
m_NumElements is dimension
m_LetArrayManageMemory is true
template<typename TValue>
itk::VariableLengthVector< TValue >::VariableLengthVector ( ValueType data,
unsigned int  sz,
bool  LetArrayManageMemory = false 
)

Constructor that initializes array with contents from a user supplied buffer. The pointer to the buffer and the length is specified. By default, the array does not manage the memory of the buffer. It merely points to that location and it is the user's responsibility to delete it. If LetArrayManageMemory is true, then this class will free the memory when this object is destroyed.

Postcondition
m_Data == data
values are left unmodified
m_NumElements == sz
m_LetArrayManageMemory == LetArrayManageMemory
template<typename TValue>
itk::VariableLengthVector< TValue >::VariableLengthVector ( const ValueType data,
unsigned int  sz,
bool  LetArrayManageMemory = false 
)

Constructor that initializes array with contents from a user supplied buffer. The pointer to the buffer and the length is specified. By default, the array does not manage the memory of the buffer. It merely points to that location and it is the user's responsibility to delete it. If LetArrayManageMemory is true, then this class will free the memory when this object is destroyed.

Warning
This overload receives a non-modiable array, and yet it will let the end-user try to modify it through VariableLengthVector interface. Use this constructor with care as this may lead to undefined behaviour. Prefer using VariableLengthVector<const TValue> instead of VariableLengthVector<TValue> in case we which to use this constructor.
Postcondition
m_Data == data
values are left unmodified
m_NumElements == sz
m_LetArrayManageMemory == LetArrayManageMemory
template<typename TValue>
template<typename T >
itk::VariableLengthVector< TValue >::VariableLengthVector ( const VariableLengthVector< T > &  v)
inline

Copy constructor. The reason why the copy constructor and the assignment operator are templated is that it will allow implicit casts to be performed. For instance:

VariableLengthVector< int > vI;
VariableLengthVector< float > vF( vI );
or for instance vF = static_cast< VariableLengthVector< float > >( vI );
Note
However that static casting in this way will imply the allocation of a temporary VariableLengthVector. Prefer to directly use the assignment converting operator in code where uses of static_cast<> would be required.
Postcondition
m_Data is not null and points to an array of m_NumElements, if m_NumElements is 0, otherwise it's null.
values are left uninitialized.
m_NumElements is v.GetSize()
m_LetArrayManageMemory is true

Definition at line 393 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::AllocateElements(), itk::VariableLengthVector< TValue >::m_Data, itk::VariableLengthVector< TValue >::m_LetArrayManageMemory, itk::VariableLengthVector< TValue >::m_NumElements, and itk::VariableLengthVector< TValue >::Size().

template<typename TValue>
itk::VariableLengthVector< TValue >::VariableLengthVector ( const VariableLengthVector< TValue > &  v)

Copy constructor. Overrides the default non-templated copy constructor that the compiler provides.

Postcondition
m_Data is not null and points to an array of m_NumElements, if m_NumElements is 0, otherwise it's null.
values are left uninitialized.
m_NumElements is v.GetSize()
m_LetArrayManageMemory is true
template<typename TValue>
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
itk::VariableLengthVector< TValue >::VariableLengthVector ( VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &  rhs)

Constructor from an Expression Template vector.

Template Parameters
TExpr1Type of the left sub-expression
TExpr2Type of the right sub-expression
TBinaryOpBinary Operation to apply to both sub-expressions.
Parameters
[in]rhsNon evaluated Expression Template.

Builds the new VariableLengthVector with an expression template. The code loops over all components from the template expression, and evaluates them on the fly to fill the content of the new vector.

Postcondition
m_Data is not null and points to an array of m_NumElements, even if m_NumElements is 0
*this == rhs
m_NumElements is rhs.GetSize()
m_LetArrayManageMemory is true
template<typename TValue>
itk::VariableLengthVector< TValue >::~VariableLengthVector ( )

This destructor is not virtual for performance reasons. However, this means that subclasses cannot allocate memory.

Member Function Documentation

template<typename TValue>
TValue* itk::VariableLengthVector< TValue >::AllocateElements ( ElementIdentifier  size) const

Allocate memory of certain size and return it.

Returns
a non-null pointer to an array of size elements (0 is a valid parameter).

Referenced by itk::VariableLengthVector< TValue >::VariableLengthVector().

template<typename TValue>
void itk::VariableLengthVector< TValue >::DestroyExistingData ( )
noexcept

Destroy data that is allocated internally, if LetArrayManageMemory is true.

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::FastAssign ( const Self v)
noexcept

Fast Assignment.

Precondition
m_LetArrayManageMemory is true: the VariableLengthVector is not a proxy, checked with an assertion. Call SetSize(GetSize(), NeverReallocate(), DumpOldValues()) to ensure a vector is not a proxy anymore.
current size is identical to the one from the right hand side operand, checked with an assertion.
Doesn't not support empty vectors.
template<typename TValue>
void itk::VariableLengthVector< TValue >::Fill ( TValue const &  v)
noexcept
template<typename TValue>
const TValue* itk::VariableLengthVector< TValue >::GetDataPointer ( ) const
inlinenoexcept
template<typename TValue>
const TValue& itk::VariableLengthVector< TValue >::GetElement ( unsigned int  i) const
inlinenoexcept

Get one element

Definition at line 588 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data.

template<typename TValue>
RealValueType itk::VariableLengthVector< TValue >::GetNorm ( ) const
noexcept
template<typename TValue>
unsigned int itk::VariableLengthVector< TValue >::GetNumberOfElements ( void  ) const
inlinenoexcept

Return the number of elements in the Array

Definition at line 578 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
unsigned int itk::VariableLengthVector< TValue >::GetSize ( void  ) const
inlinenoexcept
template<typename TValue>
RealValueType itk::VariableLengthVector< TValue >::GetSquaredNorm ( ) const
noexcept

Returns vector's squared Euclidean Norm

template<typename TValue>
bool itk::VariableLengthVector< TValue >::IsAProxy ( ) const
inlinenoexcept

letArrayManageMemory getter.

Definition at line 945 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_LetArrayManageMemory.

template<typename TValue>
bool itk::VariableLengthVector< TValue >::operator!= ( const Self v) const
noexcept
template<typename TValue>
template<typename T >
Self& itk::VariableLengthVector< TValue >::operator*= ( s)
inlinenoexcept

Multiply each element of the vector by a scalar 's'. The scalar value is cast to the current vector element type prior to multiplication.

Exceptions
None

Definition at line 884 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator*= ( TValue  s)
inlinenoexcept

Multiply each element of the vector by a scalar 's'.

Exceptions
None

Definition at line 898 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator++ ( )
inlinenoexcept

Prefix operator that adds 1 to each element of the vector.

Definition at line 741 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self itk::VariableLengthVector< TValue >::operator++ ( int  )
inline

Postfix operator that adds 1 to each element of the vector.

Definition at line 763 of file itkVariableLengthVector.h.

template<typename TValue>
template<typename T >
Self& itk::VariableLengthVector< TValue >::operator+= ( const VariableLengthVector< T > &  v)
inlinenoexcept

Element-wise addition of vector 'v' to the current vector. The vectors do not have to have the same element type. The input vector elements are cast to the current vector element type before the addition is performed.

Exceptions
None
Note
For efficiency, the length of the vectors is not checked; they are assumed to have the same length.

Definition at line 814 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator+= ( TValue  s)
inlinenoexcept

Add scalar 's' to each element of the vector.

Definition at line 826 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Self& itk::VariableLengthVector< TValue >::operator+= ( VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &  rhs)
inlinenoexcept

Compound addition operator with a expression template vector.

Template Parameters
TExpr1Type of the left sub-expression
TExpr2Type of the right sub-expression
TBinaryOpBinary Operation to apply to both sub-expressions.
Parameters
[in]rhsNon evaluated Expression Template.
Precondition
Size() == rhs.Size(), checked with an assertion
Note
The elements of the expression template are evaluated one by one.

Definition at line 846 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, itk::VariableLengthVector< TValue >::m_NumElements, and itk::VariableLengthVector< TValue >::Size().

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator- ( )
noexcept

Negates each vector element.

Warning
This operator has a non standard semantics. Instead of returning a new VariableLengthVector, it modifies the current object.
template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator-- ( )
inlinenoexcept

Prefix operator that subtracts 1 from each element of the vector.

Definition at line 730 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self itk::VariableLengthVector< TValue >::operator-- ( int  )
inline

Postfix operator that subtracts 1 from each element of the vector.

Definition at line 753 of file itkVariableLengthVector.h.

template<typename TValue>
template<typename T >
Self& itk::VariableLengthVector< TValue >::operator-= ( const VariableLengthVector< T > &  v)
inlinenoexcept

Element-wise subtraction of vector 'v' from the current vector. The vectors do not have to have the same element type. The input vector elements are cast to the current vector element type before the subtraction is performed.

Exceptions
None
Note
For efficiency, the length of the vectors is not checked; they are assumed to have the same length.

Definition at line 782 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator-= ( TValue  s)
inlinenoexcept

Subtract scalar 's' from each element of the current vector.

Definition at line 794 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Self& itk::VariableLengthVector< TValue >::operator-= ( VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &  rhs)
inlinenoexcept

Compound substraction operator with a expression template vector.

Template Parameters
TExpr1Type of the left sub-expression
TExpr2Type of the right sub-expression
TBinaryOpBinary Operation to apply to both sub-expressions.
Parameters
[in]rhsNon evaluated Expression Template.
Precondition
Size() == rhs.Size(), checked with an assertion
Note
The elements of the expression template are evaluated one by one.

Definition at line 867 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, itk::VariableLengthVector< TValue >::m_NumElements, and itk::VariableLengthVector< TValue >::Size().

template<typename TValue>
template<typename T >
Self& itk::VariableLengthVector< TValue >::operator/= ( s)
inlinenoexcept

Divide vector elements by a scalar 's'. The vector does not have to have the same element type as the scalar type. Both the scalar and vector elements are cast to the RealValueType prior to division, and the result is cast to the ValueType.

Exceptions
None

Definition at line 915 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, and itk::VariableLengthVector< TValue >::m_NumElements.

template<typename TValue>
template<typename TExpr1 , typename TExpr2 , typename TBinaryOp >
Self& itk::VariableLengthVector< TValue >::operator= ( VariableLengthVectorExpression< TExpr1, TExpr2, TBinaryOp > const &  rhs)

Assignment from an Expression Template vector.

Template Parameters
TExpr1Type of the left sub-expression
TExpr2Type of the right sub-expression
TBinaryOpBinary Operation to apply to both sub-expressions.
Parameters
[in]rhsNon evaluated Expression Template.

Resets the new VariableLengthVector with an expression template. The code loops over all components from the template expression, and evaluates them on the fly to fill the content of the current vector.

Postcondition
if called on a VariableLengthVector proxy, the referenced values are left unchanged.
m_Data is not null and points to an array of m_NumElements, if m_NumElements is not 0. m_Data may be null otherwise (an empty vector is assigned into another empty vector)
m_LetArrayManageMemory is true
GetSize() == rhs.GetSize()
*this == rhs
template<typename TValue>
template<typename T >
Self& itk::VariableLengthVector< TValue >::operator= ( const VariableLengthVector< T > &  v)
inline

Converting assignment operator.

Note
Ensures a String Exception Guarantee: resists to self-assignment, and no changes are made if memory cannot be allocated to hold the new elements. This presumes TValue assignment is a noexcept operation.
Postcondition
if called on a VariableLengthVector proxy, the referenced values are left unchanged.
m_LetArrayManageMemory is true
GetSize() == v.GetSize(), modulo precision
*this == v

Definition at line 520 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, itk::VariableLengthVector< TValue >::SetSize(), and itk::VariableLengthVector< TValue >::Size().

template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator= ( const Self v)

Copy-Assignment operator.

Note
Ensures a String Exception Guarantee: resists to self-assignment, and no changes are made if memory cannot be allocated to hold the new elements. This is expecting TValue assignment is a noexcept operation.
Postcondition
if called on a VariableLengthVector proxy, the referenced values are left unchanged.
m_Data is not null and points to an array of m_NumElements, if m_NumElements is not 0. m_Data may be null otherwise (an empty vector is assigned into another empty vector)
m_LetArrayManageMemory is true
GetSize() == v.GetSize()
*this == v
template<typename TValue>
Self& itk::VariableLengthVector< TValue >::operator= ( TValue const &  v)
noexcept

Assignment operator from a numeric value.

Precondition
This assumes m_LetArrayManageMemory is true, but it is unchecked. If this operator is called on a VariableLengthVector proxy, referenced values will be overwritten.
Postcondition
Elements in [m_Data, m_Data+GetSize()) will be equal to v, modulo precision
template<typename TValue>
bool itk::VariableLengthVector< TValue >::operator== ( const Self v) const
noexcept
template<typename TValue>
TValue& itk::VariableLengthVector< TValue >::operator[] ( unsigned int  i)
inlinenoexcept

Return reference to the element at specified index. No range checking.

Definition at line 582 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data.

template<typename TValue>
TValue const& itk::VariableLengthVector< TValue >::operator[] ( unsigned int  i) const
inlinenoexcept

Return reference to the element at specified index. No range checking.

Definition at line 585 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data.

template<typename TValue>
void itk::VariableLengthVector< TValue >::Reserve ( ElementIdentifier  size)

Reserves memory of a certain length.

If the array already contains data, the existing data is copied over and
new space is allocated, if necessary. If the length to reserve is less
than the current number of elements, then an appropriate number of elements
are discarded.
\post \c m_Data is not null and can hold \c size elements.
\post \c m_LetArrayManageMemory may be left unchanged if there already are
enough elements.

\note You may prefer instead
`SetSize(N, DontShrinkToFit(), KeepOldValues());` that ensures that the
array is not a proxy at the end of the operation.
template<typename TValue>
void itk::VariableLengthVector< TValue >::SetData ( TValue *  data,
bool  LetArrayManageMemory = false 
)
noexcept

Set the pointer from which the data is imported. If "LetArrayManageMemory" is false, then the application retains the responsibility of freeing the memory for this data. If "LetArrayManageMemory" is true, then this class will free the memory when this object is destroyed.

Warning
The size of the new data shall match vector current size. Prefer the other overload.
Postcondition
old m_Data is deleted iff m_LetArrayManageMemory is true
m_Data == data
m_LetArrayManageMemory ==LetArrayManageMemory
Size() is left unmodified.

Referenced by itk::MetaArrayReader::GetOutput().

template<typename TValue>
void itk::VariableLengthVector< TValue >::SetData ( TValue *  data,
unsigned int  sz,
bool  LetArrayManageMemory = false 
)
noexcept

Similar to the previous method. In the above method, the size must be separately set prior to using user-supplied data. This introduces an unnecessary allocation step to be performed. This method avoids it and should be used to import data wherever possible to avoid this. Set the pointer from which the data is imported. If "LetArrayManageMemory" is false, then the application retains the responsibility of freeing the memory for this data. If "LetArrayManageMemory" is true, then this class will free the memory when this object is destroyed.

Postcondition
old m_Data is deleted iff m_LetArrayManageMemory is true
m_Data == data
m_LetArrayManageMemory ==LetArrayManageMemory
m_NumElements == sz
template<typename TValue>
void itk::VariableLengthVector< TValue >::SetElement ( unsigned int  i,
const TValue &  value 
)
inlinenoexcept

Set one element

Definition at line 591 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data.

template<typename TValue>
template<typename TReallocatePolicy , typename TKeepValuesPolicy >
void itk::VariableLengthVector< TValue >::SetSize ( unsigned int  sz,
TReallocatePolicy  reallocatePolicy,
TKeepValuesPolicy  keepValues 
)
template<typename TValue>
void itk::VariableLengthVector< TValue >::SetSize ( unsigned int  sz,
bool  destroyExistingData = true 
)
inline

Set the size to that given.

If \c destroyExistingData is \c false:
If the array already contains data, the existing data is copied over and
new space is allocated, if necessary. If the length to reserve is less
than the current number of elements, then an appropriate number of elements
are discarded.
   If \c true, the size is set destructively to the length given. If the
length is different from the current length, existing data will be lost.
The default is \c true.  

Definition at line 641 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::SetSize().

template<typename TValue>
unsigned int itk::VariableLengthVector< TValue >::Size ( void  ) const
inlinenoexcept
template<typename TValue>
void itk::VariableLengthVector< TValue >::Swap ( Self v)
inlinenoexcept

Swaps two VariableLengthVector 's.

Precondition
Expects either none of the VariableLengthVector to act as a proxy, or both, checked with an assertion.
Postcondition
*this and old contents are swapped.
Parameters
[in,out]vother VariableLengthVector to be swapped with.
Exceptions
None
See Also
itk::swap()

Definition at line 431 of file itkVariableLengthVector.h.

References itk::VariableLengthVector< TValue >::m_Data, itk::VariableLengthVector< TValue >::m_LetArrayManageMemory, itk::VariableLengthVector< TValue >::m_NumElements, itk::swap(), and itk::VariableLengthVector< TValue >::swap().

Friends And Related Function Documentation

template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf< Details::op::CanBeMultiplied< TExpr1, TExpr2 >, VariableLengthVectorExpression< TExpr1, TExpr2, Details::op::Mult > >::Type operator* ( TExpr1 const &  lhs,
TExpr2 const &  rhs 
)
related

Multiplication between a VariableLengthVector and a scalar. This operation is generic and takes one array and one number (on either side).

Returns
an expression template proxy object.
Exceptions
NoneAs no allocation will be performed.
See Also
mpl::IsArray<> to know the exact array types recognized as array by this traits

Definition at line 1255 of file itkVariableLengthVector.h.

template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf< Details::op::CanBeAddedOrSubstracted< TExpr1, TExpr2 >, VariableLengthVectorExpression< TExpr1, TExpr2, Details::op::Plus > >::Type operator+ ( TExpr1 const &  lhs,
TExpr2 const &  rhs 
)
related

Addition involving a VariableLengthVector. This operation is generic and takes:

  • two arrays,
  • or one array and one number (on either side)
    Returns
    an expression template proxy object.
    Exceptions
    NoneAs no allocation will be performed.
    See Also
    mpl::IsArray<> to know the exact array types recognized as array by this traits

Definition at line 1226 of file itkVariableLengthVector.h.

template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf< Details::op::CanBeAddedOrSubstracted< TExpr1, TExpr2 >, VariableLengthVectorExpression< TExpr1, TExpr2, Details::op::Sub > >::Type operator- ( TExpr1 const &  lhs,
TExpr2 const &  rhs 
)
related

Substraction involving a VariableLengthVector. This operation is generic and takes:

  • two arrays,
  • or one array and one number (on either side)
    Returns
    an expression template proxy object.
    Exceptions
    NoneAs no allocation will be performed.
    See Also
    mpl::IsArray<> to know the exact array types recognized as array by this traits

Definition at line 1241 of file itkVariableLengthVector.h.

template<typename TExpr1 , typename TExpr2 >
mpl::EnableIf< Details::op::CanBeDivided< TExpr1, TExpr2 >, VariableLengthVectorExpression< TExpr1, TExpr2, Details::op::Div > >::Type operator/ ( TExpr1 const &  lhs,
TExpr2 const &  rhs 
)
related

Division of a VariableLengthVector by a scalar. This operation is generic and takes one array and one number.

Returns
an expression template proxy object.
Exceptions
NoneAs no allocation will be performed.
See Also
mpl::IsArray<> to know the exact array types recognized as array by this traits

Definition at line 1268 of file itkVariableLengthVector.h.

template<typename TValue >
std::ostream & operator<< ( std::ostream &  os,
const VariableLengthVector< TValue > &  arr 
)
related

Serialization of VariableLengthVector

Definition at line 1332 of file itkVariableLengthVector.h.

template<typename T >
void swap ( VariableLengthVector< T > &  l_,
VariableLengthVector< T > &  r_ 
)
related

swap() overload for VariableLengthVector

Exceptions
None

Definition at line 1374 of file itkVariableLengthVector.h.

Referenced by itk::VariableLengthVector< TValue >::Swap().

Member Data Documentation

template<typename TValue>
TValue* itk::VariableLengthVector< TValue >::m_Data
private
template<typename TValue>
bool itk::VariableLengthVector< TValue >::m_LetArrayManageMemory
private
template<typename TValue>
ElementIdentifier itk::VariableLengthVector< TValue >::m_NumElements
private

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