UT_VoxelArrayIterator< T > Class Template Reference

#include <UT_VoxelArray.h>

List of all members.

Public Member Functions

 UT_VoxelArrayIterator ()
 UT_VoxelArrayIterator (UT_VoxelArray< T > *vox)
 UT_VoxelArrayIterator (UT_COWReadHandle< UT_VoxelArray< T > > handle)
virtual ~UT_VoxelArrayIterator ()
void setArray (UT_VoxelArray< T > *vox)
void setHandle (UT_COWReadHandle< UT_VoxelArray< T > > handle)
void setPartialRange (int idx, int numranges)
void restrictToBBox (const UT_BoundingBox &bbox)
void restrictToBBox (int xmin, int xmax, int ymin, int ymax, int zmin, int zmax)
 The [xmin, xmax] are inclusive and measured in voxels.
void rewind ()
 Resets the iterator to point to the first voxel.
bool atEnd () const
 Returns true if we have iterated over all of the voxels.
void advance ()
 Advances the iterator to point to the next voxel.
int x () const
 Retrieve the current location of the iterator.
int y () const
int z () const
int idx (int idx) const
getValue () const
void setValue (T t) const
 Sets the voxel we are currently pointing to the given value.
bool isTileConstant () const
 Returns true if the tile we are currently in is a constant tile.
bool isStartOfTile () const
 Returns true if we are at the start of a new tile.
UT_VoxelTile< T > * getTile () const
 Returns the VoxelTile we are currently processing.
void advanceTile ()
bool getCompressOnExit () const
void setCompressOnExit (bool shouldcompress)

Public Attributes

int myCurTile
 Our current linear tile idx. A value of -1 implies at end.
int myCurTileListIdx
 Our current index into the tile list.
int myTileStart
int myTileEnd
int myTilePos [3]
 Which tile we are as per tx,ty,tz rather than linear index.
int myTileLocalPos [3]
 Our position within the current tile.
int myTileSize [3]
 The size of the current tile.

Protected Attributes

UT_VoxelArray< T > * myArray
 The array we belong to.
UT_COWReadHandle
< UT_VoxelArray< T > > 
myHandle
int myPos [3]
 Absolute index into voxel array.
bool myShouldCompressOnExit
bool myUseTileList
UT_IntArray myTileList


Detailed Description

template<typename T>
class UT_VoxelArrayIterator< T >

Iterator for Voxel Arrays

This class eliminates the need for having for (z = 0; z < zres; z++) ... for (x = 0; x < xres; x++) loops everywhere.

Note that the order of iteration is undefined! (The actual order is to complete each tile in turn, thereby hopefully improving cache coherency)

It is safe to write to the voxel array while this iterator is active. It is *not* safe to resize the voxel array (or destroy it)

The iterator is similar in principal to an STL iterator, but somewhat simpler. The classic STL loop for ( it = begin(); it != end(); ++it ) is done using for ( it.rewind(); !it.atEnd(); it.advance() )

Examples:

SIM/SIM_GasAdd.C.

Definition at line 798 of file UT_VoxelArray.h.


Constructor & Destructor Documentation

template<typename T >
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator (  )  [inline]

Definition at line 2264 of file UT_VoxelArray.C.

template<typename T >
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator ( UT_VoxelArray< T > *  vox  )  [inline]

Definition at line 2274 of file UT_VoxelArray.C.

template<typename T >
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator ( UT_COWReadHandle< UT_VoxelArray< T > >  handle  )  [inline]

Definition at line 2282 of file UT_VoxelArray.C.

template<typename T >
UT_VoxelArrayIterator< T >::~UT_VoxelArrayIterator (  )  [inline, virtual]

Definition at line 2290 of file UT_VoxelArray.C.


Member Function Documentation

template<typename T>
void UT_VoxelArrayIterator< T >::advance (  )  [inline]

Advances the iterator to point to the next voxel.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 858 of file UT_VoxelArray.h.

template<typename T >
void UT_VoxelArrayIterator< T >::advanceTile (  )  [inline]

Advances the iterator to point to the next tile. Useful if the constant test showed that you didn't need to deal with this one.

Definition at line 2506 of file UT_VoxelArray.C.

template<typename T>
bool UT_VoxelArrayIterator< T >::atEnd (  )  const [inline]

Returns true if we have iterated over all of the voxels.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 854 of file UT_VoxelArray.h.

template<typename T>
bool UT_VoxelArrayIterator< T >::getCompressOnExit (  )  const [inline]

Sets a flag which causes the iterator to tryCompress() tiles when it is done with them.

Definition at line 954 of file UT_VoxelArray.h.

template<typename T>
UT_VoxelTile<T>* UT_VoxelArrayIterator< T >::getTile (  )  const [inline]

Returns the VoxelTile we are currently processing.

Definition at line 942 of file UT_VoxelArray.h.

template<typename T>
T UT_VoxelArrayIterator< T >::getValue (  )  const [inline]

Retrieves the value that we are currently pointing at. This is faster than an operator(x,y,z) as we already know our current tile and that bounds checking isn't needed.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 898 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::idx ( int  idx  )  const [inline]

