File VolumeDataAccess.h

namespace OpenVDS

Typedefs

using VolumeData2DInterpolatingAccessorR64 = VolumeDataReadAccessor<FloatVector2, double>
using VolumeData2DInterpolatingAccessorR32 = VolumeDataReadAccessor<FloatVector2, float>
using VolumeData2DReadAccessorR64 = VolumeDataReadAccessor<IntVector2, double>
using VolumeData2DReadAccessorU64 = VolumeDataReadAccessor<IntVector2, uint64_t>
using VolumeData2DReadAccessorR32 = VolumeDataReadAccessor<IntVector2, float>
using VolumeData2DReadAccessorU32 = VolumeDataReadAccessor<IntVector2, uint32_t>
using VolumeData2DReadAccessorU16 = VolumeDataReadAccessor<IntVector2, uint16_t>
using VolumeData2DReadAccessorU8 = VolumeDataReadAccessor<IntVector2, uint8_t>
using VolumeData2DReadAccessor1Bit = VolumeDataReadAccessor<IntVector2, bool>
using VolumeData2DReadWriteAccessorR64 = VolumeDataReadWriteAccessor<IntVector2, double>
using VolumeData2DReadWriteAccessorU64 = VolumeDataReadWriteAccessor<IntVector2, uint64_t>
using VolumeData2DReadWriteAccessorR32 = VolumeDataReadWriteAccessor<IntVector2, float>
using VolumeData2DReadWriteAccessorU32 = VolumeDataReadWriteAccessor<IntVector2, uint32_t>
using VolumeData2DReadWriteAccessorU16 = VolumeDataReadWriteAccessor<IntVector2, uint16_t>
using VolumeData2DReadWriteAccessorU8 = VolumeDataReadWriteAccessor<IntVector2, uint8_t>
using VolumeData2DReadWriteAccessor1Bit = VolumeDataReadWriteAccessor<IntVector2, bool>
using VolumeData3DInterpolatingAccessorR64 = VolumeDataReadAccessor<FloatVector3, double>
using VolumeData3DInterpolatingAccessorR32 = VolumeDataReadAccessor<FloatVector3, float>
using VolumeData3DReadAccessorR64 = VolumeDataReadAccessor<IntVector3, double>
using VolumeData3DReadAccessorU64 = VolumeDataReadAccessor<IntVector3, uint64_t>
using VolumeData3DReadAccessorR32 = VolumeDataReadAccessor<IntVector3, float>
using VolumeData3DReadAccessorU32 = VolumeDataReadAccessor<IntVector3, uint32_t>
using VolumeData3DReadAccessorU16 = VolumeDataReadAccessor<IntVector3, uint16_t>
using VolumeData3DReadAccessorU8 = VolumeDataReadAccessor<IntVector3, uint8_t>
using VolumeData3DReadAccessor1Bit = VolumeDataReadAccessor<IntVector3, bool>
using VolumeData3DReadWriteAccessorR64 = VolumeDataReadWriteAccessor<IntVector3, double>
using VolumeData3DReadWriteAccessorU64 = VolumeDataReadWriteAccessor<IntVector3, uint64_t>
using VolumeData3DReadWriteAccessorR32 = VolumeDataReadWriteAccessor<IntVector3, float>
using VolumeData3DReadWriteAccessorU32 = VolumeDataReadWriteAccessor<IntVector3, uint32_t>
using VolumeData3DReadWriteAccessorU16 = VolumeDataReadWriteAccessor<IntVector3, uint16_t>
using VolumeData3DReadWriteAccessorU8 = VolumeDataReadWriteAccessor<IntVector3, uint8_t>
using VolumeData3DReadWriteAccessor1Bit = VolumeDataReadWriteAccessor<IntVector3, bool>
using VolumeData4DInterpolatingAccessorR64 = VolumeDataReadAccessor<FloatVector4, double>
using VolumeData4DInterpolatingAccessorR32 = VolumeDataReadAccessor<FloatVector4, float>
using VolumeData4DReadAccessorR64 = VolumeDataReadAccessor<IntVector4, double>
using VolumeData4DReadAccessorU64 = VolumeDataReadAccessor<IntVector4, uint64_t>
using VolumeData4DReadAccessorR32 = VolumeDataReadAccessor<IntVector4, float>
using VolumeData4DReadAccessorU32 = VolumeDataReadAccessor<IntVector4, uint32_t>
using VolumeData4DReadAccessorU16 = VolumeDataReadAccessor<IntVector4, uint16_t>
using VolumeData4DReadAccessorU8 = VolumeDataReadAccessor<IntVector4, uint8_t>
using VolumeData4DReadAccessor1Bit = VolumeDataReadAccessor<IntVector4, bool>
using VolumeData4DReadWriteAccessorR64 = VolumeDataReadWriteAccessor<IntVector4, double>
using VolumeData4DReadWriteAccessorU64 = VolumeDataReadWriteAccessor<IntVector4, uint64_t>
using VolumeData4DReadWriteAccessorR32 = VolumeDataReadWriteAccessor<IntVector4, float>
using VolumeData4DReadWriteAccessorU32 = VolumeDataReadWriteAccessor<IntVector4, uint32_t>
using VolumeData4DReadWriteAccessorU16 = VolumeDataReadWriteAccessor<IntVector4, uint16_t>
using VolumeData4DReadWriteAccessorU8 = VolumeDataReadWriteAccessor<IntVector4, uint8_t>
using VolumeData4DReadWriteAccessor1Bit = VolumeDataReadWriteAccessor<IntVector4, bool>

