|
Field3D
|
This subclass of Field stores data in a contiguous std::vector. More...
#include <DenseField.h>
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 Member Functions | |
| virtual void | clear (const Data_T &value) |
| Clears all the voxels in the storage. | |
| 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. | |
From Field | |
| virtual Data_T | value (int i, int j, int k) const |
| virtual long long int | memSize () const |
From WritableField | |
| virtual Data_T & | lvalue (int i, int j, int k) |
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) | |
From FieldBase | |
| virtual std::string | className () const |
| virtual FieldBase::Ptr | clone () const |
Static Public Member Functions | |
| static const char * | classType () |
| static DEFINE_FIELD_RTTI_CONCRETE_CLASS const char * | staticClassName () |
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. | |
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 |
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 66 of file DenseField.h.
| typedef boost::intrusive_ptr<DenseField> DenseField::Ptr |
Reimplemented from ResizableField< Data_T >.
Definition at line 89 of file DenseField.h.
| typedef std::vector<Ptr> DenseField::Vec |
Definition at line 90 of file DenseField.h.
| typedef LinearGenericFieldInterp<DenseField<Data_T> > DenseField::LinearInterp |
Definition at line 92 of file DenseField.h.
| typedef CubicGenericFieldInterp<DenseField<Data_T> > DenseField::CubicInterp |
Definition at line 93 of file DenseField.h.
| typedef ResizableField<Data_T> DenseField::base |
Reimplemented from ResizableField< Data_T >.
Definition at line 95 of file DenseField.h.
| typedef DenseField<Data_T> DenseField::class_type |
Reimplemented from ResizableField< Data_T >.
Definition at line 122 of file DenseField.h.
| DenseField::DenseField | ( | ) |
Constructs an empty buffer.
Definition at line 403 of file DenseField.h.
Referenced by clone().
: base(), m_memSize(0), m_memSizeXY(0) { // Empty }
| void DenseField::clear | ( | const Data_T & | value | ) | [virtual] |
Clears all the voxels in the storage.
Definition at line 413 of file DenseField.h.
| Data_T DenseField::value | ( | int | i, |
| int | j, | ||
| int | k | ||
| ) | const [virtual] |
Definition at line 421 of file DenseField.h.
{
return fastValue(i, j, k);
}
| long long int DenseField::memSize | ( | ) | const [virtual] |
Definition at line 429 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;
}
| static DEFINE_FIELD_RTTI_CONCRETE_CLASS const char* DenseField::staticClassName | ( | ) | [inline, static] |
Reimplemented from ResizableField< Data_T >.
Definition at line 125 of file DenseField.h.
Referenced by className().
{
return "DenseField";
}
| static const char* DenseField::classType | ( | ) | [inline, static] |
Reimplemented from ResizableField< Data_T >.
Definition at line 130 of file DenseField.h.
{
return DenseField<Data_T>::ms_classType.name();
}
| Data_T & DenseField::lvalue | ( | int | i, |
| int | j, | ||
| int | k | ||
| ) | [virtual] |
Definition at line 439 of file DenseField.h.
{
return fastLValue(i, j, k);
}
| const Data_T & DenseField::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.
{
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];
}
| Data_T & DenseField::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.
{
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];
}
| DenseField< Data_T >::const_iterator DenseField::cbegin | ( | ) | const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard.
Definition at line 486 of file DenseField.h.
References FieldRes::dataResolution().
{
if (FieldRes::dataResolution() == V3i(0))
return cend();
return const_iterator(*this, base::m_dataWindow, base::m_dataWindow.min);
}
| DenseField< Data_T >::const_iterator DenseField::cbegin | ( | const Box3i & | subset | ) | const |
Const iterator to first element of specific subset.
Definition at line 497 of file DenseField.h.
{
if (subset.isEmpty())
return cend(subset);
return const_iterator(*this, subset, subset.min);
}
| DenseField< Data_T >::const_iterator DenseField::cend | ( | ) | const |
Const iterator pointing one element past the last valid one.
Definition at line 508 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));
}
| DenseField< Data_T >::const_iterator DenseField::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.
{
return const_iterator(*this, subset,
V3i(subset.min.x, subset.min.y, subset.max.z + 1));
}
| DenseField< Data_T >::iterator DenseField::begin | ( | ) |
Iterator to first element.
Definition at line 530 of file DenseField.h.
References FieldRes::dataResolution().
Referenced by DenseFieldIO::writeData(), and DenseFieldIO::readData().
{
if (FieldRes::dataResolution() == V3i(0))
return end();
return iterator(*this, base::m_dataWindow, base::m_dataWindow.min); }
| DenseField< Data_T >::iterator DenseField::begin | ( | const Box3i & | subset | ) |
Iterator to first element of specific subset.
Definition at line 540 of file DenseField.h.
{
if (subset.isEmpty())
return end(subset);
return iterator(*this, subset, subset.min);
}
| DenseField< Data_T >::iterator DenseField::end | ( | ) |
Iterator pointing one element past the last valid one.
Definition at line 551 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));
}
| DenseField< Data_T >::iterator DenseField::end | ( | const Box3i & | subset | ) |
Iterator pointing one element past the last valid one (for a subset)
Definition at line 563 of file DenseField.h.
{
return iterator(*this, subset,
V3i(subset.min.x, subset.min.y, subset.max.z + 1));
}
| const FIELD3D_VEC3_T<size_t>& DenseField::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 m_memSize.
Referenced by DenseFieldIO::writeInternal().
{ return m_memSize; }
| virtual std::string DenseField::className | ( | ) | const [inline, virtual] |
Definition at line 194 of file DenseField.h.
References staticClassName().
{ return staticClassName(); }
| virtual FieldBase::Ptr DenseField::clone | ( | ) | const [inline, virtual] |
Definition at line 197 of file DenseField.h.
References DenseField().
{ return Ptr(new DenseField(*this)); }
| void DenseField::sizeChanged | ( | ) | [protected, virtual] |
Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.
Reimplemented from ResizableField< Data_T >.
Definition at line 572 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 &e) {
throw Exc::MemoryException("Couldn't allocate DenseField of size " +
boost::lexical_cast<std::string>(m_memSize));
}
}
| Data_T * DenseField::ptr | ( | int | i, |
| int | j, | ||
| int | k | ||
| ) | [inline, private] |
Returns a pointer to a given element. Used by the iterators mainly.
Definition at line 606 of file DenseField.h.
| const Data_T * DenseField::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 619 of file DenseField.h.
FIELD3D_VEC3_T<size_t> DenseField::m_memSize [protected] |
Memory allocation size in each dimension.
Definition at line 211 of file DenseField.h.
Referenced by internalMemSize().
size_t DenseField::m_memSizeXY [protected] |
X scanline * Y scanline size.
Definition at line 213 of file DenseField.h.
std::vector<Data_T> DenseField::m_data [protected] |
Field storage.
Definition at line 215 of file DenseField.h.
TemplatedFieldType<DenseField<Data_T> > DenseField::ms_classType [static, private] |
Reimplemented from ResizableField< Data_T >.
Definition at line 221 of file DenseField.h.