Field3D
DenseField< Data_T > Class Template Reference

This subclass of Field stores data in a contiguous std::vector. More...

#include <DenseField.h>

Inheritance diagram for DenseField< Data_T >:
ResizableField< Data_T > WritableField< Data_T > Field< Data_T > FieldRes FieldBase RefBase

Classes

class  const_iterator
 
class  iterator
 

Public Types

typedef ResizableField< Data_T > base
 
typedef DenseField< Data_T > class_type
 
typedef
CubicGenericFieldInterp
< DenseField< Data_T > > 
CubicInterp
 
typedef
LinearGenericFieldInterp
< DenseField< Data_T > > 
LinearInterp
 
typedef boost::intrusive_ptr
< DenseField
Ptr
 
typedef std::vector< PtrVec
 
- Public Types inherited from ResizableField< Data_T >
typedef ResizableField< Data_T > class_type
 
typedef boost::intrusive_ptr
< ResizableField
Ptr
 
- Public Types inherited from WritableField< Data_T >
typedef WritableField< Data_T > class_type
 
typedef boost::intrusive_ptr
< WritableField
Ptr
 
- Public Types inherited from Field< Data_T >
typedef Field< Data_T > class_type
 
typedef boost::intrusive_ptr
< Field
Ptr
 
typedef Data_T value_type
 Allows us to reference the template class. More...
 
typedef std::vector< PtrVec
 This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in. More...
 
- Public Types inherited from FieldRes
typedef FieldRes class_type
 
typedef boost::intrusive_ptr
< FieldRes
Ptr
 
typedef std::vector< PtrVec
 
- Public Types inherited from FieldBase
typedef FieldBase class_type
 
typedef boost::intrusive_ptr
< FieldBase
Ptr
 
- Public Types inherited from RefBase
typedef boost::intrusive_ptr
< RefBase
Ptr
 

Public Member Functions

virtual void clear (const Data_T &value)
 Clears all the voxels in the storage. More...
 
Data_T & fastLValue (int i, int j, int k)
 Write access to voxel. Notice that this is non-virtual. More...
 
const Data_T & fastValue (int i, int j, int k) const
 Read access to voxel. Notice that this is non-virtual. More...
 
const FIELD3D_VEC3_T< size_t > & internalMemSize () const
 Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels. More...
 
Constructors & destructor
 DenseField ()
 Constructs an empty buffer. More...
 
From Field
virtual Data_T value (int i, int j, int k) const
 Read access to a voxel. The coordinates are in integer voxel space . More...
 
virtual long long int memSize () const
 Returns the memory usage (in bytes) More...
 
From WritableField
virtual Data_T & lvalue (int i, int j, int k)
 Write access to a voxel. The coordinates are global coordinates. More...
 
Iterators
const_iterator cbegin () const
 Const iterator to first element. "cbegin" matches the tr1 c++ standard. More...
 
const_iterator cbegin (const Box3i &subset) const
 Const iterator to first element of specific subset. More...
 
const_iterator cend () const
 Const iterator pointing one element past the last valid one. More...
 
const_iterator cend (const Box3i &subset) const
 Const iterator pointing one element past the last valid one (for a subset) More...
 
iterator begin ()
 Iterator to first element. More...
 
iterator begin (const Box3i &subset)
 Iterator to first element of specific subset. More...
 
iterator end ()
 Iterator pointing one element past the last valid one. More...
 
iterator end (const Box3i &subset)
 Iterator pointing one element past the last valid one (for a subset) More...
 
From FieldBase
virtual std::string className () const
 Returns the class name of the object. Used by the class pool and when writing the data to disk. More...
 
virtual FieldBase::Ptr clone () const
 Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it. More...
 
- Public Member Functions inherited from ResizableField< Data_T >
void copyFrom (typename Field< Data_T >::Ptr other)
 Copies the data from another Field, also resizes. More...
 
template<class Data_T2 >
void copyFrom (typename Field< Data_T2 >::Ptr other)
 Copies the data from another Field of another template class, also resizes. More...
 
void matchDefinition (FieldRes::Ptr fieldToMatch)
 Sets up this field so that resolution and mapping matches the other. More...
 
void setSize (const V3i &size)
 Resizes the object. More...
 
void setSize (const Box3i &extents)
 Resizes the object. More...
 