Enums

enum class VDSProduceStatus

Values:

enumerator Normal
enumerator Remapped
enumerator Unavailable
template<typename T>
struct IndexRegion

Public Functions

inline IndexRegion()
inline IndexRegion(T Min, T Max)

Public Members

T Min
T Max
class IVolumeDataAccessor

Subclassed by OpenVDS::IVolumeDataAccessorWithRegions< INDEX >

Public Functions

virtual Manager &GetManager() = 0
virtual VolumeDataLayout const *GetLayout() = 0

Protected Functions

inline IVolumeDataAccessor()
inline virtual ~IVolumeDataAccessor()
class Manager

Public Functions

virtual void DestroyVolumeDataAccessor(IVolumeDataAccessor *accessor) = 0
virtual IVolumeDataAccessor *CloneVolumeDataAccessor(IVolumeDataAccessor const &accessor) = 0

Protected Functions

inline Manager()
inline virtual ~Manager()
template<typename INDEX>
class IVolumeDataAccessorWithRegions : public OpenVDS::IVolumeDataAccessor, public OpenVDS::IVolumeDataRegions<INDEX>

Subclassed by OpenVDS::IVolumeDataReadAccessor< INDEX, T >

Public Functions

virtual IndexRegion<INDEX> CurrentRegion() = 0
template<typename INDEX, typename T>
class IVolumeDataReadAccessor : public OpenVDS::IVolumeDataAccessorWithRegions<INDEX>

Subclassed by OpenVDS::IVolumeDataReadWriteAccessor< INDEX, T >

Public Functions

virtual T GetValue(INDEX index) = 0
template<typename INDEX, typename T>
class IVolumeDataReadWriteAccessor : public OpenVDS::IVolumeDataReadAccessor<INDEX, T>

Public Functions

virtual void SetValue(INDEX index, T value) = 0
virtual void Commit() = 0
virtual void Cancel() = 0
template<typename INDEX>
class IVolumeDataRegions

Subclassed by OpenVDS::IVolumeDataAccessorWithRegions< INDEX >

Public Functions

virtual int64_t RegionCount() = 0
virtual IndexRegion<INDEX> Region(int64_t region) = 0
virtual int64_t RegionFromIndex(INDEX index) = 0

Protected Functions

inline virtual ~IVolumeDataRegions()
class VolumeDataPage

Public Functions

