PxStrideIterator< T > Class Template Reference

Iterator class for iterating over arrays of data that may be interleaved with other data. More...

#include <PxStrideIterator.h>

Public Member Functions

PX_INLINE PxStrideIterator (T *ptr=NULL, PxU32 stride=sizeof(T))
 Constructor. More...
 
PX_INLINE PxStrideIterator (const PxStrideIterator< typename StripConst< T >::Type > &strideIterator)
 Copy constructor. More...
 
PX_INLINE T * ptr () const
 Get pointer to element. More...
 
PX_INLINE PxU32 stride () const
 Get stride. More...
 
PX_INLINE T & operator* () const
 Indirection operator. More...
 
PX_INLINE T * operator-> () const
 Dereferencing operator. More...
 
PX_INLINE T & operator[] (unsigned int i) const
 Indexing operator. More...
 
PX_INLINE PxStrideIteratoroperator++ ()
 Pre-increment operator. More...
 
PX_INLINE PxStrideIterator operator++ (int)
 Post-increment operator. More...
 
PX_INLINE PxStrideIteratoroperator-- ()
 Pre-decrement operator. More...
 
PX_INLINE PxStrideIterator operator-- (int)
 Post-decrement operator. More...
 
PX_INLINE PxStrideIterator operator+ (unsigned int i) const
 Addition operator. More...
 
PX_INLINE PxStrideIterator operator- (unsigned int i) const
 Subtraction operator. More...
 
PX_INLINE PxStrideIteratoroperator+= (unsigned int i)
 Addition compound assignment operator. More...
 
PX_INLINE PxStrideIteratoroperator-= (unsigned int i)
 Subtraction compound assignment operator. More...
 
PX_INLINE int operator- (const PxStrideIterator &other) const
 Iterator difference. More...
 
PX_INLINE bool operator== (const PxStrideIterator &other) const
 Equality operator. More...
 
PX_INLINE bool operator!= (const PxStrideIterator &other) const
 Inequality operator. More...
 
PX_INLINE bool operator< (const PxStrideIterator &other) const
 Less than operator. More...
 
PX_INLINE bool operator> (const PxStrideIterator &other) const
 Greater than operator. More...
 
PX_INLINE bool operator<= (const PxStrideIterator &other) const
 Less or equal than operator. More...
 
PX_INLINE bool operator>= (const PxStrideIterator &other) const
 Greater or equal than operator. More...
 

Private Member Functions

PX_INLINE bool isCompatible (const PxStrideIterator &other) const
 

Static Private Member Functions

static PX_INLINE T * byteAdd (T *ptr, PxU32 bytes)
 
static PX_INLINE T * byteSub (T *ptr, PxU32 bytes)
 

Private Attributes

T * mPtr
 
PxU32 mStride
 

Detailed Description

template<typename T>
class PxStrideIterator< T >

Iterator class for iterating over arrays of data that may be interleaved with other data.

This class is used for iterating over arrays of elements that may have a larger element to element offset, called the stride, than the size of the element itself (non-contiguous).

The template parameter T denotes the type of the element accessed. The stride itself is stored as a member field so multiple instances of a PxStrideIterator class can have different strides. This is useful for cases were the stride depends on runtime configuration.

The stride iterator can be used for index based access, e.g.:

PxStrideIterator<PxVec3> strideArray(...);
for (unsigned i = 0; i < 10; ++i)
{
PxVec3& vec = strideArray[i];
...
}

or iteration by increment, e.g.:

PxStrideIterator<PxVec3> strideBegin(...);
PxStrideIterator<PxVec3> strideEnd(strideBegin + 10);
for (PxStrideIterator<PxVec3> it = strideBegin; it < strideEnd; ++it)
{
PxVec3& vec = *it;
...
}

Two special cases:

  • A stride of sizeof(T) represents a regular c array of type T.
  • A stride of 0 can be used to describe re-occurrence of the same element multiple times.

Constructor & Destructor Documentation

◆ PxStrideIterator() [1/2]

template<typename T>
PX_INLINE PxStrideIterator< T >::PxStrideIterator ( T *  ptr = NULL,
PxU32  stride = sizeof(T) 
)
inlineexplicit

Constructor.

Optionally takes a pointer to an element and a stride.