void setSize (const Box3i &extents, const Box3i &dataWindow)
 Resizes the object. More...
 
void setSize (const V3i &size, int padding)
 Resizes the object with padding. More...
 
- Public Member Functions inherited from WritableField< Data_T >
iterator begin ()
 Iterator to first element. More...
 
iterator begin (const Box3i &subset)
 Iterator to first element of specific subset. More...
 
iterator end ()
 Iterator pointing one element past the last valid one. More...
 
iterator end (const Box3i &subset)
 Iterator pointing one element past the last valid one (for a subset) More...
 
- Public Member Functions inherited from Field< Data_T >
const_iterator cbegin () const
 Const iterator to first element. "cbegin" matches the tr1 c++ standard. More...
 
const_iterator cbegin (const Box3i &subset) const
 Const iterator to first element of specific subset. More...
 
const_iterator cend () const
 Const iterator pointing one element past the last valid one. More...
 
const_iterator cend (const Box3i &subset) const
 Const iterator pointing one element past the last valid one (for a subset) More...
 
virtual std::string dataTypeString () const
 
virtual ~Field ()
 Dtor. More...
 
- Public Member Functions inherited from FieldRes
V3i const dataResolution () const
 
const Box3idataWindow () const
 Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field subclass. More...
 
const Box3iextents () const
 Returns the extents of the data. This signifies the relevant area that the data exists over. However, the data window (below) may be smaller than the extents, in which case it is only safe to call value() for those coordinate inside the data window. More...
 
 FieldRes ()
 This constructor ensures that we have a valid mapping at all times. More...
 
 FieldRes (const FieldRes &src)
 Base class copy constructor. More...
 
bool isInBounds (int i, int j, int k) const
 Returns true is the indicies are in bounds of the data window. More...
 
FieldMapping::Ptr mapping ()
 Returns a pointer to the mapping. More...
 
const FieldMapping::Ptr mapping () const
 Returns a pointer to the mapping. More...
 
void setMapping (FieldMapping::Ptr mapping)
 Sets the field's mapping. More...
 
- Public Member Functions inherited from FieldBase
 FieldBase ()
 Constructor. More...
 
 FieldBase (const FieldBase &)
 Copy Constructor. More...
 
virtual ~FieldBase ()
 Destructor. More...
 
FieldMetadata< FieldBase > & metadata ()
 accessor to the m_metadata class More...
 
const FieldMetadata< FieldBase > & metadata () const
 Read only access to the m_metadata class. More...
 
virtual void metadataHasChanged (const std::string &)
 This function should implemented by concrete classes to get the callback when metadata changes. More...
 
void copyMetadata (const FieldBase &field)
 Copies the metadata from a second field. More...
 
- Public Member Functions inherited from RefBase
void ref () const
 Used by boost::intrusive_pointer. More...
 
size_t refcnt ()
 Used by boost::intrusive_pointer. More...
 
void unref () const
 Used by boost::intrusive_pointer. More...
 
 RefBase ()
 
 RefBase (const RefBase &)
 Copy constructor. More...
 
RefBaseoperator= (const RefBase &)
 Assignment operator. More...
 
virtual ~RefBase ()
 Destructor. More...
 
virtual bool checkRTTI (const char *typenameStr)=0
 This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();. More...
 
bool matchRTTI (const char *typenameStr)
 Performs a check to see if the given typename string matches this class' This needs to be implemented in -all- subclasses, even abstract ones. More...
 

Static Public Member Functions

static const char * classType ()
 
static
DEFINE_FIELD_RTTI_CONCRETE_CLASS
const char * 
staticClassName ()
 
- Static Public Member Functions inherited from ResizableField< Data_T >
static const char * classType ()
 
static const char * staticClassName ()
 
- Static Public Member Functions inherited from WritableField< Data_T >
static const char * classType ()
 
static const char * staticClassName ()
 
- Static Public Member Functions inherited from Field< Data_T >
static const char * classType ()
 
static const char * staticClassName ()
 
- Static Public Member Functions inherited from FieldRes
static const char * classType ()
 
static const char * staticClassName ()
 
- Static Public Member Functions inherited from FieldBase
static const char * classType ()
 
static const char * staticClassName ()
 
- Static Public Member Functions inherited from RefBase
static const char * classType ()
 

Protected Member Functions

virtual void sizeChanged ()
 Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes. More...
 

Protected Attributes

