DenseField< Data_T > Class Template Reference
Fields

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

`#include <DenseField.h>`

Inheritance diagram for DenseField< Data_T >:

## 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< Ptr > | Vec
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.
typedef std::vector< Ptr > | Vec
| 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< FieldRes > | Ptr
typedef std::vector< Ptr > | Vec
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
typedef boost::weak_ptr< RefBase > | WeakPtr

## Public Member Functions

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.
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 Box3i & | dataWindow () const
| Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field subclass.
const Box3i & | extents () 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.
FieldMetadata & | metadata ()
| accessor to the m_metadata class
const FieldMetadata & | metadata () 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.
RefBase & | operator= (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 ()

## 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.

## 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

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 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.

Regarding threading granularity - DenseField considers each scanline (i.e. continuous X coords) to be one grain. Thus, numGrains is res.y * res.z.

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

Definition at line 85 of file DenseField.h.

## Member Typedef Documentation

## Ptr

template<class Data_T>

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

Definition at line 92 of file DenseField.h.

## Vec

template<class Data_T>

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

Definition at line 93 of file DenseField.h.

## LinearInterp

template<class Data_T>

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

Definition at line 95 of file DenseField.h.

## CubicInterp

template<class Data_T>

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

Definition at line 96 of file DenseField.h.

## base

template<class Data_T>

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

Definition at line 98 of file DenseField.h.

## class_type

template<class Data_T>

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

Definition at line 132 of file DenseField.h.

## Constructor & Destructor Documentation

## DenseField()

template<class Data_T>

DenseField< Data_T >::DenseField | ( |  | ) |

Constructs an empty buffer.

Definition at line 446 of file DenseField.h.

: base(),
m_memSize(0), m_memSizeXY(0)
{
// Empty
}
DenseField::m_memSizeXY
size_t m_memSizeXY
X scanline * Y scanline size.
Definition DenseField.h:222
DenseField::m_memSize
FIELD3D_VEC3_T< size_t > m_memSize
Memory allocation size in each dimension.
Definition DenseField.h:220
DenseField::base
ResizableField< Data_T > base
Definition DenseField.h:98

References m_memSize, and m_memSizeXY.

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

## Member Function Documentation

## clear()

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

{
std::fill(m_data.begin(), m_data.end(), value);
}
DenseField
This subclass of Field stores data in a contiguous std::vector.
Definition DenseField.h:87
DenseField::m_data
std::vector< Data_T > m_data
Field storage.
Definition DenseField.h:224
DenseField::value
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:493

References m_data, and value().

## numGrains()

template<class Data_T>

size_t DenseField< Data_T >::numGrains | ( |  | ) | const

Number of 'grains' to use with threaded access.

Definition at line 464 of file DenseField.h.

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

References FieldRes::m_dataWindow.

## getGrainBounds()

template<class Data_T>

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

Bounding box of the given 'grain'.

Definition at line 475 of file DenseField.h.

{
// Grain resolution
const V3i res = base::m_dataWindow.size() + V3i(1);
// Compute coordinate
const int y = idx % res.y;
const int z = idx / res.y;
// Build bbox
const V3i start = base::m_dataWindow.min + V3i(0, y, z);
const V3i end = base::m_dataWindow.min + V3i(res.x, y, z);
bounds = Field3D::clipBounds(Box3i(start, end), base::m_dataWindow);
// Done
return true;
}
Box3i
Imath::Box3i Box3i
Definition SpiMathLib.h:77
DenseField::end
iterator end()
Iterator pointing one element past the last valid one.
Definition DenseField.h:623

References end(), and FieldRes::m_dataWindow.

## value()

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

{
return fastValue(i, j, k);
}
DenseField::fastValue
const Data_T & fastValue(int i, int j, int k) const
Read access to voxel. Notice that this is non-virtual.
Definition DenseField.h:519

References fastValue().

Referenced by clear().

## memSize()

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

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

References m_data, and FieldRes::memSize().

## staticClassName()

template<class Data_T>

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

inline static

Definition at line 135 of file DenseField.h.

{
return "DenseField";
}

## staticClassType()

template<class Data_T>

const char * DenseField< Data_T >::staticClassType | ( |  | ) |

inline static

Definition at line 140 of file DenseField.h.

{
return DenseField<Data_T>::ms_classType.name();
}
FieldBase::name
std::string name
Optional name of the field.
Definition Field.h:171

## lvalue()

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

{
return fastLValue(i, j, k);
}
DenseField::fastLValue
Data_T & fastLValue(int i, int j, int k)
Write access to voxel. Notice that this is non-virtual.
Definition DenseField.h:538

References fastLValue().

## fastValue()

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

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
// Access data
return m_data[i + j * m_memSize.x + k * m_memSizeXY];
}

References m_data, FieldRes::m_dataWindow, m_memSize, and m_memSizeXY.

Referenced by value().

## fastLValue()

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

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
// Access data
return m_data[i + j * m_memSize.x + k * m_memSizeXY];
}

References m_data, FieldRes::m_dataWindow, m_memSize, and m_memSizeXY.

Referenced by lvalue().

## cbegin() [1/2]

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

{
if (FieldRes::dataResolution() == V3i(0))
return cend();
return const_iterator(*this, base::m_dataWindow, base::m_dataWindow.min);
}
DenseField::const_iterator
Definition DenseField.h:258
DenseField::cend
const_iterator cend() const
Const iterator pointing one element past the last valid one.
Definition DenseField.h:580

