HDK
|
#include <UT_PageArray.h>
Classes | |
struct | NotVoid |
class | PageTable |
class | PageTableEntry |
Public Types | |
typedef UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T > | ThisType |
typedef DATA_T | DataType |
typedef IDX_T | IndexType |
Public Member Functions | |
UT_PageArray () | |
UT_PageArray (exint tuplesize) | |
UT_PageArray (UT_Storage storage) | |
UT_PageArray (exint tuplesize, UT_Storage storage) | |
UT_PageArray (const ThisType &that) | |
template<typename SRC_DATA_T , exint SRC_TSIZE, bool SRC_TABLEHARDENED, bool SRC_PAGESHARDENED> | |
UT_PageArray (const UT_PageArray< SRC_DATA_T, SRC_TSIZE, SRC_TABLEHARDENED, SRC_PAGESHARDENED, THEPAGEBITS, IDX_T > &that) | |
SYS_FORCE_INLINE | ~UT_PageArray () |
SYS_FORCE_INLINE void | clear () |
void | clearAndDestroy () |
SYS_FORCE_INLINE ThisType & | operator= (const ThisType &that) |
template<typename SRC_DATA_T , exint SRC_TSIZE, bool SRC_TABLEHARDENED, bool SRC_PAGESHARDENED> | |
SYS_FORCE_INLINE ThisType & | operator= (const UT_PageArray< SRC_DATA_T, SRC_TSIZE, SRC_TABLEHARDENED, SRC_PAGESHARDENED, THEPAGEBITS, IDX_T > &that) |
template<typename SRC_DATA_T , exint SRC_TSIZE, bool SRC_TABLEHARDENED, bool SRC_PAGESHARDENED> | |
void | replace (const UT_PageArray< SRC_DATA_T, SRC_TSIZE, SRC_TABLEHARDENED, SRC_PAGESHARDENED, THEPAGEBITS, IDX_T > &that) |
SYS_FORCE_INLINE NotVoidType | operator() (IDX_T i, exint component=0) const |
Read element i's specified component (default component 0). More... | |
template<typename DEST_DATA_T = DATA_T> | |
SYS_FORCE_INLINE DEST_DATA_T | get (IDX_T i, exint component=0) const |
template<typename DEST_DATA_T = NotVoidType, exint DEST_TSIZE = theSafeTupleSize> | |
SYS_FORCE_INLINE UT_FixedVector< DEST_DATA_T, DEST_TSIZE > | getVector (IDX_T i) const |
SYS_FORCE_INLINE NotVoidType & | operator() (IDX_T i, exint component=0) |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | set (IDX_T i, SRC_DATA_T v) |
component == 0 in this version More... | |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | add (IDX_T i, SRC_DATA_T v) |
component == 0 in this version More... | |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | set (IDX_T i, exint component, SRC_DATA_T v) |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | add (IDX_T i, exint component, SRC_DATA_T v) |
template<int OP, typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | op (IDX_T i, exint component, SRC_DATA_T v) |
template<typename TS > | |
SYS_FORCE_INLINE void | setVector (IDX_T i, const TS &as) |
template<typename TS > | |
SYS_FORCE_INLINE void | addVector (IDX_T i, const TS &as) |
template<int OP, typename SRC_DATA_T , exint SRC_TSIZE> | |
SYS_FORCE_INLINE void | opVector (IDX_T i, const UT_FixedVector< SRC_DATA_T, SRC_TSIZE > &v) |
SYS_FORCE_INLINE IDX_T | size () const |
SYS_FORCE_INLINE IDX_T | capacity () const |
void | setCapacity (IDX_T newcapacity) |
void | setCapacityIfNeeded (IDX_T newcapacity) |
void | setSize (IDX_T newsize) |
void | setSize (IDX_T newsize, NotVoidType initval) |
void | setSize (IDX_T newsize, const UT_FixedVector< NotVoidType, theSafeTupleSize > &initval) |
void | setSize (IDX_T newsize, const UT_Defaults &initval) |
void | setConstant (IDX_T start, IDX_T end, NotVoidType v) |
void | setConstant (IDX_T start, IDX_T end, const UT_FixedVector< NotVoidType, theSafeTupleSize > &v) |
void | setConstant (IDX_T start, IDX_T end, const UT_Defaults &v) |
template<typename SRC_T > | |
void | setConstant (IDX_T start, IDX_T end, const SRC_T *values) |
void | setStorage (const UT_Storage newstorage) |
void | setTupleSize (exint newtuplesize, const UT_Defaults &v) |
int64 | getMemoryUsage (bool inclusive) const |
void | countMemory (UT_MemoryCounter &counter, bool inclusive) const |
void | moveRange (IDX_T srcstart, IDX_T deststart, IDX_T nelements) |
template<typename SRC_DATA_T , exint SRC_TSIZE, bool SRC_TABLEHARDENED, bool SRC_PAGESHARDENED> | |
void | moveRange (const UT_PageArray< SRC_DATA_T, SRC_TSIZE, SRC_TABLEHARDENED, SRC_PAGESHARDENED, THEPAGEBITS, IDX_T > &src, IDX_T srcstart, IDX_T deststart, IDX_T nelements) |
void | swapRange (IDX_T astart, IDX_T bstart, IDX_T nelements) |
void | copy (IDX_T dest, IDX_T src) |
Copies a single element from src to dest within this. More... | |
template<typename T > | |
SYS_FORCE_INLINE void | getRange (IDX_T srcstart, IDX_T nelements, T *dest) const |
template<typename T > | |
SYS_FORCE_INLINE void | setRange (IDX_T deststart, IDX_T nelements, const T *src) |
template<typename DEST_DATA_T , exint DEST_TSIZE> | |
void | getVectorRange (IDX_T srcstart, IDX_T nelements, UT_FixedVector< DEST_DATA_T, DEST_TSIZE > *dest) const |
template<typename SRC_DATA_T , exint SRC_TSIZE> | |
void | setVectorRange (IDX_T deststart, IDX_T nelements, const UT_FixedVector< SRC_DATA_T, SRC_TSIZE > *src) |
SYS_FORCE_INLINE bool | isTableHardened () const |
Returns true iff the table isn't shared with any other UT_PageArray's. More... | |
SYS_FORCE_INLINE UT_PageArray < DATA_T, TSIZE, true, PAGESHARDENED, THEPAGEBITS, IDX_T > & | hardenTable () |
template<bool including_capacity = false> | |
SYS_FORCE_INLINE UT_PageArray < DATA_T, TSIZE, true, true, THEPAGEBITS, IDX_T > & | hardenAllPages (IDX_T start=IDX_T(0), IDX_T end=IDX_T(-1)) |
template<bool including_capacity = false> | |
SYS_FORCE_INLINE void | tryCompressAllPages (IDX_T start=IDX_T(0), IDX_T end=IDX_T(-1)) |
SYS_FORCE_INLINE exint | getTupleSize () const |
SYS_FORCE_INLINE UT_Storage | getStorage () const |
SYS_FORCE_INLINE bool | isPageConstant (UT_PageNum pagenum) const |
Returns true iff the specified page is constant-compressed. More... | |
SYS_FORCE_INLINE bool | isArrayZero () const |
Returns true iff the entire array is constant & zero. More... | |
SYS_FORCE_INLINE void | setPageConstant (UT_PageNum pagenum, const NotVoidType &val) |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | setPageConstant (UT_PageNum pagenum, const UT_FixedVector< SRC_DATA_T, theSafeTupleSize > &val) |
template<typename SRC_DATA_T > | |
SYS_FORCE_INLINE void | setPageConstant (UT_PageNum pagenum, const SRC_DATA_T *values) |
SYS_FORCE_INLINE bool | isPageHard (UT_PageNum pagenum) const |
SYS_FORCE_INLINE NotVoidType * | hardenPage (UT_PageNum pagenum) |
SYS_FORCE_INLINE NotVoidType * | hardenPageNoInit (UT_PageNum pagenum) |
SYS_FORCE_INLINE NotVoidType * | unshareConstantPage (UT_PageNum pagenum) |
SYS_FORCE_INLINE void | tryCompressPage (UT_PageNum pagenum) |
const NotVoidType * | getPageData (UT_PageNum pagenum) const |
NotVoidType * | getPageData (UT_PageNum pagenum) |
bool | decRefIffSharedTable () |
bool | decRefIffSharedPage (UT_PageNum pagenum) |
SYS_FORCE_INLINE int64 | getGuaranteedInt (IDX_T i) const |
bool | hasNanInRange (IDX_T start, IDX_T end) const |
template<typename SrcNotVoidType > | |
void | fillNonConstWithConst (NotVoidType *__restrict destpagedata, NotVoidType *destpageend, const SrcNotVoidType *__restrict stuple, exint mintuplesize, exint desttupleextra) |
template<typename SrcNotVoidType > | |
void | copyNonConst (NotVoidType *__restrict destpagedata, const SrcNotVoidType *__restrict srcpagedata, const exint desttuplesize, const exint srctuplesize, UT_PageOff ntuples) |
template<typename DEST_DATA_T > | |
SYS_FORCE_INLINE const UT_PageArray< DEST_DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T > & | castType () const |
template<typename DEST_DATA_T > | |
SYS_FORCE_INLINE UT_PageArray < DEST_DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T > & | castType () |
template<exint DEST_TSIZE> | |
SYS_FORCE_INLINE const UT_PageArray< DATA_T, DEST_TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T > & | castTupleSize () const |
template<exint DEST_TSIZE> | |
SYS_FORCE_INLINE UT_PageArray < DATA_T, DEST_TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T > & | castTupleSize () |
Static Public Member Functions | |
static SYS_FORCE_INLINE IDX_T | roundUpCapacity (IDX_T capacity) |
static SYS_FORCE_INLINE UT_PageNum | pageNum (IDX_T i) |
static SYS_FORCE_INLINE UT_PageNum | numPages (IDX_T nelements) |
static SYS_FORCE_INLINE UT_PageOff | pageOff (IDX_T i) |
static SYS_FORCE_INLINE UT_PageOff | pageStart (IDX_T page) |
Static Public Attributes | |
static const UT_Storage | theStorage = UT_StorageNum<DATA_T>::theStorage |
static const exint | theTupleSize = TSIZE |
static const exint | theSafeTupleSize = (TSIZE==-1) ? 3 : TSIZE |
static const exint | thePageBits = THEPAGEBITS |
static const exint | thePageSize = (exint(1)<<thePageBits) |
static const exint | thePageMask = thePageSize-1 |
Protected Types | |
typedef NotVoid< DATA_T >::type | NotVoidType |
Protected Member Functions | |
template<typename DEST_DATA_T = DATA_T> | |
DEST_DATA_T | getUnknownType (IDX_T i, exint component=0) const |
template<int OP, typename SRC_DATA_T > | |
void | opUnknownType (IDX_T i, exint component, SRC_DATA_T v) |
template<int OP, typename SRC_DATA_T , exint SRC_TSIZE> | |
void | opVectorUnknownType (IDX_T i, const UT_FixedVector< SRC_DATA_T, SRC_TSIZE > &v) |
template<typename DEST_DATA_T , exint DEST_TSIZE> | |
UT_FixedVector< DEST_DATA_T, DEST_TSIZE > | getVectorUnknownType (IDX_T i) const |
template<typename DEST_DATA_T , exint DEST_TSIZE> | |
UT_FixedVector< DEST_DATA_T, DEST_TSIZE > | getVectorUnknownSize (IDX_T i) const |
template<typename DEST_DATA_T , exint DEST_TSIZE> | |
UT_FixedVector< DEST_DATA_T, DEST_TSIZE > | getVectorMismatchedSize (IDX_T i) const |
void | hardenAllPagesUnknownType (IDX_T start, IDX_T end) |
void | tryCompressAllPagesUnknownType (IDX_T start, IDX_T end) |
void | tryCompressPageUnknownType (UT_PageNum pagenum) |
template<typename SRC_DATA_T > | |
void | setPageConstantUnknownType (UT_PageNum pagenum, const UT_FixedVector< SRC_DATA_T, theSafeTupleSize > &val) |
template<typename SRC_DATA_T > | |
void | setPageConstantUnknownType (UT_PageNum pagenum, const SRC_DATA_T *values) |
template<typename SRC_DATA_T > | |
void | setPageConstantMismatchedType (UT_PageNum pagenum, const SRC_DATA_T *values) |
void | forceHardenTable (IDX_T newcapacity) |
Static Protected Member Functions | |
static SYS_FORCE_INLINE bool | decCounterIffAbove1 (SYS_AtomicCounter &counter) |
static SYS_FORCE_INLINE NotVoidType | getConstant (const PageTableEntry *const page, exint component, exint tuplesize=TSIZE) |
static SYS_FORCE_INLINE const NotVoidType * | getConstantPtr (const PageTableEntry *page, exint component=0, exint tuplesize=TSIZE) |
static SYS_FORCE_INLINE NotVoidType * | getConstantPtr (PageTableEntry *page, exint component=0, exint tuplesize=TSIZE) |
static SYS_FORCE_INLINE void | makeConstant (PageTableEntry *page, const UT_FixedVector< NotVoidType, theSafeTupleSize > &val) |
static void | makeConstant (PageTableEntry *page, const NotVoidType &val, exint tuplesize=TSIZE) |
static void | makeConstant (PageTableEntry *page, const NotVoidType *values, exint tuplesize) |
template<typename SrcType > | |
static void | replacePage (PageTableEntry *dest, const typename SrcType::PageTableEntry *src, exint desttuplesize, exint srctuplesize, UT_PageOff destpagesize, UT_PageOff destpagecapacity) |
template<typename SrcType > | |
static void | copyPartialPage (PageTableEntry *dest, const typename SrcType::PageTableEntry *src, exint desttuplesize, exint srctuplesize, UT_PageOff destoff, UT_PageOff srcoff, UT_PageOff ntuples, UT_PageOff destpagecapacity) |
template<typename SrcType > | |
static void | makeConstantFrom (PageTableEntry *dest, const typename SrcType::PageTableEntry *src, exint desttuplesize, exint srctuplesize) |
template<typename SrcNotVoidType > | |
static void | fillNonConstWithConst (NotVoidType *destpagedata, NotVoidType *destpageend, const SrcNotVoidType *stuple, exint mintuplesize, exint desttupleextra) |
template<typename SrcNotVoidType > | |
static void | copyNonConst (NotVoidType *destpagedata, const SrcNotVoidType *srcpagedata, exint desttuplesize, exint srctuplesize, UT_PageOff ntuples) |
template<typename SrcNotVoidType > | |
static bool | isEqualConst (const NotVoidType *tuple, const SrcNotVoidType *stuple, exint mintuplesize) |
static void | hardenConstantPage (PageTableEntry *page, UT_PageOff pagecapacity, exint tuplesize=TSIZE) |
static void | hardenConstantPageNoInit (PageTableEntry *page, UT_PageOff pagecapacity, exint tuplesize=TSIZE) |
static void | hardenSharedPage (PageTableEntry *page, UT_PageOff pagecapacity, exint tuplesize=TSIZE) |
static void | hardenSharedPageNoInit (PageTableEntry *page, UT_PageOff pagecapacity, exint tuplesize=TSIZE) |
template<typename T > | |
static SYS_FORCE_INLINE bool | isZero (const T &val) |
template<typename T > | |
static SYS_FORCE_INLINE bool | isZero (const T *val, exint tuplesize) |
template<typename T0 , typename T1 > | |
static SYS_FORCE_INLINE bool | isEqual (const T0 *a, const T1 *b, exint tuplesize) |
template<typename DEST_TYPE , typename SRC_TYPE , exint SRC_TSIZE> | |
static SYS_FORCE_INLINE UT_FixedVector< DEST_TYPE, SRC_TSIZE > | convertVectorStorage (const UT_FixedVector< SRC_TYPE, SRC_TSIZE > &src) |
static void | hardenConstantPage (PageTable *pages, PageTableEntry *page) |
static void | hardenConstantPageNoInit (PageTable *pages, PageTableEntry *page) |
static void | hardenConstantPage (PageTable *pages, PageTableEntry *page, exint tuplesize) |
static void | hardenConstantPageNoInit (PageTable *pages, PageTableEntry *page, exint tuplesize) |
static void | hardenSharedPage (PageTable *pages, PageTableEntry *page) |
static void | hardenSharedPageNoInit (PageTable *pages, PageTableEntry *page) |
static void | hardenSharedPage (PageTable *pages, PageTableEntry *page, exint tuplesize) |
static void | hardenSharedPageNoInit (PageTable *pages, PageTableEntry *page, exint tuplesize) |
Friends | |
template<typename DATA_T2 , exint TSIZE2, bool TABLEHARDENED2, bool PAGESHARDENED2, exint THEPAGEBITS2, typename IDX_T2 > | |
class | UT_PageArray |
Definition at line 230 of file UT_PageArray.h.
typedef DATA_T UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::DataType |
Definition at line 246 of file UT_PageArray.h.
typedef IDX_T UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::IndexType |
Definition at line 253 of file UT_PageArray.h.
|
protected |
Definition at line 239 of file UT_PageArray.h.
typedef UT_PageArray<DATA_T,TSIZE,TABLEHARDENED,PAGESHARDENED,THEPAGEBITS,IDX_T> UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::ThisType |
Definition at line 245 of file UT_PageArray.h.
|
inline |
The default constructor can only be used if the tuple size and storage type are known at compile time.
Definition at line 257 of file UT_PageArray.h.
|
inline |
This constructor can only be used if the storage type is known at compile time, but the tuple size is not.
Definition at line 266 of file UT_PageArray.h.
|
inline |
This constructor can only be used if the storage type is known at compile time, but the tuple size is not.
Definition at line 278 of file UT_PageArray.h.
|
inline |
This constructor can only be used if the tuple size and storage type are unknown at compile time.
Definition at line 289 of file UT_PageArray.h.
|
inline |
This just references that's page table, unless TABLEHARDENED or PAGESHARDENED. If TABLEHARDENED and !PAGESHARDENED, the pages are referenced, and if PAGESHARDENED, the pages are copied.
Definition at line 305 of file UT_PageArray.h.
|
inlineexplicit |
Definition at line 312 of file UT_PageArray.h.
|
inline |
Definition at line 319 of file UT_PageArray.h.
|
inline |
component == 0 in this version
Definition at line 630 of file UT_PageArray.h.
|
inline |
Definition at line 645 of file UT_PageArray.h.
|
inline |
Definition at line 737 of file UT_PageArray.h.
|
inline |
Definition at line 907 of file UT_PageArray.h.
|
inline |
This is for setting the TSIZE template after checking getTupleSize(), if TSIZE wasn't already known.
Definition at line 1406 of file UT_PageArray.h.
|
inline |
This is for setting the TSIZE template after checking getTupleSize(), if TSIZE wasn't already known.
Definition at line 1414 of file UT_PageArray.h.
|
inline |
This is for setting the DATA_T template after checking getStorage(), if DATA_T wasn't already known.
Definition at line 1385 of file UT_PageArray.h.
|
inline |
This is for setting the DATA_T template after checking getStorage(), if DATA_T wasn't already known.
Definition at line 1393 of file UT_PageArray.h.
|
inline |
Definition at line 325 of file UT_PageArray.h.
|
inline |
Definition at line 331 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3654 of file UT_PageArray.h.
|
inline |
Copies a single element from src to dest within this.
Definition at line 1058 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::copyNonConst | ( | NotVoidType *__restrict | destpagedata, |
const SrcNotVoidType *__restrict | srcpagedata, | ||
const exint | desttuplesize, | ||
const exint | srctuplesize, | ||
UT_PageOff | ntuples | ||
) |
Definition at line 1692 of file UT_PageArrayImpl.h.
|
staticprotected |
This is just a helper function for copying a non-constant source page to a non-constant destination page, with conversion. NOTE: destpagedata must point to an UNSHARED page's data. NOTE: The two data ranges must be NON-OVERLAPPING.
|
staticprotected |
This replaces part of dest with part of src. It keeps dest constant if easy. If desttuplesize > srctuplesize, it only replaces the first srctuplesize components. This will not check to see if the whole page is being replaced, so if you want the src page to be referenced, or overwrite a constant value, when writing the whole page, use replacePage.
Definition at line 1283 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::countMemory | ( | UT_MemoryCounter & | counter, |
bool | inclusive | ||
) | const |
Count memory usage using a UT_MemoryCounter in order to count shared memory correctly. If inclusive is true, the size of this object is counted, else only memory owned by this object is counted. If this is pointed to by the calling object, inclusive should be true. If this is contained in the calling object, inclusive should be false. (Its memory was already counted in the size of the calling object.) Include UT_PageArrayImpl.h to call this.
Definition at line 469 of file UT_PageArrayImpl.h.
|
inlinestaticprotected |
Definition at line 2668 of file UT_PageArray.h.
|
inline |
NOTE: Don't use this unless you know what you're doing! This is for the case where a non-POD type that requires destruction is masquerading as a POD type in here, e.g. GA_OffsetList as UT_FixedVector<int64,2>. When destroying a page, this first needs to be called. If it returns true, the page was shared, so it was just decRef'd, meaning that the data don't need to be destructed. If it returns false, the page was not shared, so the data need to be destructed before deleting the page.
Definition at line 1780 of file UT_PageArray.h.
|
inline |
NOTE: Don't use this unless you know what you're doing! This is for the case where a non-POD type that requires destruction is masquerading as a POD type in here, e.g. GA_OffsetList as UT_FixedVector<int64,2>. When destroying a table, this first needs to be called. If it returns true, the table was shared, so it was just decRef'd, meaning that the data don't need to be destructed. If it returns false, the table was not shared, so the data need to be destructed before deleting the table.
Definition at line 1757 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::fillNonConstWithConst | ( | NotVoidType *__restrict | destpagedata, |
NotVoidType * | destpageend, | ||
const SrcNotVoidType *__restrict | stuple, | ||
exint | mintuplesize, | ||
exint | desttupleextra | ||
) |
Definition at line 1626 of file UT_PageArrayImpl.h.
|
staticprotected |
This is just a helper function for writing a single source tuple (or nullptr) to a block of tuple data, with conversion. NOTE: destpagedata must point to an UNSHARED page's data.
|
inlineprotected |
Definition at line 3572 of file UT_PageArray.h.
|
inline |
This get function may seem redundant, given operator(), but it gives a simple way to read from a non-const UT_PageArray without calling the non-const operator() and potentially hardening pages. It just explicitly adds const. It also allows data type conversion and reading when the type is unknown at compile time. It should hopefully be inlined in the no-conversion case; it's less critical in the conversion case.
Definition at line 488 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 2691 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: It may seem like overkill to take a PageTableEntry *, but the returned pointer may be inside the pointer that the caller owns, so we need the caller's pointer, not a copy. getConstant doesn't have this issue, since it can use the local pointer and read the value.
Definition at line 2722 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: It may seem like overkill to take a PageTableEntry *, but the returned pointer may be inside the pointer that the caller owns, so we need the caller's pointer, not a copy. getConstant doesn't have this issue, since it can use the local pointer and read the value.
Definition at line 2747 of file UT_PageArray.h.
|
inline |
Only call this if DATA_T is void and you are absolutely, 100% CERTAIN that the storage type is int16, int32, or int64. NOTE: Really! Be careful!
Definition at line 1808 of file UT_PageArray.h.
int64 UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::getMemoryUsage | ( | bool | inclusive | ) | const |
Get the total of all memory referred-to by this. NOTE: This does not handle shared memory correctly. Include UT_PageArrayImpl.h to call this.
Definition at line 438 of file UT_PageArrayImpl.h.
|
inline |
Returns a pointer to the data of a page. WARNING: DO NOT call this if DATA_T is void! The pointer returned can depend on the type. This will return nullptr if the page is constant compressed to zero. If it's non-nullptr and isPageConstant(pagenum) returns true, there will only be one element (tuple) at that address.
Definition at line 1715 of file UT_PageArray.h.
|
inline |
Returns a pointer to the data of a page. WARNING: DO NOT call this if DATA_T is void! The pointer returned can depend on the type. NOTE: DO NOT MODIFY THE DATA if there's any chance the page or the table might be shared. Check isTableHard() and isPageHard(pagenum). This will return nullptr if the page is constant compressed to zero. If it's non-nullptr and isPageConstant(pagenum) returns true, there will only be one element (tuple) at that address.
Definition at line 1736 of file UT_PageArray.h.
|
inline |
Copies nelements from srcstart in this to dest array Include UT_PageArrayImpl.h to call this.
Definition at line 1243 of file UT_PageArray.h.
|
inline |
Definition at line 1426 of file UT_PageArray.h.
|
inline |
Definition at line 1422 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 1880 of file UT_PageArray.h.
|
inline |
Definition at line 498 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2087 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::getVectorRange | ( | IDX_T | srcstart, |
IDX_T | nelements, | ||
UT_FixedVector< DEST_DATA_T, DEST_TSIZE > * | dest | ||
) | const |
Copies nelements from srcstart in this to dest array Include UT_PageArrayImpl.h to call this.
Definition at line 2325 of file UT_PageArrayImpl.h.
|
inlineprotected |
Definition at line 2057 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2017 of file UT_PageArray.h.
|
inline |
This forces all pages to be hardened, optionally including pages that are in the capacity but outside the size.
Definition at line 1317 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2124 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3039 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3522 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3534 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3073 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3528 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3540 of file UT_PageArray.h.
|
inline |
Hardens the specified page if it is constant-compressed or shared. It returns a pointer to the data, but it will only be the correct type if DATA_T is not void.
Definition at line 1600 of file UT_PageArray.h.
|
inline |
Definition at line 1620 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3088 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3546 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3558 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3106 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3552 of file UT_PageArray.h.
|
inlinestaticprotected |
NOTE: These have to be below the PageTable class definition, because for no apparent reason, even though you can have a regular local variable of type PageTable before, you can't have a function parameter of type PageTable before. sigh
Definition at line 3564 of file UT_PageArray.h.
|
inline |
This ensures that the table itself is not shared. It's a good idea to do this before writing, to avoid having to check every time. Remember to use the returned reference, since it records in the template that it doesn't need to be hardened again. It should be a no-op if TABLEHARDENED is already true.
Definition at line 1303 of file UT_PageArray.h.
bool UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::hasNanInRange | ( | IDX_T | start, |
IDX_T | end | ||
) | const |
Returns true iff there is at least one NaN value in the given range. Include UT_PageArrayImpl.h to call this.
Definition at line 2449 of file UT_PageArrayImpl.h.
|
inline |
Returns true iff the entire array is constant & zero.
Definition at line 1440 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3639 of file UT_PageArray.h.
|
staticprotected |
This is just a helper function for checking whether two constant pages are equal, up to the smaller of the two, to see if writing is necessary.
Definition at line 1758 of file UT_PageArrayImpl.h.
|
inline |
Returns true iff the specified page is constant-compressed.
Definition at line 1432 of file UT_PageArray.h.
|
inline |
Returns true iff the specified page is "hard", i.e. NOT constant-compressed and NOT shared. NOTE: The table may or may not be hard.
Definition at line 1587 of file UT_PageArray.h.
|
inline |
Returns true iff the table isn't shared with any other UT_PageArray's.
Definition at line 1288 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3609 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 3620 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 2751 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 2822 of file UT_PageArray.h.
|
inlinestaticprotected |
Definition at line 2910 of file UT_PageArray.h.
|
staticprotected |
This version of makeConstant copies a const page onto this page, converting type if necessary, and supporting a different tuple size, so long as the destination size either isn't larger or is constant. NOTE: This would be templated on the actual templates of UT_PageArray, but somehow, Visual C++ can't deduce the type, so the template type has to be specified by the caller, and one argument is much easier to specify on every call than 4.
Definition at line 1400 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::moveRange | ( | IDX_T | srcstart, |
IDX_T | deststart, | ||
IDX_T | nelements | ||
) |
Copies the nelements from srcstart to deststart The two ranges are allowed to overlap. Include UT_PageArrayImpl.h to call this.
Definition at line 568 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::moveRange | ( | const UT_PageArray< SRC_DATA_T, SRC_TSIZE, SRC_TABLEHARDENED, SRC_PAGESHARDENED, THEPAGEBITS, IDX_T > & | src, |
IDX_T | srcstart, | ||
IDX_T | deststart, | ||
IDX_T | nelements | ||
) |
Copies the nelements from fromstart in src to tostart in this. The two ranges are allowed to overlap, even if &src==this. Include UT_PageArrayImpl.h to call this.
Definition at line 581 of file UT_PageArrayImpl.h.
|
inlinestatic |
Definition at line 1274 of file UT_PageArray.h.
|
inline |
Definition at line 650 of file UT_PageArray.h.
|
inline |
Read element i's specified component (default component 0).
Definition at line 445 of file UT_PageArray.h.
|
inline |
Get a non-const reference to element i's specified component (default component 0). WARNING: DO NOT call this if DATA_T is void! NOTE: Unlike set(), this must always harden, even if you're just writing a value that is already there.
Definition at line 581 of file UT_PageArray.h.
|
inline |
NOTE: Compilers seem not to use the operator= below when the template arguments match, so this operator= is necessary in order to avoid the compiler silently using its implicitly-defined assignment operator.
Definition at line 375 of file UT_PageArray.h.
|
inline |
Definition at line 383 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 1959 of file UT_PageArray.h.
|
inline |
This looks gigantic, but it's mostly because of the different behaviour for different template values. If PAGESHARDENED is true, it'll skip checking for constant or shared pages altogether.
Definition at line 747 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 1988 of file UT_PageArray.h.
|
inlinestatic |
Definition at line 1270 of file UT_PageArray.h.
|
inlinestatic |
Definition at line 1278 of file UT_PageArray.h.
|
inlinestatic |
Definition at line 1282 of file UT_PageArray.h.
|
inline |
Completely replace this UT_PageArray with that, referencing the pages or table, if allowed by the template arguments.
Definition at line 392 of file UT_PageArray.h.
|
staticprotected |
This replaces dest with src. It references if possible and keeps dest constant if easy. If desttuplesize > srctuplesize, it only replaces the first srctuplesize components.
Definition at line 1200 of file UT_PageArrayImpl.h.
|
inlinestatic |
This helper function forces a (non-negative) capacity to be an acceptable value: either A) a power of two less than a full page in size, or B) a multiple of the page size.
Definition at line 920 of file UT_PageArray.h.
|
inline |
component == 0 in this version
Definition at line 624 of file UT_PageArray.h.
|
inline |
This looks gigantic, but it's mostly because of the different behaviour for different template values. If PAGESHARDENED is true, it'll skip checking for constant or shared pages altogether.
Definition at line 640 of file UT_PageArray.h.
|
inline |
Definition at line 935 of file UT_PageArray.h.
|
inline |
Definition at line 948 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setConstant | ( | IDX_T | start, |
IDX_T | end, | ||
NotVoidType | v | ||
) |
Set all of the values in the range [start,end) to v. This will constant-compress pages if allowed and the pages are completely overwritten with the given value. This version of setConstant only works if DATA_T is a numeric type. If the tuple size is > 1, it will write v to all components.
Definition at line 112 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setConstant | ( | IDX_T | start, |
IDX_T | end, | ||
const UT_FixedVector< NotVoidType, theSafeTupleSize > & | v | ||
) |
Set all of the values in the range [start,end) to v. This will constant-compress pages if allowed and the pages are completely overwritten with the given value. This version of setConstant only works if DATA_T is a numeric type and TSIZE >= 1.
Definition at line 135 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setConstant | ( | IDX_T | start, |
IDX_T | end, | ||
const UT_Defaults & | v | ||
) |
Set all of the values in the range [start,end) to v. This will constant-compress pages if allowed and the pages are completely overwritten with the given value.
Definition at line 155 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setConstant | ( | IDX_T | start, |
IDX_T | end, | ||
const SRC_T * | values | ||
) |
Set all of the values in the range [start,end) to the tuple in values. values must have length equal to getTupleSize(). This will constant-compress pages if allowed and the pages are completely overwritten with the given value.
Definition at line 243 of file UT_PageArrayImpl.h.
|
inline |
Sets all components of all elements of the specified page to the given value.
Definition at line 1460 of file UT_PageArray.h.
|
inline |
Sets all components of all elements of the specified page to the given value.
Definition at line 1478 of file UT_PageArray.h.
|
inline |
Sets all components of all elements of the specified page to the given values. NOTE: The length of values must be equal to the tuple size.
Definition at line 1536 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2272 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2212 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2242 of file UT_PageArray.h.
|
inline |
Copies nelements from src array to deststart in this Include UT_PageArrayImpl.h to call this.
Definition at line 1253 of file UT_PageArray.h.
|
inline |
Sets the size of the array without initializing any added elements.
Definition at line 959 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setSize | ( | IDX_T | newsize, |
NotVoidType | initval | ||
) |
Sets the size of the array and initializes any new elements to initval. This version of setSize only works if DATA_T is a numeric type. If the tuple size is > 1, it will write initval to all components. Include UT_PageArrayImpl.h to call this.
Definition at line 30 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setSize | ( | IDX_T | newsize, |
const UT_FixedVector< NotVoidType, theSafeTupleSize > & | initval | ||
) |
Sets the size of the array and initializes any new elements to initval. This version of setSize only works if DATA_T is a numeric type and TSIZE >= 1. Include UT_PageArrayImpl.h to call this.
Definition at line 60 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setSize | ( | IDX_T | newsize, |
const UT_Defaults & | initval | ||
) |
Sets the size of the array and initializes any new elements to initval. Include UT_PageArrayImpl.h to call this.
Definition at line 86 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setStorage | ( | const UT_Storage | newstorage | ) |
Changes the storage type and converts the data to the new type. NOTE: This only makes sense if DATA_T is void and newstorage is something other than INVALID. Include UT_PageArrayImpl.h to call this.
Definition at line 311 of file UT_PageArrayImpl.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setTupleSize | ( | exint | newtuplesize, |
const UT_Defaults & | v | ||
) |
Changes the tuple size, and if the new size is larger, pads with values from the UT_Defaults. NOTE: This only makes sense if TSIZE == -1. Include UT_PageArrayImpl.h to call this.
Definition at line 375 of file UT_PageArrayImpl.h.
|
inline |
Definition at line 731 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::setVectorRange | ( | IDX_T | deststart, |
IDX_T | nelements, | ||
const UT_FixedVector< SRC_DATA_T, SRC_TSIZE > * | src | ||
) |
Copies nelements from src array to deststart in this Include UT_PageArrayImpl.h to call this.
Definition at line 2385 of file UT_PageArrayImpl.h.
|
inline |
Definition at line 899 of file UT_PageArray.h.
void UT_PageArray< DATA_T, TSIZE, TABLEHARDENED, PAGESHARDENED, THEPAGEBITS, IDX_T >::swapRange | ( | IDX_T | astart, |
IDX_T | bstart, | ||
IDX_T | nelements | ||
) |
Swaps the nelements at astart with the nelements at bstart. The two ranges must be non-overlapping, else swapping is ill-defined. Include UT_PageArrayImpl.h to call this.
Definition at line 1148 of file UT_PageArrayImpl.h.
|
inline |
Definition at line 1350 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2153 of file UT_PageArray.h.
|
inline |
Checks if the specified page is all a single value, and if so, makes it a constant page.
Definition at line 1682 of file UT_PageArray.h.
|
inlineprotected |
Definition at line 2182 of file UT_PageArray.h.
|
inline |
If the specified page is constant and shared, (only relevant for nonzero tuples that are at least the size of a pointer), this keeps the page constant, but unshares it, so that the constant value can be modified. NOTE: This should ONLY be called on constant pages! Check isPageConstant(pagenum).
Definition at line 1646 of file UT_PageArray.h.
|
friend |
Definition at line 243 of file UT_PageArray.h.
|
static |
Definition at line 250 of file UT_PageArray.h.
|
static |
Definition at line 252 of file UT_PageArray.h.
|
static |
Definition at line 251 of file UT_PageArray.h.
|
static |
Definition at line 249 of file UT_PageArray.h.
|
static |
Definition at line 247 of file UT_PageArray.h.
|
static |
Definition at line 248 of file UT_PageArray.h.