std::vector< Data_T > m_data
 Field storage. More...
 
FIELD3D_VEC3_T< size_t > m_memSize
 Memory allocation size in each dimension. More...
 
size_t m_memSizeXY
 X scanline * Y scanline size. More...
 
- Protected Attributes inherited from FieldRes
Box3i m_dataWindow
 Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval. More...
 
Box3i m_extents
 Defines the extents of the the storage. This may be larger or smaller than the data window, and in the case where it is larger, care must be taken not to access voxels outside the data window. This should be treated as a closed (i.e. inclusive) interval. More...
 
FieldMapping::Ptr m_mapping
 Pointer to the field's mapping. More...
 

Private Member Functions

Data_T * ptr (int i, int j, int k)
 Returns a pointer to a given element. Used by the iterators mainly. More...
 
const Data_T * ptr (int i, int j, int k) const
 Returns a pointer to a given element. Used by the iterators mainly. More...
 

Static Private Attributes

static TemplatedFieldType
< DenseField< Data_T > > 
ms_classType
 

Additional Inherited Members

- Public Attributes inherited from ResizableField< Data_T >
 DEFINE_FIELD_RTTI_ABSTRACT_CLASS
 
- Public Attributes inherited from WritableField< Data_T >
 DEFINE_FIELD_RTTI_ABSTRACT_CLASS
 
- Public Attributes inherited from Field< Data_T >
 DEFINE_FIELD_RTTI_ABSTRACT_CLASS
 
- Public Attributes inherited from FieldRes
 DEFINE_FIELD_RTTI_ABSTRACT_CLASS
 
- Public Attributes inherited from FieldBase
std::string attribute
 Optional name of the attribute the field represents. More...
 
std::string name
 Optional name of the field. More...
 
- Protected Types inherited from ResizableField< Data_T >
typedef WritableField< Data_T > base
 
- Protected Types inherited from FieldRes
typedef MatrixFieldMapping default_mapping
 
- Static Protected Attributes inherited from ResizableField< Data_T >
static TemplatedFieldType
< ResizableField< Data_T > > 
ms_classType
 

Detailed Description

template<class Data_T>
class DenseField< Data_T >

This subclass of Field stores data in a contiguous std::vector.

Refer to using_fields for examples of how to use this in your code.

Definition at line 82 of file DenseField.h.

Member Typedef Documentation

template<class Data_T>
typedef boost::intrusive_ptr<DenseField> DenseField< Data_T >::Ptr

Definition at line 89 of file DenseField.h.

template<class Data_T>
typedef std::vector<Ptr> DenseField< Data_T >::Vec

Definition at line 90 of file DenseField.h.

template<class Data_T>
typedef LinearGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::LinearInterp

Definition at line 92 of file DenseField.h.

template<class Data_T>
typedef CubicGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::CubicInterp

Definition at line 93 of file DenseField.h.

template<class Data_T>
typedef ResizableField<Data_T> DenseField< Data_T >::base

Definition at line 95 of file DenseField.h.

template<class Data_T>
typedef DenseField<Data_T> DenseField< Data_T >::class_type

Definition at line 122 of file DenseField.h.

Constructor & Destructor Documentation

template<class Data_T >
DenseField< Data_T >::DenseField ( )

Constructs an empty buffer.

Definition at line 403 of file DenseField.h.

Referenced by DenseField< Data_T >::clone().

