Field3D
DenseField< Data_T >::const_iterator Class Reference

#include <DenseField.h>

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

Public Types

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

Public Member Functions

 const_iterator (const class_type &field, const Box3i &window, const V3i &currentPos)
 
Data_T & fastLValue (int i, int j, int k)
 Write access to voxel. Notice that this is non-virtual.
 
const Data_T & fastValue (int i, int j, int k) const
 Read access to voxel. Notice that this is non-virtual.
 
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.
 
template<class Iter_T>
bool operator!= (const Iter_T &rhs) const
 
const Data_T & operator* () const
 
const const_iteratoroperator++ ()
 
const Data_T * operator-> () const
 
template<class Iter_T>
bool operator== (const Iter_T &rhs) const
 
Constructors & destructor
 DenseField ()
 Constructs an empty buffer.
 
virtual void clear (const Data_T &value)
 Clears all the voxels in the storage.
 
size_t numGrains () const
 Number of 'grains' to use with threaded access.
 
bool getGrainBounds (const size_t idx, Box3i &vsBounds) const
 Bounding box of the given 'grain'.
 
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 .
 
virtual long long int memSize () const
 Returns the memory usage (in bytes)
 
From WritableField
virtual Data_T & lvalue (int i, int j, int k)
 Write access to a voxel. The coordinates are global coordinates.
 
Iterators
const_iterator cbegin () const
 Const iterator to first element. "cbegin" matches the tr1 c++ standard.
 
const_iterator cbegin (const Box3i &subset) const
 Const iterator to first element of specific subset.
 
const_iterator cend () const
 Const iterator pointing one element past the last valid one.
 
const_iterator cend (const Box3i &subset) const
 Const iterator pointing one element past the last valid one (for a subset)
 
iterator begin ()
 Iterator to first element.
 
iterator begin (const Box3i &subset)
 Iterator to first element of specific subset.
 
iterator end ()
 Iterator pointing one element past the last valid one.
 
iterator end (const Box3i &subset)
 Iterator pointing one element past the last valid one (for a subset)
 
- Public Member Functions inherited from ResizableField< Data_T >
void copyFrom (typename Field< Data_T >::Ptr other)
 Copies the data from another Field, also resizes.
 
template<class Data_T2>
void copyFrom (typename Field< Data_T2 >::Ptr other)
 Copies the data from another Field of another template class, also resizes.
 
void matchDefinition (FieldRes::Ptr fieldToMatch)
 Sets up this field so that resolution and mapping matches the other.
 
void setSize (const Box3i &extents)
 Resizes the object.
 
void setSize (const Box3i &extents, const Box3i &dataWindow)
 Resizes the object.
 
void setSize (const V3i &size)
 Resizes the object.
 
void setSize (const V3i &size, int padding)
 Resizes the object with padding.
 
- Public Member Functions inherited from WritableField< Data_T >
iterator begin ()
 Iterator to first element.
 
iterator begin (const Box3i &subset)
 Iterator to first element of specific subset.
 
iterator end ()
 Iterator pointing one element past the last valid one.
 
iterator end (const Box3i &subset)
 Iterator pointing one element past the last valid one (for a subset)
 
- Public Member Functions inherited from Field< Data_T >
const_iterator cbegin () const
 Const iterator to first element. "cbegin" matches the tr1 c++ standard.
 
const_iterator cbegin (const Box3i &subset) const
 Const iterator to first element of specific subset.
 
const_iterator cend () const
 Const iterator pointing one element past the last valid one.
 
const_iterator cend (const Box3i &subset) const
 Const iterator pointing one element past the last valid one (for a subset)
 
virtual std::string dataTypeString () const
 
virtual ~Field ()
 Dtor.
 
- 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.
 
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.
 
 FieldRes ()
 This constructor ensures that we have a valid mapping at all times.
 
 FieldRes (const FieldRes &src)
 Base class copy constructor.
 
bool isInBounds (int i, int j, int k) const
 Returns true is the indicies are in bounds of the data window.
 