Parameters
[in]ptrpointer to element, defaults to NULL.
[in]stridestride for accessing consecutive elements, defaults to the size of one element.

References PX_ASSERT.

◆ PxStrideIterator() [2/2]

template<typename T>
PX_INLINE PxStrideIterator< T >::PxStrideIterator ( const PxStrideIterator< typename StripConst< T >::Type > &  strideIterator)
inline

Copy constructor.

Parameters
[in]strideIteratorPxStrideIterator to be copied.

References PX_ASSERT.

Member Function Documentation

◆ byteAdd()

template<typename T>
static PX_INLINE T* PxStrideIterator< T >::byteAdd ( T *  ptr,
PxU32  bytes 
)
inlinestaticprivate

References bytes.

◆ byteSub()

template<typename T>
static PX_INLINE T* PxStrideIterator< T >::byteSub ( T *  ptr,
PxU32  bytes 
)
inlinestaticprivate

References bytes.

◆ isCompatible()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::isCompatible ( const PxStrideIterator< T > &  other) const
inlineprivate

◆ operator!=()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator!= ( const PxStrideIterator< T > &  other) const
inline

Inequality operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator*()

template<typename T>
PX_INLINE T& PxStrideIterator< T >::operator* ( ) const
inline

Indirection operator.

◆ operator+()

template<typename T>
PX_INLINE PxStrideIterator PxStrideIterator< T >::operator+ ( unsigned int  i) const
inline

Addition operator.

◆ operator++() [1/2]

template<typename T>
PX_INLINE PxStrideIterator& PxStrideIterator< T >::operator++ ( )
inline

Pre-increment operator.

◆ operator++() [2/2]

template<typename T>
PX_INLINE PxStrideIterator PxStrideIterator< T >::operator++ ( int  )
inline

Post-increment operator.

◆ operator+=()

template<typename T>
PX_INLINE PxStrideIterator& PxStrideIterator< T >::operator+= ( unsigned int  i)
inline

Addition compound assignment operator.

◆ operator-() [1/2]

template<typename T>
PX_INLINE PxStrideIterator PxStrideIterator< T >::operator- ( unsigned int  i) const
inline

Subtraction operator.

◆ operator-() [2/2]

template<typename T>
PX_INLINE int PxStrideIterator< T >::operator- ( const PxStrideIterator< T > &  other) const
inline

Iterator difference.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator--() [1/2]

template<typename T>
PX_INLINE PxStrideIterator& PxStrideIterator< T >::operator-- ( )
inline

Pre-decrement operator.

◆ operator--() [2/2]

template<typename T>
PX_INLINE PxStrideIterator PxStrideIterator< T >::operator-- ( int  )
inline

Post-decrement operator.

◆ operator-=()

template<typename T>
PX_INLINE PxStrideIterator& PxStrideIterator< T >::operator-= ( unsigned int  i)
inline

Subtraction compound assignment operator.

◆ operator->()

template<typename T>
PX_INLINE T* PxStrideIterator< T >::operator-> ( ) const
inline

Dereferencing operator.

◆ operator<()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator< ( const PxStrideIterator< T > &  other) const
inline

Less than operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator<=()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator<= ( const PxStrideIterator< T > &  other) const
inline

Less or equal than operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator==()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator== ( const PxStrideIterator< T > &  other) const
inline

Equality operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator>()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator> ( const PxStrideIterator< T > &  other) const
inline

Greater than operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator>=()

template<typename T>
PX_INLINE bool PxStrideIterator< T >::operator>= ( const PxStrideIterator< T > &  other) const
inline

Greater or equal than operator.

References PxStrideIterator< T >::mPtr, and PX_ASSERT.

◆ operator[]()

template<typename T>
PX_INLINE T& PxStrideIterator< T >::operator[] ( unsigned int  i) const
inline

Indexing operator.

◆ ptr()

template<typename T>
PX_INLINE T* PxStrideIterator< T >::ptr ( ) const
inline

Get pointer to element.

◆ stride()

template<typename T>
PX_INLINE PxU32 PxStrideIterator< T >::stride ( ) const
inline

Get stride.

Referenced by PxStrideIterator< T >::isCompatible().

Member Data Documentation

◆ mPtr

◆ mStride

template<typename T>
PxU32 PxStrideIterator< T >::mStride
private

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