virtual VolumeDataPageAccessor &GetVolumeDataPageAccessor() const = 0
virtual void GetMinMax(int (&min)[Dimensionality_Max], int (&max)[Dimensionality_Max]) const = 0
virtual void GetMinMaxExcludingMargin(int (&minExcludingMargin)[Dimensionality_Max], int (&maxExcludingMargin)[Dimensionality_Max]) const = 0
virtual ReadErrorException GetError() const = 0
virtual const void *GetBuffer(int (&size)[Dimensionality_Max], int (&pitch)[Dimensionality_Max]) = 0
inline const void *GetBuffer(int (&pitch)[Dimensionality_Max])
virtual void *GetWritableBuffer(int (&size)[Dimensionality_Max], int (&pitch)[Dimensionality_Max]) = 0
inline void *GetWritableBuffer(int (&pitch)[Dimensionality_Max])
virtual void UpdateWrittenRegion(const int (&writtenMin)[Dimensionality_Max], const int (&writtenMax)[Dimensionality_Max]) = 0
virtual void Release() = 0

Protected Functions

inline VolumeDataPage()
inline virtual ~VolumeDataPage()
class VolumeDataPageAccessor

Public Types

enum AccessMode

Values:

enumerator AccessMode_ReadOnly

The volume data page accessor will only be used for reading.

enumerator AccessMode_ReadWrite

The volume data page accessor will be used for reading and writing (can only be used with LOD 0, the other LODs will be automatically updated)

enumerator AccessMode_Create

The volume data page accessor will be used to write new data, overwriting any existing data (can only be used with LOD 0, the other LODs will be automatically created)

enumerator AccessMode_CreateWithoutLODGeneration

The volume data page accessor will be used to write new data, overwriting any existing data (each LOD has to be created separately)

enumerator AccessMode_ReadWriteWithoutLODGeneration

The volume data page accessor will be used used for reading and writing (each LOD has to be created separately)

Public Functions

virtual VolumeDataLayout const *GetLayout() const = 0
virtual int GetLOD() const = 0
virtual int GetChannelIndex() const = 0
virtual VolumeDataChannelDescriptor GetChannelDescriptor() const = 0
virtual void GetNumSamples(int (&numSamples)[Dimensionality_Max]) const = 0
virtual int64_t GetChunkCount() const = 0
virtual void GetChunkMinMax(int64_t chunk, int (&min)[Dimensionality_Max], int (&max)[Dimensionality_Max]) const = 0
virtual void GetChunkMinMaxExcludingMargin(int64_t chunk, int (&minExcludingMargin)[Dimensionality_Max], int (&maxExcludingMargin)[Dimensionality_Max]) const = 0
virtual uint64_t GetChunkVolumeDataHash(int64_t chunkIndex) const = 0

Get the volume data hash for the given chunk index. The value returned may be tested using the methods VolumeDataHash_IsDefined, VolumeDataHash_IsNoValue, and VolumeDataHash_IsConstant defined in VolumeData.h.

Parameters:

chunkIndex – The chunk index to get the volume data hash for.

Returns:

The volume data hash for the chunk.

virtual int64_t GetChunkIndex(const int (&position)[Dimensionality_Max]) const = 0
virtual int64_t GetMappedChunkIndex(int64_t primaryChannelChunkIndex) const = 0

Get the chunk index for this VolumeDataPageAccessor corresponding to the given chunk index in the primary channel. Because some channels can have mappings (e.g. one value per trace), the number of chunks can be less than in the primary channel and we need to have a mapping to figure out the chunk index in each channel that is produced together.

Parameters:

primaryChannelChunkIndex – The index of the chunk in the primary channel (channel 0) that we want to map to a chunk index for this VolumeDataPageAccessor.

Returns:

The chunk index for this VolumeDataPageAccessor corresponding to the given chunk index in the primary channel.

virtual int64_t GetPrimaryChannelChunkIndex(int64_t chunkIndex) const = 0

Get the primary channel chunk index corresponding to the given chunk index of this VolumeDataPageAccessor. In order to avoid creating duplicates requests when a channel is mapped, we need to know which primary channel chunk index is representative of a particular mapped chunk index.

Parameters:

chunkIndex – The chunk index for this VolumeDataPageAccessor that we want the representative primary channel chunk index of.

Returns:

