A dynamic list of packed unsigned integers, with the number of bits per item specified by the <Width> template parameter. More...
Classes | |
struct | hasher |
Hashing functor for PackedList. More... | |
class | reference |
A reference supporting read/write access to an entry. More... | |
Public Types | |
typedef unsigned int | block_type |
The storage block type for bit elements. More... | |
typedef unsigned int | const_reference |
Public Member Functions | |
constexpr | PackedList () noexcept |
Default construct, zero-sized and no allocation. More... | |
PackedList (const label numElem) | |
Construct for given number of elements, initializes values to 0. More... | |
PackedList (const label numElem, const unsigned int val) | |
PackedList (Istream &is) | |
Construct from Istream. More... | |
PackedList (const PackedList< Width > &list) | |
Copy construct. More... | |
PackedList (PackedList< Width > &&list) | |
Move construct. More... | |
PackedList (const PackedList< Width > &list, const labelUList &addr) | |
Copy construct a subset. More... | |
template<class Addr > | |
PackedList (const PackedList< Width > &list, const IndirectListBase< label, Addr > &addr) | |
Copy construct a subset. More... | |
PackedList (const PackedList< Width > &list, const labelRange &range) | |
Copy construct a subset range. More... | |
PackedList (const labelUList &values) | |
Construct from a list of values. More... | |
template<class Addr > | |
PackedList (const IndirectListBase< label, Addr > &values) | |
Construct from a indirect list of values. More... | |
autoPtr< PackedList< Width > > | clone () const |
Clone. More... | |
void | checkIndex (const label i) const |
Check index is within valid range [0,size) More... | |
label | size () const noexcept |
Number of entries. More... | |
bool | empty () const noexcept |
True if the list is empty (ie, size() is zero). More... | |
label | capacity () const noexcept |
The number of elements that can be stored with reallocating. More... | |
bool | uniform () const |
True if all entries have identical values, and list is non-empty. More... | |
bool | equal (const PackedList< Width > &other) const |
Test for equality of sizes and the bits set. More... | |
unsigned int | get (const label i) const |
Get value at index i or 0 for out-of-range. More... | |
bool | set (const label i, unsigned int val=~0u) |
Set value at index i, default value set is the max_value. More... | |
bool | unset (const label i) |
Unset the entry at index i. More... | |
labelList | values () const |
Return the values as a list of labels. More... | |
template<class IntType = unsigned int> | |
List< IntType > | unpack () const |
Return the values as a list of integral type. More... | |
template<class IntType = unsigned int> | |
List< IntType > | unpack (const labelRange &range) const |
Return the range of values as a list of integral type. More... | |
template<class IntType = unsigned int> | |
List< IntType > | unpack (const labelUList &locations) const |
void | fill (const unsigned int val) |
Assign all entries to the given value. More... | |
bool | trim (label minpos=-1) |
void | reset () |
Clear all bits but do not adjust the addressable size. More... | |
void | setCapacity (const label numElem) |
Alter the size of the underlying storage. More... | |
void | resize (const label numElem, const unsigned int val=0u) |
Reset addressable list size, does not shrink the allocated size. More... | |
void | resize_nocopy (const label numElem) |
Currently identical to resize. Subject to future change (Oct-2021) More... | |
void | reserve (const label numElem) |
Reserve allocation space for at least this size. More... | |
void | clear () |
Clear the list, i.e. set addressable size to zero. More... | |
void | clearStorage () |
Clear the list and delete storage. More... | |
void | shrink () |
Shrink the allocated space to what is actually used. More... | |
void | swap (PackedList< Width > &rhs) |
Swap contents with argument. More... | |
void | transfer (PackedList< Width > &rhs) |
label | nBlocks () const |
The number of internal storage blocks. More... | |
const List< unsigned int > & | storage () const |
Return the underlying storage blocks. More... | |
List< unsigned int > & | storage () |
Return the underlying storage blocks. More... | |
const unsigned int * | cdata () const noexcept |
A const pointer to the raw storage. More... | |
unsigned int * | data () noexcept |
A pointer to the raw storage. More... | |
const char * | cdata_bytes () const noexcept |
A const pointer to the raw storage, reinterpreted as byte data. More... | |
char * | data_bytes () noexcept |
A pointer to the raw storage, reinterpreted as byte data. More... | |
std::streamsize | size_bytes () const noexcept |
std::streamsize | byteSize () const noexcept |
Ostream & | printBits (Ostream &os, bool debugOutput=false) const |
Print bit patterns, optionally with extra debug. More... | |
Istream & | readList (Istream &is) |
Clear list and read from stream. More... | |
Ostream & | writeList (Ostream &os, const label shortLen=0) const |
Write List, with line-breaks in ASCII when length exceeds shortLen. More... | |
void | writeEntry (const word &keyword, Ostream &os) const |
Write as a dictionary entry with keyword. More... | |
PackedList< Width > & | append (const unsigned int val) |
Append a value at the end of the list. More... | |
unsigned int | remove () |
Remove and return the last element. More... | |
unsigned int | operator[] (const label i) const |
Identical to get() - get value at index. More... | |
reference | operator[] (const label i) |
Non-const access to value at index. More... | |
void | operator= (const PackedList< Width > &lst) |
Copy assignment. More... | |
void | operator= (PackedList< Width > &&lst) |
Move assignment. More... | |
void | operator= (const unsigned int val) |
Assign all entries to the given value. fill() More... | |
InfoProxy< PackedList< Width > > | info () const |
Return info proxy. More... | |
void | assign (const unsigned int val) |
Deprecated(2020-11) use fill() More... | |
void | assign (const PackedList< Width > &rhs) |
Deprecated(2020-11) use operator=. More... | |
void | setSize (const label n, unsigned int val=0u) |
Alias for resize() More... | |
template<class IntType > | |
Foam::List< IntType > | unpack () const |
template<class IntType > | |
Foam::List< IntType > | unpack (const labelRange &range) const |
template<class IntType > | |
Foam::List< IntType > | unpack (const labelUList &locations) const |
Static Public Member Functions | |
static constexpr label | num_blocks (label numElem) noexcept |
static constexpr block_type | mask_lower (unsigned elementOffset) |
Masking for all bits below the element offset. More... | |
Static Public Attributes | |
static constexpr unsigned | bits_per_block = (std::numeric_limits<block_type>::digits) |
The number of bits in a single block. More... | |
static constexpr unsigned | element_width = (Width) |
The width of an individual element (in bits). More... | |
static constexpr unsigned | elem_per_block = (bits_per_block / Width) |
The number of elements stored per data block. More... | |
static constexpr block_type | max_value = ((1u << Width) - 1) |
Protected Types | |
typedef List< block_type > | block_container |
The internal container for storing the blocks. More... | |
Protected Member Functions | |
void | setPair (Istream &is) |
Read an index/value pair and set accordingly. More... | |
void | writeEntry (Ostream &os) const |
Write as a dictionary entry. More... | |
void | clear_trailing_bits () |
Clear any partial rubbish in the last addressable block. More... | |
void | copyAssign (const PackedList< Width > &rhs) |
Copy assignment. More... | |
template<> | |
unsigned int | repeated_value (unsigned val) |
template<> | |
unsigned int | readValue (Istream &is) |
template<> | |
void | setPair (Istream &is) |
Static Protected Member Functions | |
static unsigned int | repeated_value (unsigned val) |
A fill value for complete blocks. More... | |
static unsigned int | readValue (Istream &is) |
Read a list entry (allows for specialization) More... | |
Protected Attributes | |
block_container | blocks_ |
The blocks of raw data. More... | |
label | size_ |
Number of entries used. More... | |
Friends | |
Ostream & | operator (Ostream &os, const InfoProxy< PackedList< Width >> &info) |
Istream & | operator>> (Istream &is, PackedList< Width > &list) |
A dynamic list of packed unsigned integers, with the number of bits per item specified by the <Width> template parameter.
Resizing is similar to DynamicList so that clear() and resize() affect the addressed size, but not the allocated size. The reserve() and setCapacity() methods can be used to influence the allocation.
In a non-const context, the '[]' operator returns a reference to an existing value. When accessing out-of-range elements, some caution is required to ensure that the const version of the [] operator is actually being called. The get() method is functionally identical the the '[]' operator, but is always const access.
The set() and unset() methods return a bool if the value changed.
With const access, the get() method and 'operator[]' are identical. With non-const access, the 'operator[]' may be marginally slower get().
The set() method may be marginally faster than using the 'operator[]' supports auto-vivification and also returns a bool if the value changed, which can be useful for branching on changed values.
In a const context, reading an out-of-range element returns zero without affecting the list size. For example,
Also note that all unused internal storage elements are guaranteed to always be bit-wise zero. This property must not be violated by any inheriting classes.
Definition at line 108 of file PackedList.H.
typedef unsigned int block_type |
The storage block type for bit elements.
Definition at line 136 of file PackedList.H.
|
protected |
The internal container for storing the blocks.
Definition at line 181 of file PackedList.H.
typedef unsigned int const_reference |
Definition at line 228 of file PackedList.H.
|
inlineconstexprnoexcept |
Default construct, zero-sized and no allocation.
Definition at line 177 of file PackedListI.H.
|
inlineexplicit |
Construct for given number of elements, initializes values to 0.
Definition at line 185 of file PackedListI.H.
|
inline |
Construct for given number of elements, and the specified value for each element
Definition at line 194 of file PackedListI.H.
|
inline |
Construct from Istream.
Definition at line 210 of file PackedListI.H.
|
inline |
Copy construct.
Definition at line 220 of file PackedListI.H.
|
inline |
Move construct.
Definition at line 228 of file PackedListI.H.
PackedList | ( | const PackedList< Width > & | list, |
const labelUList & | addr | ||
) |
Copy construct a subset.
Definition at line 35 of file PackedList.C.
PackedList | ( | const PackedList< Width > & | list, |
const IndirectListBase< label, Addr > & | addr | ||
) |
Copy construct a subset.
Definition at line 54 of file PackedList.C.
PackedList | ( | const PackedList< Width > & | list, |
const labelRange & | range | ||
) |
Copy construct a subset range.
Definition at line 72 of file PackedList.C.
|
inlineexplicit |
Construct from a list of values.
Definition at line 238 of file PackedListI.H.
|
inlineexplicit |
Construct from a indirect list of values.
Definition at line 259 of file PackedListI.H.
|
inlinestaticconstexprnoexcept |
Calculate the number of blocks required to _address_ the requested number of elements.
We calculate this:
But avoiding the modulus operation
Definition at line 163 of file PackedList.H.
Referenced by PackedList< 2 >::fill(), PackedList< 2 >::nBlocks(), PackedList< 2 >::reserve(), PackedList< 2 >::resize(), PackedList< 2 >::setCapacity(), PackedList< 2 >::shrink(), and PackedList< 2 >::size_bytes().
|
inlinestaticconstexpr |
Masking for all bits below the element offset.
Ill-defined when elementOffset is out of range.
Definition at line 170 of file PackedList.H.
Referenced by PackedList< 2 >::resize().
|
inlinestaticprotected |
A fill value for complete blocks.
Enforce non-zero Width to fit within the block storage and require at least 2 items per storage block for general efficiency.
Thus 1/2 of the base storage size is (sizeof(block_type)*8/2), or (sizeof(block_type) << 2)
Definition at line 34 of file PackedListI.H.
Referenced by PackedList< 2 >::fill(), and PackedList< 2 >::resize().
|
inlinestaticprotected |
Read a list entry (allows for specialization)
Definition at line 41 of file PackedListI.H.
Referenced by PackedList< 2 >::readList().
|
inlineprotected |
Read an index/value pair and set accordingly.
For bool specialization, read a single index value
Definition at line 58 of file PackedListI.H.
Referenced by PackedList< 2 >::readList().
|
protected |
Write as a dictionary entry.
Definition at line 34 of file PackedListIO.C.
|
inlineprotected |
Clear any partial rubbish in the last addressable block.
This rubbish may have arisen from block-wise operations etc.
Definition at line 83 of file PackedListI.H.
Referenced by PackedList< 2 >::fill(), PackedList< 2 >::resize(), and PackedList< 2 >::setCapacity().
|
inlineprotected |
Copy assignment.
Definition at line 142 of file PackedListI.H.
Referenced by PackedList< 2 >::operator=().
|
inline |
Clone.
Definition at line 281 of file PackedListI.H.
|
inline |
Check index is within valid range [0,size)
Definition at line 359 of file PackedListI.H.
Referenced by PackedList< 2 >::operator[]().
|
inlinenoexcept |
Number of entries.
Definition at line 377 of file PackedListI.H.
Referenced by bitSet::andEq(), PackedList< 2 >::append(), Foam::apply(), bitSet::bound(), meshRefinement::calculateEdgeWeights(), primitiveMesh::checkClosedBoundary(), PackedList< 2 >::equal(), bitSet::extend(), PackedList< 2 >::fill(), meshRefinement::gAverage(), PackedList< 2 >::get(), Foam::inplaceSubset(), bitSet::intersects(), Foam::invert(), bitSet::minusEq(), PackedList< 2 >::nBlocks(), PackedList< Width >::hasher::operator()(), Foam::operator<<(), bitSet::orEq(), PackedList< 2 >::remove(), PackedList< 2 >::resize(), PackedList< 2 >::set(), PackedList< 2 >::setCapacity(), PackedList< 2 >::shrink(), PackedList< 2 >::size_bytes(), syncTools::syncEdgeList(), syncTools::syncFaceList(), syncTools::syncPointList(), PackedList< 2 >::unset(), meshRefinement::weightedSum(), PackedList< 2 >::writeList(), and bitSet::xorEq().
|
inlinenoexcept |
True if the list is empty (ie, size() is zero).
Definition at line 384 of file PackedListI.H.
Referenced by bitSet::andEq(), ensightMesh::correct(), PackedList< 2 >::fill(), bitSet::minusEq(), bitSet::orEq(), and bitSet::xorEq().
|
inlinenoexcept |
The number of elements that can be stored with reallocating.
Definition at line 391 of file PackedListI.H.
Referenced by Foam::operator<<().
True if all entries have identical values, and list is non-empty.
Definition at line 93 of file PackedList.C.
Referenced by PackedList< 2 >::writeList().
bool equal | ( | const PackedList< Width > & | other | ) | const |
Test for equality of sizes and the bits set.
Definition at line 152 of file PackedList.C.
Referenced by Foam::operator!=(), and Foam::operator==().
|
inline |
Get value at index i or 0 for out-of-range.
Never auto-vivify entries.
Definition at line 630 of file PackedListI.H.
Referenced by bitSet::bitSet(), PackedList< Width >::reference::operator unsigned int(), PackedList< 2 >::operator[](), PackedList< 2 >::PackedList(), and PackedList< 2 >::writeList().
|
inline |
Set value at index i, default value set is the max_value.
Does auto-vivify for non-existent, non-zero entries.
Definition at line 653 of file PackedListI.H.
Referenced by PackedList< Width >::reference::operator=(), PackedList< 2 >::readList(), and syncTools::syncFaceList().
|
inline |
Unset the entry at index i.
Never auto-vivify entries.
Definition at line 684 of file PackedListI.H.
Foam::labelList values | ( | ) | const |
Return the values as a list of labels.
Definition at line 175 of file PackedList.C.
List<IntType> unpack | ( | ) | const |
Return the values as a list of integral type.
The default integral type is unsigned int.
List<IntType> unpack | ( | const labelRange & | range | ) | const |
Return the range of values as a list of integral type.
The default integral type is unsigned int.
List<IntType> unpack | ( | const labelUList & | locations | ) | const |
Extract the values for the specified locations as a list of integral type.
The default integral type is unsigned int.
|
inline |
Assign all entries to the given value.
Definition at line 728 of file PackedListI.H.
Referenced by PackedList< 2 >::operator=().
|
inline |
Trim any trailing zero elements, optionally specifying a a minimum position, below which trimming will not occur.
Definition at line 97 of file PackedListI.H.
|
inline |
Clear all bits but do not adjust the addressable size.
Definition at line 505 of file PackedListI.H.
Referenced by dynamicRefineFvMesh::calculateProtectedCells(), PackedList< 2 >::clear(), codeStream::getFunction(), dynamicMultiMotionSolverFvMesh::init(), and topoBitSet::reset().
|
inline |
Alter the size of the underlying storage.
The addressed size will be truncated if needed to fit, but will remain otherwise untouched.
Definition at line 471 of file PackedListI.H.
|
inline |
Reset addressable list size, does not shrink the allocated size.
Optionally specify a value for new elements.
Definition at line 409 of file PackedListI.H.
Referenced by dynamicRefineFvMesh::calculateProtectedCells(), cuttingSurfaceBase::cellSelection(), fvMeshSubsetProxy::correct(), ensightMesh::correct(), dynamicMultiMotionSolverFvMesh::init(), isoSurfaceTopo::isoSurfaceTopo(), PatchTools::matchEdges(), cuttingSurfaceBase::performCut(), PackedList< 2 >::readList(), PackedList< 2 >::remove(), PackedList< 2 >::resize_nocopy(), PackedList< 2 >::set(), PackedList< 2 >::setSize(), Foam::simpleGeometricFilter(), and topoBitSet::topoBitSet().
|
inline |
Currently identical to resize. Subject to future change (Oct-2021)
Definition at line 399 of file PackedListI.H.
|
inline |
Reserve allocation space for at least this size.
Never shrinks the allocated size. The list size is adjusted as per DynamicList with SizeInc=0, SizeMult=2, SizeDiv=1
Definition at line 486 of file PackedListI.H.
Referenced by PackedList< 2 >::append(), and PackedList< 2 >::resize().
|
inline |
Clear the list, i.e. set addressable size to zero.
Does not adjust the underlying storage
Definition at line 512 of file PackedListI.H.
Referenced by dynamicRefineFvMesh::calculateProtectedCells(), and PackedList< 2 >::readList().
|
inline |
Clear the list and delete storage.
Definition at line 520 of file PackedListI.H.
Referenced by ensightMesh::correct(), distanceSurface::createGeometry(), distanceSurface::filterKeepLargestRegion(), distanceSurface::filterKeepNearestRegions(), and distanceSurface::filterRegionProximity().
|
inline |
Shrink the allocated space to what is actually used.
Definition at line 528 of file PackedListI.H.
|
inline |
Swap contents with argument.
Definition at line 603 of file PackedListI.H.
Referenced by bitSet::swap().
|
inline |
Transfer the contents of the argument list into this list and annul the argument list.
Definition at line 616 of file PackedListI.H.
Referenced by PackedList< 2 >::operator=(), and bitSet::transfer().
|
inline |
The number of internal storage blocks.
Definition at line 554 of file PackedListI.H.
|
inline |
Return the underlying storage blocks.
Definition at line 547 of file PackedListI.H.
|
inline |
Return the underlying storage blocks.
Manipulate with utmost caution
Definition at line 540 of file PackedListI.H.
|
inlinenoexcept |
A const pointer to the raw storage.
Definition at line 561 of file PackedListI.H.
Referenced by PackedList< Width >::hasher::operator()().
|
inlinenoexcept |
A pointer to the raw storage.
Definition at line 568 of file PackedListI.H.
|
inlinenoexcept |
A const pointer to the raw storage, reinterpreted as byte data.
Definition at line 575 of file PackedListI.H.
Referenced by syncTools::syncFaceList(), and PackedList< 2 >::writeList().
|
inlinenoexcept |
A pointer to the raw storage, reinterpreted as byte data.
Definition at line 582 of file PackedListI.H.
Referenced by PackedList< 2 >::readList(), and syncTools::syncFaceList().
|
inlinenoexcept |
The number of bytes used in the raw storage including any unused padding.
Definition at line 589 of file PackedListI.H.
Referenced by PackedList< 2 >::byteSize(), PackedList< Width >::hasher::operator()(), PackedList< 2 >::readList(), syncTools::syncFaceList(), and PackedList< 2 >::writeList().
|
inlinenoexcept |
The number of bytes used in the raw storage including any unused padding.
Definition at line 596 of file PackedListI.H.
Foam::Ostream & printBits | ( | Ostream & | os, |
bool | debugOutput = false |
||
) | const |
Print bit patterns, optionally with extra debug.
Definition at line 44 of file PackedListIO.C.
Foam::Istream & readList | ( | Istream & | is | ) |
Clear list and read from stream.
Definition at line 64 of file PackedListIO.C.
Foam::Ostream & writeList | ( | Ostream & | os, |
const label | shortLen = 0 |
||
) | const |
Write List, with line-breaks in ASCII when length exceeds shortLen.
Using '0' suppresses line-breaks entirely.
Definition at line 179 of file PackedListIO.C.
Referenced by Foam::operator<<().
Write as a dictionary entry with keyword.
Definition at line 244 of file PackedListIO.C.
|
inline |
Append a value at the end of the list.
Definition at line 697 of file PackedListI.H.
Referenced by PackedList< 2 >::readList().
|
inline |
Remove and return the last element.
Definition at line 709 of file PackedListI.H.
|
inline |
Identical to get() - get value at index.
Never auto-vivify entries.
Definition at line 755 of file PackedListI.H.
|
inline |
Non-const access to value at index.
Fatal for out-of-range indices
Definition at line 763 of file PackedListI.H.
|
inline |
Copy assignment.
Definition at line 773 of file PackedListI.H.
Referenced by bitSet::operator=().
|
inline |
Move assignment.
Definition at line 780 of file PackedListI.H.
|
inline |
Assign all entries to the given value. fill()
Definition at line 787 of file PackedListI.H.
|
inline |
Return info proxy.
Definition at line 511 of file PackedList.H.
|
inline |
Deprecated(2020-11) use fill()
Definition at line 551 of file PackedList.H.
|
inline |
Deprecated(2020-11) use operator=.
Definition at line 555 of file PackedList.H.
|
inline |
Alias for resize()
Definition at line 558 of file PackedList.H.
Referenced by distributedTriSurfaceMesh::getVolumeType(), and meshRefinement::markOutsideFaces().
Foam::List<IntType> unpack | ( | ) | const |
Definition at line 184 of file PackedList.C.
Foam::List<IntType> unpack | ( | const labelRange & | range | ) | const |
Definition at line 236 of file PackedList.C.
Foam::List<IntType> unpack | ( | const labelUList & | locations | ) | const |
Definition at line 270 of file PackedList.C.
|
inlineprotected |
Definition at line 156 of file PackedListI.H.
|
inlineprotected |
Definition at line 161 of file PackedListI.H.
|
inlineprotected |
Definition at line 166 of file PackedListI.H.
|
friend |
|
friend |
|
staticconstexpr |
The number of bits in a single block.
Definition at line 141 of file PackedList.H.
|
staticconstexpr |
The width of an individual element (in bits).
Definition at line 144 of file PackedList.H.
|
staticconstexpr |
The number of elements stored per data block.
Definition at line 147 of file PackedList.H.
Referenced by PackedList< 2 >::capacity(), and PackedList< 2 >::resize().
|
staticconstexpr |
The max value for an element which is also the bit-mask of the individual element.
Eg, for Width=2: ((1 << 2) - 1) == 0b0011
Definition at line 152 of file PackedList.H.
Referenced by PackedList< Width >::reference::get(), and PackedList< Width >::reference::set().
|
protected |
The blocks of raw data.
Definition at line 184 of file PackedList.H.
Referenced by bitSet::andEq(), PackedList< 2 >::capacity(), PackedList< 2 >::cdata(), PackedList< 2 >::cdata_bytes(), PackedList< 2 >::clearStorage(), PackedList< 2 >::copyAssign(), PackedList< 2 >::data(), PackedList< 2 >::data_bytes(), PackedList< 2 >::equal(), PackedList< 2 >::fill(), bitSet::intersects(), bitSet::minusEq(), bitSet::orEq(), PackedList< 2 >::reserve(), PackedList< 2 >::reset(), PackedList< 2 >::resize(), PackedList< 2 >::setCapacity(), PackedList< 2 >::shrink(), PackedList< 2 >::storage(), PackedList< 2 >::swap(), PackedList< 2 >::transfer(), and bitSet::xorEq().
|
protected |
Number of entries used.
Definition at line 187 of file PackedList.H.
Referenced by PackedList< 2 >::append(), PackedList< 2 >::checkIndex(), PackedList< 2 >::clear(), PackedList< 2 >::clearStorage(), PackedList< 2 >::copyAssign(), PackedList< 2 >::empty(), PackedList< 2 >::get(), PackedList< 2 >::resize(), PackedList< 2 >::set(), PackedList< 2 >::setCapacity(), PackedList< 2 >::size(), PackedList< 2 >::swap(), and PackedList< 2 >::transfer().