FieldMapping::Ptr mapping ()
 Returns a pointer to the mapping.
 
const FieldMapping::Ptr mapping () const
 Returns a pointer to the mapping.
 
virtual void mappingChanged ()
 Tells the subclass that the mapping changed.
 
void setMapping (FieldMapping::Ptr mapping)
 Sets the field's mapping.
 
virtual size_t voxelCount () const
 Counts the number of voxels. For most fields, this is just the volume of the data window, but sparse data structures can override this to return a better value.
 
- Public Member Functions inherited from FieldBase
 FieldBase ()
 Constructor.
 
 FieldBase (const FieldBase &)
 Copy Constructor.
 
virtual ~FieldBase ()
 Destructor.
 
virtual std::string className () const =0
 Returns the class name of the object. Used by the class pool and when writing the data to disk.
 
virtual std::string classType () const =0
 Returns the full class type string.
 
FieldMetadatametadata ()
 accessor to the m_metadata class
 
const FieldMetadatametadata () const
 Read only access to the m_metadata class.
 
void copyMetadata (const FieldBase &field)
 Copies the metadata from a second field.
 
- Public Member Functions inherited from RefBase
void ref () const
 Used by boost::intrusive_pointer.
 
size_t refcnt ()
 Used by boost::intrusive_pointer.
 
void unref () const
 Used by boost::intrusive_pointer.
 
WeakPtr weakPtr () const
 
 RefBase ()
 
 RefBase (const RefBase &)
 Copy constructor.
 
RefBaseoperator= (const RefBase &)
 Assignment operator.
 
virtual ~RefBase ()
 Destructor.
 
virtual bool checkRTTI (const char *typenameStr)=0
 This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();.
 
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.
 
- Public Member Functions inherited from MetadataCallback
virtual void metadataHasChanged (const std::string &)
 Alerts the callback holder that the metadata has changed.
 

Static Public Member Functions

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

Public Attributes

int x
 Current position.
 
int y
 
int z
 
- 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.
 
std::string name
 Optional name of the field.
 

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.
 

Protected Attributes

std::vector< Data_T > m_data
 Field storage.
 
FIELD3D_VEC3_T< size_t > m_memSize
 Memory allocation size in each dimension.
 
size_t m_memSizeXY
 X scanline * Y scanline size.
 
- 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.
 
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.
 
FieldMapping::Ptr m_mapping
 Pointer to the field's mapping.
 

Private Member Functions

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

Private Attributes

const class_typem_field
 Reference to field being iterated over.
 
const Data_T * m_p
 Pointer to current element.
 
Box3i m_window
 Window to traverse.
 

Static Private Attributes

static TemplatedFieldType< DenseField< Data_T > > ms_classType
 

From FieldBase

 FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION
 
virtual FieldBase::Ptr clone () const
 Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.
 

Additional Inherited Members

- 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 >::const_iterator

Definition at line 257 of file DenseField.h.

Member Typedef Documentation

◆ class_type [1/2]

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

Definition at line 271 of file DenseField.h.

◆ Ptr

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

Definition at line 92 of file DenseField.h.

◆ Vec

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

Definition at line 93 of file DenseField.h.

◆ LinearInterp

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

Definition at line 95 of file DenseField.h.

◆ CubicInterp

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

Definition at line 96 of file DenseField.h.

◆ base

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

Definition at line 98 of file DenseField.h.

◆ class_type [2/2]

typedef DenseField<Data_T> DenseField< Data_T >::class_type

Definition at line 132 of file DenseField.h.

Constructor & Destructor Documentation

◆ const_iterator()

template<class Data_T>
DenseField< Data_T >::const_iterator::const_iterator ( const class_type & field,
const Box3i & window,
const V3i & currentPos )
inline

Definition at line 275 of file DenseField.h.