References cend(), FieldRes::dataResolution(), and FieldRes::m_dataWindow.

## cbegin() [2/2]

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

{
if (subset.isEmpty())
return cend(subset);
return const_iterator(*this, subset, subset.min);
}

References cend().

## cend() [1/2]

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

{
return const_iterator(*this, base::m_dataWindow,
V3i(base::m_dataWindow.min.x,
base::m_dataWindow.min.y,
base::m_dataWindow.max.z + 1));
}

References FieldRes::m_dataWindow.

Referenced by cbegin(), and cbegin().

## cend() [2/2]

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

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

## begin() [1/2]

template<class Data_T>

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

Iterator to first element.

Definition at line 602 of file DenseField.h.

{
if (FieldRes::dataResolution() == V3i(0))
return end();
return iterator(*this, base::m_dataWindow, base::m_dataWindow.min); }
DenseField::iterator
Definition DenseField.h:353

References FieldRes::dataResolution(), end(), and FieldRes::m_dataWindow.

## begin() [2/2]

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

{
if (subset.isEmpty())
return end(subset);
return iterator(*this, subset, subset.min);
}

References end().

## end() [1/2]

template<class Data_T>

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

Iterator pointing one element past the last valid one.

Definition at line 623 of file DenseField.h.

{
return iterator(*this, base::m_dataWindow,
V3i(base::m_dataWindow.min.x,
base::m_dataWindow.min.y,
base::m_dataWindow.max.z + 1));
}

References FieldRes::m_dataWindow.

Referenced by begin(), begin(), and getGrainBounds().

## end() [2/2]

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

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

## internalMemSize()

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

{ return m_memSize; }

## clone()

template<class Data_T>

virtual FieldBase::Ptr DenseField< Data_T >::clone | ( |  | ) | const

inline virtual

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.

{ return Ptr(new DenseField(*this)); }
DenseField::DenseField
DenseField()
Constructs an empty buffer.
Definition DenseField.h:446
DenseField::Ptr
boost::intrusive_ptr< DenseField > Ptr
Definition DenseField.h:92

## sizeChanged()

template<class Data_T>

void DenseField< Data_T >::sizeChanged | ( |  | ) |

protected virtual

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

{
// Call base class
base::sizeChanged();
// Calculate offsets
m_memSize = base::m_dataWindow.max - base::m_dataWindow.min + V3i(1);
m_memSizeXY = m_memSize.x * m_memSize.y;
// Check that mem size is >= 0 in all dimensions
if (base::m_dataWindow.max.x < base::m_dataWindow.min.x ||
base::m_dataWindow.max.y < base::m_dataWindow.min.y ||
base::m_dataWindow.max.z < base::m_dataWindow.min.z)
throw Exc::ResizeException("Attempt to resize ResizableField object "
"using negative size. Data window was: " +
boost::lexical_cast<std::string>(
base::m_dataWindow.min) + " - " +
boost::lexical_cast<std::string>(
base::m_dataWindow.max));
// Allocate memory
try {
std::vector<Data_T>().swap(m_data);
m_data.resize(m_memSize.x * m_memSize.y * m_memSize.z);
}
catch (std::bad_alloc &) {
throw Exc::MemoryException("Couldn't allocate DenseField of size " +
boost::lexical_cast<std::string>(m_memSize));
}
}
ResizableField::sizeChanged
virtual void sizeChanged()
Subclasses should re-implement this if they need to perform memory allocations, etc....
Definition Field.h:901

References m_data, FieldRes::m_dataWindow, m_memSize, m_memSizeXY, and ResizableField< Data_T >::sizeChanged().

## ptr() [1/2]

template<class Data_T>

Data_T * DenseField< Data_T >::ptr | ( | int | i,
|  | int | j,
|  | int | k )

inline private

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

Definition at line 678 of file DenseField.h.

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

References m_data, FieldRes::m_dataWindow, m_memSize, and m_memSizeXY.

## ptr() [2/2]

template<class Data_T>

const Data_T * DenseField< Data_T >::ptr | ( | int | i,
|  | int | j,
|  | int | k ) const

inline private

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

Definition at line 691 of file DenseField.h.

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

References m_data, FieldRes::m_dataWindow, m_memSize, and m_memSizeXY.

## Member Data Documentation

## FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

template<class Data_T>

DenseField< Data_T >::FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

Definition at line 204 of file DenseField.h.

## m_memSize

template<class Data_T>

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.

Referenced by DenseField(), fastLValue(), fastValue(), ptr(), ptr(), and sizeChanged().

## m_memSizeXY

template<class Data_T>

size_t DenseField< Data_T >::m_memSizeXY

protected

X scanline * Y scanline size.

Definition at line 222 of file DenseField.h.

Referenced by DenseField(), fastLValue(), fastValue(), ptr(), ptr(), and sizeChanged().

## m_data

template<class Data_T>

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

protected

Field storage.

Definition at line 224 of file DenseField.h.

Referenced by clear(), fastLValue(), fastValue(), memSize(), ptr(), ptr(), and sizeChanged().

## ms_classType

template<class Data_T>

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

static private

Definition at line 230 of file DenseField.h.

Referenced by DenseField< half >::staticClassType().

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

- export/DenseField.h