404  : base(),
405  m_memSize(0), m_memSizeXY(0)
406 {
407  // Empty
408 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213
ResizableField< Data_T > base
Definition: DenseField.h:95

Member Function Documentation

template<class Data_T >
void DenseField< Data_T >::clear ( const Data_T &  value)
virtual

Clears all the voxels in the storage.

Reimplemented from WritableField< Data_T >.

Definition at line 413 of file DenseField.h.

414 {
415  std::fill(m_data.begin(), m_data.end(), value);
416 }
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
virtual Data_T value(int i, int j, int k) const
Read access to a voxel. The coordinates are in integer voxel space .
Definition: DenseField.h:421
template<class Data_T >
Data_T DenseField< Data_T >::value ( int  i,
int  j,
int  k 
) const
virtual

Read access to a voxel. The coordinates are in integer voxel space .

Note
Before the internal storage is accessed, the subclass must compute the data window coordinates by looking at Field::m_dataWindow.
Virtual functions are known not to play nice with threading. Therefor, concrete classes can implement (by convention) fastValue() as a non-virtual function.

Implements Field< Data_T >.

Definition at line 421 of file DenseField.h.

422 {
423  return fastValue(i, j, k);
424 }
const Data_T & fastValue(int i, int j, int k) const
Read access to voxel. Notice that this is non-virtual.
Definition: DenseField.h:447
template<class Data_T >
long long int DenseField< Data_T >::memSize ( ) const
virtual

Returns the memory usage (in bytes)

Note
This needs to be re-implemented for any subclass that adds data members. Those classes should also call their superclass and add the combined memory use.

Reimplemented from FieldRes.

Definition at line 429 of file DenseField.h.

430 {
431  long long int superClassMemSize = base::memSize();
432  long long int vectorMemSize = m_data.capacity() * sizeof(Data_T);
433  return sizeof(*this) + vectorMemSize + superClassMemSize;
434 }
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
virtual long long int memSize() const
Returns the memory usage (in bytes)
Definition: Field.h:281
template<class Data_T>
static DEFINE_FIELD_RTTI_CONCRETE_CLASS const char* DenseField< Data_T >::staticClassName ( )
inlinestatic

Definition at line 125 of file DenseField.h.

Referenced by DenseField< Data_T >::className().

126  {
127  return "DenseField";
128  }
template<class Data_T>
static const char* DenseField< Data_T >::classType ( )
inlinestatic

Definition at line 130 of file DenseField.h.

References FieldBase::name.

131  {
133  }
This subclass of Field stores data in a contiguous std::vector.
Definition: DenseField.h:82
std::string name
Optional name of the field.
Definition: Field.h:173
template<class Data_T >
Data_T & DenseField< Data_T >::lvalue ( int  i,
int  j,
int  k 
)
virtual

Write access to a voxel. The coordinates are global coordinates.

Note
Before the internal storage is accessed, the subclass must compute the crop window coordinates by looking at Field::m_dataWindow.
This is named differently from the const value so that non-const objects still have a clear way of accessing data in a const way.
Virtual functions are known not to play nice with threading. Therefor, concrete classes can implement (by convention) fastLValue() as a non-virtual function.

Implements WritableField< Data_T >.

Definition at line 439 of file DenseField.h.

440 {
441  return fastLValue(i, j, k);
442 }
Data_T & fastLValue(int i, int j, int k)
Write access to voxel. Notice that this is non-virtual.
Definition: DenseField.h:466
template<class Data_T >
const Data_T & DenseField< Data_T >::fastValue ( int  i,
int  j,
int  k 
) const

Read access to voxel. Notice that this is non-virtual.

Definition at line 447 of file DenseField.h.

448 {
449  assert (i >= base::m_dataWindow.min.x);
450  assert (i <= base::m_dataWindow.max.x);
451  assert (j >= base::m_dataWindow.min.y);
452  assert (j <= base::m_dataWindow.max.y);
453  assert (k >= base::m_dataWindow.min.z);
454  assert (k <= base::m_dataWindow.max.z);
455  // Add crop window offset
456  i -= base::m_dataWindow.min.x;
457  j -= base::m_dataWindow.min.y;
458  k -= base::m_dataWindow.min.z;
459  // Access data
460  return m_data[i + j * m_memSize.x + k * m_memSizeXY];
461 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213
template<class Data_T >
Data_T & DenseField< Data_T >::fastLValue ( int  i,
int  j,
int  k 
)

Write access to voxel. Notice that this is non-virtual.

Definition at line 466 of file DenseField.h.

467 {
468  assert (i >= base::m_dataWindow.min.x);
469  assert (i <= base::m_dataWindow.max.x);
470  assert (j >= base::m_dataWindow.min.y);
471  assert (j <= base::m_dataWindow.max.y);
472  assert (k >= base::m_dataWindow.min.z);
473  assert (k <= base::m_dataWindow.max.z);
474  // Add crop window offset
475  i -= base::m_dataWindow.min.x;
476  j -= base::m_dataWindow.min.y;
477  k -= base::m_dataWindow.min.z;
478  // Access data
479  return m_data[i + j * m_memSize.x + k * m_memSizeXY];
480 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213
template<class Data_T >
DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin ( ) const

Const iterator to first element. "cbegin" matches the tr1 c++ standard.

Definition at line 486 of file DenseField.h.

References FieldRes::dataResolution().

487 {
488  if (FieldRes::dataResolution() == V3i(0))
489  return cend();
490  return const_iterator(*this, base::m_dataWindow, base::m_dataWindow.min);
491 }
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
Imath::V3i V3i
Definition: SpiMathLib.h:71
V3i const dataResolution() const
Definition: Field.h:258
const_iterator cend() const
Const iterator pointing one element past the last valid one.
Definition: DenseField.h:508
template<class Data_T >
DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin ( const Box3i subset) const

Const iterator to first element of specific subset.

Definition at line 497 of file DenseField.h.

498 {
499  if (subset.isEmpty())
500  return cend(subset);
501  return const_iterator(*this, subset, subset.min);
502 }
const_iterator cend() const
Const iterator pointing one element past the last valid one.
Definition: DenseField.h:508
template<class Data_T >
DenseField< Data_T >::const_iterator DenseField< Data_T >::cend ( ) const

Const iterator pointing one element past the last valid one.

Definition at line 508 of file DenseField.h.

509 {
510  return const_iterator(*this, base::m_dataWindow,
511  V3i(base::m_dataWindow.min.x,
512  base::m_dataWindow.min.y,
513  base::m_dataWindow.max.z + 1));
514 }
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
Imath::V3i V3i
Definition: SpiMathLib.h:71
template<class Data_T >
DenseField< Data_T >::const_iterator DenseField< Data_T >::cend ( const Box3i subset) const

Const iterator pointing one element past the last valid one (for a subset)

Definition at line 520 of file DenseField.h.

521 {
522  return const_iterator(*this, subset,
523  V3i(subset.min.x, subset.min.y, subset.max.z + 1));
524 }
Imath::V3i V3i
Definition: SpiMathLib.h:71
template<class Data_T >
DenseField< Data_T >::iterator DenseField< Data_T >::begin ( )

Iterator to first element.

Definition at line 530 of file DenseField.h.

References FieldRes::dataResolution().

Referenced by DenseFieldIO::readData(), and DenseFieldIO::writeData().

531 {
532  if (FieldRes::dataResolution() == V3i(0))
533  return end();
534  return iterator(*this, base::m_dataWindow, base::m_dataWindow.min); }
iterator end()
Iterator pointing one element past the last valid one.
Definition: DenseField.h:551
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
Imath::V3i V3i
Definition: SpiMathLib.h:71
V3i const dataResolution() const
Definition: Field.h:258
template<class Data_T >
DenseField< Data_T >::iterator DenseField< Data_T >::begin ( const Box3i subset)

Iterator to first element of specific subset.

Definition at line 540 of file DenseField.h.

541 {
542  if (subset.isEmpty())
543  return end(subset);
544  return iterator(*this, subset, subset.min);
545 }
iterator end()
Iterator pointing one element past the last valid one.
Definition: DenseField.h:551
template<class Data_T >
DenseField< Data_T >::iterator DenseField< Data_T >::end ( )

Iterator pointing one element past the last valid one.

Definition at line 551 of file DenseField.h.

552 {
553  return iterator(*this, base::m_dataWindow,
554  V3i(base::m_dataWindow.min.x,
555  base::m_dataWindow.min.y,
556  base::m_dataWindow.max.z + 1));
557 }
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
Imath::V3i V3i
Definition: SpiMathLib.h:71
template<class Data_T >
DenseField< Data_T >::iterator DenseField< Data_T >::end ( const Box3i subset)

Iterator pointing one element past the last valid one (for a subset)

Definition at line 563 of file DenseField.h.

564 {
565  return iterator(*this, subset,
566  V3i(subset.min.x, subset.min.y, subset.max.z + 1));
567 }
Imath::V3i V3i
Definition: SpiMathLib.h:71
template<class Data_T>
const FIELD3D_VEC3_T<size_t>& DenseField< Data_T >::internalMemSize ( ) const
inline

Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels.

Definition at line 186 of file DenseField.h.

References DenseField< Data_T >::m_memSize.

Referenced by DenseFieldIO::writeInternal().

187  { return m_memSize; }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
template<class Data_T>
virtual std::string DenseField< Data_T >::className ( ) const
inlinevirtual

Returns the class name of the object. Used by the class pool and when writing the data to disk.

Note
This is different from classType for any templated class, as classType() will include the template parameter(s) but className remains just the name of the template itself.

Implements FieldBase.

Definition at line 194 of file DenseField.h.

References DenseField< Data_T >::staticClassName().

195  { return staticClassName(); }
static DEFINE_FIELD_RTTI_CONCRETE_CLASS const char * staticClassName()
Definition: DenseField.h:125
template<class Data_T>
virtual FieldBase::Ptr DenseField< Data_T >::clone ( ) const
inlinevirtual

Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.

Implements FieldBase.

Definition at line 197 of file DenseField.h.

References DenseField< Data_T >::DenseField().

198  { return Ptr(new DenseField(*this)); }
DenseField()
Constructs an empty buffer.
Definition: DenseField.h:403
boost::intrusive_ptr< DenseField > Ptr
Definition: DenseField.h:89
template<class Data_T >
void DenseField< Data_T >::sizeChanged ( )
protectedvirtual

Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.

Note
Make sure to call the base class version in subclasses!

Reimplemented from ResizableField< Data_T >.

Definition at line 572 of file DenseField.h.

573 {
574  // Call base class
576 
577  // Calculate offsets
580 
581  // Check that mem size is >= 0 in all dimensions
582  if (base::m_dataWindow.max.x < base::m_dataWindow.min.x ||
583  base::m_dataWindow.max.y < base::m_dataWindow.min.y ||
585  throw Exc::ResizeException("Attempt to resize ResizableField object "
586  "using negative size. Data window was: " +
587  boost::lexical_cast<std::string>(
588  base::m_dataWindow.min) + " - " +
589  boost::lexical_cast<std::string>(
590  base::m_dataWindow.max));
591 
592  // Allocate memory
593  try {
594  std::vector<Data_T>().swap(m_data);
595  m_data.resize(m_memSize.x * m_memSize.y * m_memSize.z);
596  }
597  catch (std::bad_alloc &e) {
598  throw Exc::MemoryException("Couldn't allocate DenseField of size " +
599  boost::lexical_cast<std::string>(m_memSize));
600  }
601 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
virtual void sizeChanged()
Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.
Definition: Field.h:866
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213
Imath::V3i V3i
Definition: SpiMathLib.h:71
template<class Data_T >
Data_T * DenseField< Data_T >::ptr ( int  i,
int  j,
int  k 
)
inlineprivate

Returns a pointer to a given element. Used by the iterators mainly.

Definition at line 606 of file DenseField.h.

607 {
608  // Add crop window offset
609  i -= base::m_dataWindow.min.x;
610  j -= base::m_dataWindow.min.y;
611  k -= base::m_dataWindow.min.z;
612  // Access data
613  return &m_data[i + j * m_memSize.x + k * m_memSizeXY];
614 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213
template<class Data_T >
const Data_T * DenseField< Data_T >::ptr ( int  i,
int  j,
int  k 
) const
inlineprivate

Returns a pointer to a given element. Used by the iterators mainly.

Definition at line 619 of file DenseField.h.

620 {
621  // Add crop window offset
622  i -= base::m_dataWindow.min.x;
623  j -= base::m_dataWindow.min.y;
624  k -= base::m_dataWindow.min.z;
625  // Access data
626  return &m_data[i + j * m_memSize.x + k * m_memSizeXY];
627 }
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition: DenseField.h:211
std::vector< Data_T > m_data
Field storage.
Definition: DenseField.h:215
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Definition: Field.h:299
size_t m_memSizeXY
X scanline * Y scanline size.
Definition: DenseField.h:213

Member Data Documentation

template<class Data_T>
FIELD3D_VEC3_T<size_t> DenseField< Data_T >::m_memSize
protected

Memory allocation size in each dimension.

Definition at line 211 of file DenseField.h.

Referenced by DenseField< Data_T >::internalMemSize().

template<class Data_T>
size_t DenseField< Data_T >::m_memSizeXY
protected

X scanline * Y scanline size.

Definition at line 213 of file DenseField.h.

template<class Data_T>
std::vector<Data_T> DenseField< Data_T >::m_data
protected

Field storage.

Definition at line 215 of file DenseField.h.

template<class Data_T>
TemplatedFieldType<DenseField<Data_T> > DenseField< Data_T >::ms_classType
staticprivate

Definition at line 221 of file DenseField.h.


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