277 : x(currentPos.x), y(currentPos.y), z(currentPos.z),
279 {
280 if (window.intersects(currentPos))
281 m_p = m_field.ptr(x, y, z);
282 else
283 m_p = 0;
284 }
int x
Current position.
Definition DenseField.h:332
const Data_T * m_p
Pointer to current element.
Definition DenseField.h:339
const class_type & m_field
Reference to field being iterated over.
Definition DenseField.h:343
Box3i m_window
Window to traverse.
Definition DenseField.h:341
This subclass of Field stores data in a contiguous std::vector.
Definition DenseField.h:87

References m_field, m_p, m_window, x, y, and z.

Referenced by operator++().

Member Function Documentation

◆ operator++()

template<class Data_T>
const const_iterator & DenseField< Data_T >::const_iterator::operator++ ( )
inline

Definition at line 288 of file DenseField.h.

289 {
290 if (x == m_window.max.x) {
291 if (y == m_window.max.y) {
292 if (z == m_window.max.z) {
293 m_p = 0;
294 } else {
295 m_p = m_field.ptr(x = m_window.min.x, y = m_window.min.y, ++z);
296 }
297 } else {
298 m_p = m_field.ptr(x = m_window.min.x, ++y, z);
299 }
300 } else {
301 ++x;
302 ++m_p;
303 }
304 return *this;
305 }

References const_iterator(), m_field, m_p, m_window, x, y, and z.

◆ operator==()

template<class Data_T>
template<class Iter_T>
bool DenseField< Data_T >::const_iterator::operator== ( const Iter_T & rhs) const
inline

Definition at line 308 of file DenseField.h.

309 {
310 return m_p == &(*rhs);
311 }

References m_p.

◆ operator!=()

template<class Data_T>
template<class Iter_T>
bool DenseField< Data_T >::const_iterator::operator!= ( const Iter_T & rhs) const
inline

Definition at line 314 of file DenseField.h.

315 {
316 return m_p != &(*rhs);
317 }

References m_p.

◆ operator*()

template<class Data_T>
const Data_T & DenseField< Data_T >::const_iterator::operator* ( ) const
inline

Definition at line 319 of file DenseField.h.

320 {
321 return *m_p;
322 }

References m_p.

◆ operator->()

template<class Data_T>
const Data_T * DenseField< Data_T >::const_iterator::operator-> ( ) const
inline

Definition at line 324 of file DenseField.h.

325 {
326 return m_p;
327 }

References m_p.

◆ DenseField()

DenseField< Data_T >::DenseField ( )

Constructs an empty buffer.

Definition at line 106 of file DenseField.h.

447 : base(),
449{
450 // Empty
451}
FIELD3D_VEC3_T< size_t > m_memSize
Definition DenseField.h:220
ResizableField< Data_T > base
Definition DenseField.h:98

◆ clear()

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 113 of file DenseField.h.

457{
458 std::fill(m_data.begin(), m_data.end(), value);
459}
std::vector< Data_T > m_data
Definition DenseField.h:224
virtual Data_T value(int i, int j, int k) const
Definition DenseField.h:493

◆ numGrains()

size_t DenseField< Data_T >::numGrains ( ) const

Number of 'grains' to use with threaded access.

Definition at line 118 of file DenseField.h.

465{
466 // Grain resolution
467 const V3i res = base::m_dataWindow.size() + V3i(1);
468 // Num grains is Y * Z
469 return res.y * res.z;
470}
Imath::V3i V3i
Definition SpiMathLib.h:71
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e....
Definition Field.h:310

◆ getGrainBounds()

bool DenseField< Data_T >::getGrainBounds ( const size_t idx,
Box3i & vsBounds ) const

Bounding box of the given 'grain'.

Definition at line 120 of file DenseField.h.

476{
477 // Grain resolution
478 const V3i res = base::m_dataWindow.size() + V3i(1);
479 // Compute coordinate
480 const int y = idx % res.y;
481 const int z = idx / res.y;
482 // Build bbox
483 const V3i start = base::m_dataWindow.min + V3i(0, y, z);
484 const V3i end = base::m_dataWindow.min + V3i(res.x, y, z);
486 // Done
487 return true;
488}
Imath::Box3i Box3i
Definition SpiMathLib.h:77

