An iterator for an n-dimensional coordinate vector. For example, suppose you have a 4-dimensional 2x3x2x1 grid, and you want to iterate through its coordinates: (0000, 0010, 0100, 0110, 0200, 0210, 1000, 1010, 1100, 1110, 1200, 1210). This class will iterate over coordinate vectors in this manner. (For 0-dimensional coordinate vectors, it behaves as though the origin is the only valid coordinate.)
More...
#include <GVec.h>
|
| GCoordVectorIterator (size_t dims, size_t *pRanges) |
| Makes an internal copy of pRanges. If pRanges is NULL, then it sets all the range values to 1. More...
|
|
| GCoordVectorIterator (std::vector< size_t > &ranges) |
|
| ~GCoordVectorIterator () |
|
bool | advance () |
| Advances to the next coordinate. Returns true if it successfully advances to another valid coordinate. Returns false if there are no more valid coordinates. More...
|
|
bool | advance (size_t steps) |
| Advances by the specified number of steps. Returns false if it wraps past the end of the coordinate space. Returns true otherwise. More...
|
|
bool | advanceSampling () |
| Advances in a manner that approximates a uniform sampling of the space, but ultimately visits every coordinate. More...
|
|
size_t | coordCount () |
| Computes the total number of coordinates. More...
|
|
size_t * | current () |
| Returns the current coordinate vector. More...
|
|
size_t | currentIndex () |
| Returns the index value of the current coordinate in raster order. (This is computed, not counted, so it will be accurate even if you jump to a random coordinate.) More...
|
|
void | currentNormalized (double *pCoords) |
| Returns a coordinate vector that has been normalized so that each element falls between 0 and 1. (The coordinates are also offset slightly to sample the space without bias.) More...
|
|
size_t | dims () |
| Returns the number of dims. More...
|
|
size_t * | ranges () |
| Returns the current ranges. More...
|
|
void | reset () |
| Sets the coordinate vector to all zeros. More...
|
|
void | reset (size_t dims, size_t *pRanges) |
| Adjusts the number of dims and ranges, and sets the coordinate vector to all zeros. If pRanges is NULL, then it sets all the range values to 1. More...
|
|
void | reset (std::vector< size_t > &ranges) |
| Adjusts the number of dims and ranges, and sets the coordinate vector to all zeros. More...
|
|
void | setRandom (GRand *pRand) |
| Jump to a random coordinate in the valid range. More...
|
|
|
static void | test () |
| Performs unit tests for this class. Throws an exception if any problems are found. More...
|
|
An iterator for an n-dimensional coordinate vector. For example, suppose you have a 4-dimensional 2x3x2x1 grid, and you want to iterate through its coordinates: (0000, 0010, 0100, 0110, 0200, 0210, 1000, 1010, 1100, 1110, 1200, 1210). This class will iterate over coordinate vectors in this manner. (For 0-dimensional coordinate vectors, it behaves as though the origin is the only valid coordinate.)
GClasses::GCoordVectorIterator::GCoordVectorIterator |
( |
size_t |
dims, |
|
|
size_t * |
pRanges |
|
) |
| |
Makes an internal copy of pRanges. If pRanges is NULL, then it sets all the range values to 1.
GClasses::GCoordVectorIterator::GCoordVectorIterator |
( |
std::vector< size_t > & |
ranges | ) |
|
GClasses::GCoordVectorIterator::~GCoordVectorIterator |
( |
| ) |
|
bool GClasses::GCoordVectorIterator::advance |
( |
| ) |
|
Advances to the next coordinate. Returns true if it successfully advances to another valid coordinate. Returns false if there are no more valid coordinates.
bool GClasses::GCoordVectorIterator::advance |
( |
size_t |
steps | ) |
|
Advances by the specified number of steps. Returns false if it wraps past the end of the coordinate space. Returns true otherwise.
bool GClasses::GCoordVectorIterator::advanceSampling |
( |
| ) |
|
Advances in a manner that approximates a uniform sampling of the space, but ultimately visits every coordinate.
size_t GClasses::GCoordVectorIterator::coordCount |
( |
| ) |
|
Computes the total number of coordinates.
size_t* GClasses::GCoordVectorIterator::current |
( |
| ) |
|
Returns the current coordinate vector.
size_t GClasses::GCoordVectorIterator::currentIndex |
( |
| ) |
|
Returns the index value of the current coordinate in raster order. (This is computed, not counted, so it will be accurate even if you jump to a random coordinate.)
void GClasses::GCoordVectorIterator::currentNormalized |
( |
double * |
pCoords | ) |
|
Returns a coordinate vector that has been normalized so that each element falls between 0 and 1. (The coordinates are also offset slightly to sample the space without bias.)
size_t GClasses::GCoordVectorIterator::dims |
( |
| ) |
|
|
inline |
Returns the number of dims.
size_t* GClasses::GCoordVectorIterator::ranges |
( |
| ) |
|
|
inline |
Returns the current ranges.
void GClasses::GCoordVectorIterator::reset |
( |
| ) |
|
Sets the coordinate vector to all zeros.
void GClasses::GCoordVectorIterator::reset |
( |
size_t |
dims, |
|
|
size_t * |
pRanges |
|
) |
| |
Adjusts the number of dims and ranges, and sets the coordinate vector to all zeros. If pRanges is NULL, then it sets all the range values to 1.
void GClasses::GCoordVectorIterator::reset |
( |
std::vector< size_t > & |
ranges | ) |
|
Adjusts the number of dims and ranges, and sets the coordinate vector to all zeros.
void GClasses::GCoordVectorIterator::setRandom |
( |
GRand * |
pRand | ) |
|
Jump to a random coordinate in the valid range.
static void GClasses::GCoordVectorIterator::test |
( |
| ) |
|
|
static |
Performs unit tests for this class. Throws an exception if any problems are found.
size_t GClasses::GCoordVectorIterator::m_dims |
|
protected |
size_t* GClasses::GCoordVectorIterator::m_pCoords |
|
protected |
size_t* GClasses::GCoordVectorIterator::m_pRanges |
|
protected |
size_t GClasses::GCoordVectorIterator::m_sampleMask |
|
protected |
size_t GClasses::GCoordVectorIterator::m_sampleShift |
|
protected |