Definition at line 893 of file UT_VoxelArray.h.

template<typename T>
bool UT_VoxelArrayIterator< T >::isStartOfTile (  )  const [inline]

Returns true if we are at the start of a new tile.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 936 of file UT_VoxelArray.h.

template<typename T>
bool UT_VoxelArrayIterator< T >::isTileConstant (  )  const [inline]

Returns true if the tile we are currently in is a constant tile.

Definition at line 925 of file UT_VoxelArray.h.

template<typename T >
void UT_VoxelArrayIterator< T >::restrictToBBox ( int  xmin,
int  xmax,
int  ymin,
int  ymax,
int  zmin,
int  zmax 
) [inline]

The [xmin, xmax] are inclusive and measured in voxels.

Definition at line 2381 of file UT_VoxelArray.C.

template<typename T >
void UT_VoxelArrayIterator< T >::restrictToBBox ( const UT_BoundingBox bbox  )  [inline]

Restricts this iterator to the tiles that intersect the given bounding box of voxel coordinates. Note that this will not be a precise restriction as each tile is either included or not. You should setPartialRange() after setting the bbox range The bounding box is on the [0..1]^3 range.

Definition at line 2357 of file UT_VoxelArray.C.

template<typename T >
void UT_VoxelArrayIterator< T >::rewind (  )  [inline]

Resets the iterator to point to the first voxel.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 2441 of file UT_VoxelArray.C.

template<typename T>
void UT_VoxelArrayIterator< T >::setArray ( UT_VoxelArray< T > *  vox  )  [inline]

Examples:
SIM/SIM_GasAdd.C.

Definition at line 806 of file UT_VoxelArray.h.

template<typename T>
void UT_VoxelArrayIterator< T >::setCompressOnExit ( bool  shouldcompress  )  [inline]

Examples:
SIM/SIM_GasAdd.C.

Definition at line 955 of file UT_VoxelArray.h.

template<typename T>
void UT_VoxelArrayIterator< T >::setHandle ( UT_COWReadHandle< UT_VoxelArray< T > >  handle  )  [inline]

Iterates over the array pointed to by the handle. Only supports read access during the iteration as it does a read lock.

Definition at line 818 of file UT_VoxelArray.h.

template<typename T >
void UT_VoxelArrayIterator< T >::setPartialRange ( int  idx,
int  numranges 
) [inline]

Restricts this iterator to only run over a subset of the tiles. The tiles will be divided into approximately numrange equal groups, this will be the idx'th. The resulting iterator may have zero tiles.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 2296 of file UT_VoxelArray.C.

template<typename T>
void UT_VoxelArrayIterator< T >::setValue ( t  )  const [inline]

Sets the voxel we are currently pointing to the given value.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 911 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::x ( void   )  const [inline]

Retrieve the current location of the iterator.

Examples:
SIM/SIM_GasAdd.C.

Definition at line 890 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::y ( void   )  const [inline]

Examples:
SIM/SIM_GasAdd.C.

Definition at line 891 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::z ( void   )  const [inline]

Examples:
SIM/SIM_GasAdd.C.

Definition at line 892 of file UT_VoxelArray.h.


Member Data Documentation

template<typename T>
UT_VoxelArray<T>* UT_VoxelArrayIterator< T >::myArray [protected]

The array we belong to.

Definition at line 960 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myCurTile

Our current linear tile idx. A value of -1 implies at end.

Definition at line 977 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myCurTileListIdx

Our current index into the tile list.

Definition at line 980 of file UT_VoxelArray.h.

template<typename T>
UT_COWReadHandle<UT_VoxelArray<T> > UT_VoxelArrayIterator< T >::myHandle [protected]

The handle that we have locked to get our array. It is null by default which makes the lock/unlock nops.

Definition at line 963 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myPos[3] [protected]

Absolute index into voxel array.

Definition at line 966 of file UT_VoxelArray.h.

template<typename T>
bool UT_VoxelArrayIterator< T >::myShouldCompressOnExit [protected]

Flag determining if we should compress tiles whenever we advance out of them.

Definition at line 970 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myTileEnd

Definition at line 984 of file UT_VoxelArray.h.

template<typename T>
UT_IntArray UT_VoxelArrayIterator< T >::myTileList [protected]

Definition at line 973 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myTileLocalPos[3]

Our position within the current tile.

Definition at line 990 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myTilePos[3]

Which tile we are as per tx,ty,tz rather than linear index.

Definition at line 987 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myTileSize[3]

The size of the current tile.

Definition at line 993 of file UT_VoxelArray.h.

template<typename T>
int UT_VoxelArrayIterator< T >::myTileStart

Our start & end tiles for processing a subrange. The tile range is half open [start, end)

Definition at line 984 of file UT_VoxelArray.h.

template<typename T>
bool UT_VoxelArrayIterator< T >::myUseTileList [protected]

Definition at line 972 of file UT_VoxelArray.h.


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

Generated on Fri May 25 00:10:55 2012 for HDK by  doxygen 1.5.9