◆ value()

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 126 of file DenseField.h.

494{
495 return fastValue(i, j, k);
496}
const Data_T & fastValue(int i, int j, int k) const
Definition DenseField.h:519

◆ memSize()

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 127 of file DenseField.h.

502{
503 long long int superClassMemSize = base::memSize();
504 long long int vectorMemSize = m_data.capacity() * sizeof(Data_T);
505 return sizeof(*this) + vectorMemSize + superClassMemSize;
506}
virtual long long int memSize() const
Returns the memory usage (in bytes)
Definition Field.h:279

◆ staticClassName()

static DEFINE_FIELD_RTTI_CONCRETE_CLASS const char * DenseField< Data_T >::staticClassName ( )
inlinestatic

Definition at line 135 of file DenseField.h.

136 {
137 return "DenseField";
138 }

◆ staticClassType()

static const char * DenseField< Data_T >::staticClassType ( )
inlinestatic

Definition at line 140 of file DenseField.h.

141 {
143 }
std::string name
Optional name of the field.
Definition Field.h:171

◆ lvalue()

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 149 of file DenseField.h.

512{
513 return fastLValue(i, j, k);
514}
Data_T & fastLValue(int i, int j, int k)
Definition DenseField.h:538

◆ fastValue()

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 155 of file DenseField.h.

520{
527 // Add crop window offset
528 i -= base::m_dataWindow.min.x;
529 j -= base::m_dataWindow.min.y;
530 k -= base::m_dataWindow.min.z;
531 // Access data
532 return m_data[i + j * m_memSize.x + k * m_memSizeXY];
533}

◆ fastLValue()

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 157 of file DenseField.h.

539{
546 // Add crop window offset
547 i -= base::m_dataWindow.min.x;
548 j -= base::m_dataWindow.min.y;
549 k -= base::m_dataWindow.min.z;
550 // Access data
551 return m_data[i + j * m_memSize.x + k * m_memSizeXY];
552}

◆ cbegin() [1/2]

DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin ( ) const

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

Definition at line 171 of file DenseField.h.

559{
560 if (FieldRes::dataResolution() == V3i(0))
561 return cend();
563}
const_iterator(const class_type &field, const Box3i &window, const V3i &currentPos)
Definition DenseField.h:275
const_iterator cend() const
Definition DenseField.h:580

◆ cbegin() [2/2]

DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin ( const Box3i & subset) const

Const iterator to first element of specific subset.

Definition at line 173 of file DenseField.h.

570{
571 if (subset.isEmpty())
572 return cend(subset);
573 return const_iterator(*this, subset, subset.min);
574}

◆ cend() [1/2]

DenseField< Data_T >::const_iterator DenseField< Data_T >::cend ( ) const

Const iterator pointing one element past the last valid one.

Definition at line 175 of file DenseField.h.

581{
582 return const_iterator(*this, base::m_dataWindow,
584 base::m_dataWindow.min.y,
585 base::m_dataWindow.max.z + 1));
586}

◆ cend() [2/2]

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 178 of file DenseField.h.

593{
594 return const_iterator(*this, subset,
595 V3i(subset.min.x, subset.min.y, subset.max.z + 1));
596}

◆ begin() [1/2]

DenseField< Data_T >::iterator DenseField< Data_T >::begin ( )

Iterator to first element.

Definition at line 180 of file DenseField.h.

603{
604 if (FieldRes::dataResolution() == V3i(0))
605 return end();

◆ begin() [2/2]

DenseField< Data_T >::iterator DenseField< Data_T >::begin ( const Box3i & subset)

Iterator to first element of specific subset.

Definition at line 182 of file DenseField.h.

613{
614 if (subset.isEmpty())
615 return end(subset);
616 return iterator(*this, subset, subset.min);
617}

◆ end() [1/2]

DenseField< Data_T >::iterator DenseField< Data_T >::end ( )

Iterator pointing one element past the last valid one.

Definition at line 184 of file DenseField.h.

624{
625 return iterator(*this, base::m_dataWindow,
627 base::m_dataWindow.min.y,
628 base::m_dataWindow.max.z + 1));
629}