The primary channel chunk index corresponding to the given chunk index for this VolumeDataPageAccessor.

virtual int64_t GetSuperChunkCount() const = 0

Get the number of super-chunks for this VolumeDataPageAccessor. Each super-chunk is an overlapping block of chunks from the remap source of this VolumeDataPageAccessor and the chunks in this VolumeDataPageAccessor. In order to produce the chunks as efficiently as possible (if there are more chunks than super-chunks), any code that iterates over all the chunks of a page accessor should iterate over the super-chunks and then over the chunks within each super-chunk.

Returns:

The number of super-chunks for this VolumeDataPageAccessor.

inline std::vector<int64_t> GetChunkIndicesInSuperChunk(int64_t superChunkIndex) const

Get the list of chunks in the given super-chunk. Each super-chunk is an overlapping block of chunks from the remap source of this VolumeDataPageAccessor and the chunks in this VolumeDataPageAccessor. In order to produce the chunks as efficiently as possible (if there are more chunks than super-chunks), any code that iterates over all the chunks of a page accessor should iterate over the super-chunks and then over the chunks within each super-chunk.

Parameters:

superChunkIndex – The super-chunk index for this VolumeDataPageAccessor that we want the list of chunks in.

Returns:

The list of chunks in the super-chunk

virtual int AddReference() = 0
virtual int RemoveReference() = 0
virtual int GetMaxPages() = 0
virtual void SetMaxPages(int maxPages) = 0
virtual VolumeDataPage *CreatePage(int64_t chunkIndex) = 0
virtual void CopyPage(int64_t chunkIndex, VolumeDataPageAccessor const &source) = 0

Copy a page of data from another VolumeDataPageAccessor with a compatible layout. This method is not blocking so if you want to access the copied data you need to call ReadPage which will block until the copy is done and return the copied data.

Parameters:
virtual VolumeDataPage *ReadPage(int64_t chunkIndex) = 0
virtual VolumeDataPage *ReadPageAtPosition(const int (&position)[Dimensionality_Max]) = 0
virtual void Commit() = 0

Protected Functions

inline VolumeDataPageAccessor()
inline virtual ~VolumeDataPageAccessor()
virtual int GetChunkCountInSuperChunk(int64_t superChunkIndex) const = 0
virtual void GetChunkIndicesInSuperChunk(int64_t *chunkIndices, int64_t superChunkIndex) const = 0
template<typename INDEX, typename T>
class VolumeDataReadAccessor
#include <VolumeDataAccess.h>

A class that provides random read access to the voxel values of a VDS.

Subclassed by OpenVDS::VolumeDataReadWriteAccessor< INDEX, T >

Public Functions

inline VolumeDataLayout const *GetLayout() const
inline int64_t RegionCount() const
inline IndexRegion<INDEX> Region(int64_t region) const
inline int64_t RegionFromIndex(INDEX index)
inline IndexRegion<INDEX> CurrentRegion() const
inline T GetValue(INDEX index) const
inline VolumeDataReadAccessor()
inline VolumeDataReadAccessor(IVolumeDataReadAccessor<INDEX, T> *accessor)
inline VolumeDataReadAccessor(VolumeDataReadAccessor const &readAccessor)
inline ~VolumeDataReadAccessor()

Protected Attributes

IVolumeDataReadAccessor<INDEX, T> *m_accessor
template<typename INDEX, typename T>
class VolumeDataReadWriteAccessor : public OpenVDS::VolumeDataReadAccessor<INDEX, T>
#include <VolumeDataAccess.h>

A class that provides random read/write access to the voxel values of a VDS.

Public Functions

inline void SetValue(INDEX index, T value)
inline void Commit()
inline void Cancel()
inline VolumeDataReadWriteAccessor()
inline VolumeDataReadWriteAccessor(IVolumeDataReadWriteAccessor<INDEX, T> *accessor)
inline VolumeDataReadWriteAccessor(VolumeDataReadWriteAccessor const &readWriteAccessor)

Protected Functions

inline IVolumeDataReadWriteAccessor<INDEX, T> *Accessor()