11 #ifndef __GA_GBPrimitiveList__
12 #define __GA_GBPrimitiveList__
33 ~GA_GBPrimitiveList();
39 GA_Size entries()
const {
return myIndexMap.indexSize(); }
45 void clearAndDestroy();
54 {
return myIndexMap.indexSize() == 0 ? 0:rawEntry(0); }
59 return n ? rawEntry(n-1) : 0;
63 {
return myIndexMap.indexSize() == 0 ? 0:rawEntry(0); }
68 return n ? rawEntry(n-1) : 0;
142 GroupIterationCache(
const GroupIterationCache &);
143 GroupIterationCache &
operator=(
const GroupIterationCache &);
236 template <
typename T>
264 {
return cast(
rawHead(group)); }
267 {
return cast(
rawHead(group)); }
270 {
return cast(
rawTail(group)); }
273 {
return cast(
rawTail(group)); }
278 {
return cast(
rawHead(group, cache)); }
282 {
return cast(
rawHead(group, cache)); }
286 {
return cast(
rawTail(group, cache)); }
290 {
return cast(
rawTail(group, cache)); }
303 const {
return cast(
rawNext(i, g)); }
306 {
return cast(
rawNext(i, g)); }
311 {
return cast(
rawNext(i, g, cache)); }
315 {
return cast(
rawNext(i, g, cache)); }
325 const {
return cast(
rawPrev(i, g)); }
328 {
return cast(
rawPrev(i, g)); }
333 {
return cast(
rawPrev(i, g, cache)); }
337 {
return cast(
rawPrev(i, g, cache)); }
354 {
return reinterpret_cast<const T *
>(e); }
356 {
return reinterpret_cast<T *
>(e); }
363 template <
typename T,
typename SEC_T>
376 const
T *&elem, const SEC_T *&sec)
const
377 {
return this->
rawHeadMix(group, rcast(elem), sec_rcast(sec)); }
380 {
return this->
rawHeadMix(group, rcast(elem), sec_rcast(sec)); }
383 const
T *&elem, const SEC_T *&sec)
const
384 {
return this->
rawTailMix(group, rcast(elem), sec_rcast(sec)); }
387 {
return this->
rawTailMix(group, rcast(elem), sec_rcast(sec)); }
390 const
T *&elem, const SEC_T *&sec,
392 {
return this->
rawHeadMix(group, rcast(elem), sec_rcast(sec),c); }
396 {
return this->
rawHeadMix(group, rcast(elem), sec_rcast(sec),c); }
399 const
T *&elem, const SEC_T *&sec,
401 {
return this->
rawTailMix(group, rcast(elem), sec_rcast(sec),c); }
405 {
return this->
rawTailMix(group, rcast(elem), sec_rcast(sec),c); }
410 const
T *&elem, const SEC_T *&sec,
411 const
T *&newelem, const SEC_T *&newsec)
const
412 {
return this->
rawNextMix(group, rcast(elem), sec_rcast(sec),
413 rcast(newelem), sec_rcast(newsec)); }
416 T *&elem, SEC_T *&sec,
T *&newelem, SEC_T *&newsec)
417 {
return this->
rawNextMix(group, rcast(elem), sec_rcast(sec),
418 rcast(newelem), sec_rcast(newsec)); }
421 const
T *&elem, const SEC_T *&sec,
422 const
T *&newelem, const SEC_T *&newsec)
const
423 {
return this->
rawPrevMix(group, rcast(elem), sec_rcast(sec),
424 rcast(newelem), sec_rcast(newsec)); }
427 T *&elem, SEC_T *&sec,
T *&newelem, SEC_T *&newsec)
428 {
return this->
rawPrevMix(group, rcast(elem), sec_rcast(sec),
429 rcast(newelem), sec_rcast(newsec)); }
432 const
T *&elem, const SEC_T *&sec,
433 const
T *&newelem, const SEC_T *&newsec,
435 {
return this->
rawNextMix(group, rcast(elem), sec_rcast(sec),
436 rcast(newelem), sec_rcast(newsec), c); }
439 T *&elem, SEC_T *&sec,
T *&newelem, SEC_T *&newsec,
441 {
return this->
rawNextMix(group, rcast(elem), sec_rcast(sec),
442 rcast(newelem), sec_rcast(newsec), c); }
445 const
T *&elem, const SEC_T *&sec,
446 const
T *&newelem, const SEC_T *&newsec,
448 {
return this->
rawPrevMix(group, rcast(elem), sec_rcast(sec),
449 rcast(newelem), sec_rcast(newsec), c); }
452 T *&elem, SEC_T *&sec,
T *&newelem, SEC_T *&newsec,
454 {
return this->
rawPrevMix(group, rcast(elem), sec_rcast(sec),
455 rcast(newelem), sec_rcast(newsec), c); }
int rawTailMix(const GA_ElementGroup &group, const GA_Primitive *&elem, const GA_Primitive *&sec) const
A class to manage an ordered array which has fixed offset handles.
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
const GA_Primitive * rawNext(const GA_Primitive *i) const
const GA_Primitive * rawEntry(GA_Size n) const
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
const T * entry(GA_Size n) const
#define SYS_DEPRECATED_PUSH_DISABLE()
#define SYS_DEPRECATED_POP_DISABLE()
T must be a sub-class of GA_Primitive.
int rawNextMix(const GA_ElementGroup &group, const GA_Primitive *&elem, const GA_Primitive *&sec, const GA_Primitive *&newelem, const GA_Primitive *&newsec) const
Information necessary to lookup a secondary primitive.
exint GA_Size
Defines the bit width for index and offset types in GA.
const GA_Primitive * rawHead() const
const GA_Primitive * rawPrev(const GA_Primitive *i) const
int rawHeadMix(const GA_ElementGroup &group, const GA_Primitive *&elem, const GA_Primitive *&sec) const
GA_Size GA_ElementGroupOrderIndex
Class used to avoid O(n^2) traversal of ordered groups.
const T * prev(const GA_Primitive *i) const
const T * next(const GA_Primitive *i) const
int tailMix(const GA_ElementGroup &group, const T *&elem, const SEC_T *&sec) const
int rawPrevMix(const GA_ElementGroup &group, const GA_Primitive *&elem, const GA_Primitive *&sec, const GA_Primitive *&newelem, const GA_Primitive *&newsec) const
#define SYS_DEPRECATED_HDK(__V__)
int nextMix(const GA_ElementGroup &group, const T *&elem, const SEC_T *&sec, const T *&newelem, const SEC_T *&newsec) const
LeafData & operator=(const LeafData &)=delete
int prevMix(const GA_ElementGroup &group, const T *&elem, const SEC_T *&sec, const T *&newelem, const SEC_T *&newsec) const
int headMix(const GA_ElementGroup &group, const T *&elem, const SEC_T *&sec) const
const GA_Primitive * rawTail() const
bool operator==(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Equality operator, does exact floating point comparisons.