◆ end() [2/2]

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 187 of file DenseField.h.

636{
637 return iterator(*this, subset,
638 V3i(subset.min.x, subset.min.y, subset.max.z + 1));
639}

◆ internalMemSize()

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 196 of file DenseField.h.

197 { return m_memSize; }

◆ clone()

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 206 of file DenseField.h.

207 { return Ptr(new DenseField(*this)); }
boost::intrusive_ptr< DenseField > Ptr
Definition DenseField.h:92

◆ sizeChanged()

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 215 of file DenseField.h.

645{
646 // Call base class
648
649 // Calculate offsets
652
653 // Check that mem size is >= 0 in all dimensions
657 throw Exc::ResizeException("Attempt to resize ResizableField object "
658 "using negative size. Data window was: " +
660 base::m_dataWindow.min) + " - " +
663
664 // Allocate memory
665 try {
667 m_data.resize(m_memSize.x * m_memSize.y * m_memSize.z);
668 }
669 catch (std::bad_alloc &) {
670 throw Exc::MemoryException("Couldn't allocate DenseField of size " +
672 }
673}
virtual void sizeChanged()
Subclasses should re-implement this if they need to perform memory allocations, etc....
Definition Field.h:901

◆ ptr() [1/2]

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 235 of file DenseField.h.

679{
680 // Add crop window offset
681 i -= base::m_dataWindow.min.x;
682 j -= base::m_dataWindow.min.y;
683 k -= base::m_dataWindow.min.z;
684 // Access data
685 return &m_data[i + j * m_memSize.x + k * m_memSizeXY];
686}

◆ ptr() [2/2]

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 237 of file DenseField.h.

692{
693 // Add crop window offset
694 i -= base::m_dataWindow.min.x;
695 j -= base::m_dataWindow.min.y;
696 k -= base::m_dataWindow.min.z;
697 // Access data
698 return &m_data[i + j * m_memSize.x + k * m_memSizeXY];
699}

Member Data Documentation

◆ x

template<class Data_T>
int DenseField< Data_T >::const_iterator::x

Current position.

Definition at line 332 of file DenseField.h.

Referenced by const_iterator(), and operator++().

◆ y

template<class Data_T>
int DenseField< Data_T >::const_iterator::y

Definition at line 332 of file DenseField.h.

Referenced by const_iterator(), and operator++().

◆ z

template<class Data_T>
int DenseField< Data_T >::const_iterator::z

Definition at line 332 of file DenseField.h.

Referenced by const_iterator(), and operator++().

◆ m_p

template<class Data_T>
const Data_T* DenseField< Data_T >::const_iterator::m_p
private

Pointer to current element.

Definition at line 339 of file DenseField.h.

Referenced by const_iterator(), operator!=(), operator*(), operator++(), operator->(), and operator==().

◆ m_window

template<class Data_T>
Box3i DenseField< Data_T >::const_iterator::m_window
private

Window to traverse.

Definition at line 341 of file DenseField.h.

Referenced by const_iterator(), and operator++().

◆ m_field

template<class Data_T>
const class_type& DenseField< Data_T >::const_iterator::m_field
private

Reference to field being iterated over.

Definition at line 343 of file DenseField.h.

Referenced by const_iterator(), and operator++().

◆ FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

DenseField< Data_T >::FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

Definition at line 204 of file DenseField.h.

◆ m_memSize

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

Memory allocation size in each dimension.

Definition at line 220 of file DenseField.h.

◆ m_memSizeXY

size_t DenseField< Data_T >::m_memSizeXY
protected

X scanline * Y scanline size.

Definition at line 222 of file DenseField.h.

◆ m_data

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

Field storage.

Definition at line 224 of file DenseField.h.

◆ ms_classType

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

Definition at line 230 of file DenseField.h.


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