PackedList.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2017-2021 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 Class
28  Foam::PackedList
29 
30 Description
31  A dynamic list of packed unsigned integers, with the number of bits
32  per item specified by the <Width> template parameter.
33 
34  Resizing is similar to DynamicList so that clear() and resize() affect
35  the addressed size, but not the allocated size. The reserve() and
36  setCapacity() methods can be used to influence the allocation.
37 
38 Note
39  In a const context, the '[]' operator simply returns the stored value,
40  with out-of-range elements returned as zero.
41 
42  In a non-const context, the '[]' operator returns a reference to an
43  existing value. When accessing out-of-range elements, some caution
44  is required to ensure that the const version of the [] operator is actually
45  being called.
46  The get() method is functionally identical the the '[]' operator, but
47  is always const access.
48 
49  The set() and unset() methods return a bool if the value changed.
50 
51  With const access, the get() method and 'operator[]' are identical.
52  With non-const access, the 'operator[]' may be marginally slower get().
53 
54  The set() method may be marginally faster than using the 'operator[]'
55  supports auto-vivification and also returns a bool if the value changed,
56  which can be useful for branching on changed values.
57 
58  \code
59  list.set(5, 4);
60  changed = list.set(5, 8);
61  if (changed) ...
62  \endcode
63 
64  In a const context, reading an out-of-range element returns zero without
65  affecting the list size.
66  For example,
67  \code
68  list.resize(4);
69  Info<< list.get(10) << "\n"; // print zero, but doesn't adjust list
70  list.set(8); // auto-vivify
71  \endcode
72 
73  Also note that all unused internal storage elements are guaranteed to
74  always be bit-wise zero. This property must not be violated by any
75  inheriting classes.
76 
77 Note
78  Iterators for this class have been intentionally removed, for performance
79  reasons.
80 
81 See also
82  Foam::BitOps
83  Foam::DynamicList
84 
85 SourceFiles
86  PackedListI.H
87  PackedList.C
88  PackedListIO.C
89 
90 \*---------------------------------------------------------------------------*/
91 
92 #ifndef PackedList_H
93 #define PackedList_H
94 
95 #include "BitOps.H"
96 #include "labelList.H"
97 #include "IndirectListBase.H"
98 #include "InfoProxy.H"
99 #include "PackedListCore.H"
100 
101 #include <type_traits>
102 
103 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
104 
105 namespace Foam
106 {
107 
108 // Forward Declarations
109 template<unsigned Width> class PackedList;
110 class labelRange;
111 
112 template<unsigned Width>
114 
115 template<unsigned Width>
117 
118 template<unsigned Width>
120 
121 
122 /*---------------------------------------------------------------------------*\
123  Class PackedList Declaration
124 \*---------------------------------------------------------------------------*/
125 
126 template<unsigned Width>
127 class PackedList
128 :
130 {
131 public:
132 
133  // Types and dimension information
134 
135  //- The storage block type for bit elements
136  // \note Type name compatibility with boost::dynamic_bitset
137  typedef unsigned int block_type;
138 
139  //- The number of bits in a single block
140  // \note Type name compatibility with boost::dynamic_bitset
141  static constexpr unsigned bits_per_block
142  = (std::numeric_limits<block_type>::digits);
143 
144  //- The width of an individual element (in bits).
145  static constexpr unsigned element_width = (Width);
146 
147  //- The number of elements stored per data block.
148  static constexpr unsigned elem_per_block = (bits_per_block / Width);
149 
150  //- The max value for an element which is also the bit-mask of the
151  //- individual element.
152  // Eg, for Width=2: ((1 << 2) - 1) == 0b0011
153  static constexpr block_type max_value = ((1u << Width) - 1);
154 
155  //- Calculate the number of blocks required to _address_ the
156  //- requested number of elements.
157  //
158  // We calculate this:
159  // \code
160  // (numElem / elem_per_block)
161  // + (numElem % elem_per_block) ? 1 : 0
162  // \endcode
163  // But avoiding the modulus operation
164  static constexpr label num_blocks(label numElem) noexcept
165  {
166  return ((numElem - 1 + elem_per_block) / elem_per_block);
167  }
168 
169  //- Masking for all bits below the element offset.
170  // Ill-defined when elementOffset is out of range.
171  static constexpr block_type mask_lower(unsigned elementOffset)
172  {
173  return (~0u >> (bits_per_block - Width * elementOffset));
174  }
175 
176 
177 protected:
178 
179  // Protected Data
180 
181  //- The internal container for storing the blocks
183 
184  //- The blocks of raw data
186 
187  //- Number of entries used
188  label size_;
189 
190  //- Enforce non-zero Width to fit within the block storage and require
191  //- at least 2 items per storage block for general efficiency.
192  //
193  // Thus 1/2 of the base storage size is (sizeof(block_type)*8/2),
194  // or (sizeof(block_type) << 2)
195  static_assert
196  (
197  Width && Width <= (sizeof(block_type) << 2),
198  "Width must be > 0 and minimum of two items per data block"
199  );
200 
201 
202  // Protected Member Functions
203 
204  //- A fill value for complete blocks
205  inline static unsigned int repeated_value(unsigned val);
206 
207  //- Read a list entry (allows for specialization)
208  inline static unsigned int readValue(Istream& is);
209 
210  //- Read an index/value pair and set accordingly.
211  // For bool specialization, read a single index value
212  inline void setPair(Istream& is);
213 
214  //- Write as a dictionary entry
215  void writeEntry(Ostream& os) const;
216 
217  //- Clear any partial rubbish in the last addressable block
218  // This \a rubbish may have arisen from block-wise operations etc.
219  inline void clear_trailing_bits();
220 
221  //- Copy assignment
222  inline void copyAssign(const PackedList<Width>& rhs);
223 
224 
225 public:
226 
227  // Forward declaration of access classes
228 
229  class reference;
230  typedef unsigned int const_reference;
231 
232 
233  // Constructors
234 
235  //- Default construct, zero-sized and no allocation
236  inline constexpr PackedList() noexcept;
237 
238  //- Construct for given number of elements, initializes values to 0
239  inline explicit PackedList(const label numElem);
240 
241  //- Construct for given number of elements, and the specified
242  //- value for each element
243  inline PackedList(const label numElem, const unsigned int val);
244 
245  //- Construct from Istream
246  inline PackedList(Istream& is);
247 
248  //- Copy construct
249  inline PackedList(const PackedList<Width>& list);
250 
251  //- Move construct
252  inline PackedList(PackedList<Width>&& list);
253 
254  //- Copy construct a subset
255  PackedList(const PackedList<Width>& list, const labelUList& addr);
256 
257  //- Copy construct a subset
258  template<class Addr>
259  PackedList
260  (
261  const PackedList<Width>& list,
262  const IndirectListBase<label, Addr>& addr
263  );
264 
265  //- Copy construct a subset range
266  PackedList(const PackedList<Width>& list, const labelRange& range);
267 
268  //- Construct from a list of values
269  inline explicit PackedList(const labelUList& values);
270 
271  //- Construct from a indirect list of values
272  template<class Addr>
273  inline explicit PackedList(const IndirectListBase<label, Addr>& values);
274 
275  //- Clone
276  inline autoPtr<PackedList<Width>> clone() const;
277 
278 
279  // Member Functions
280 
281  // Query
282 
283  //- Check index is within valid range [0,size)
284  inline void checkIndex(const label i) const;
285 
286  //- Number of entries.
287  inline label size() const noexcept;
288 
289  //- True if the list is empty (ie, size() is zero).
290  inline bool empty() const noexcept;
291 
292  //- The number of elements that can be stored with reallocating
293  inline label capacity() const noexcept;
294 
295  //- True if all entries have identical values, and list is non-empty
296  bool uniform() const;
297 
298  //- Test for equality of sizes and the bits set
299  bool equal(const PackedList<Width>& other) const;
300 
301 
302  // Access
303 
304  //- Get value at index i or 0 for out-of-range.
305  // Never auto-vivify entries.
306  inline unsigned int get(const label i) const;
307 
308  //- Set value at index i, default value set is the max_value.
309  // Does auto-vivify for non-existent, non-zero entries.
310  // \return true if value changed.
311  inline bool set(const label i, unsigned int val = ~0u);
312 
313  //- Unset the entry at index i.
314  // Never auto-vivify entries.
315  // \return true if the value changed.
316  inline bool unset(const label i);
317 
318  //- Return the values as a list of labels
319  labelList values() const;
320 
321  //- Return the values as a list of integral type.
322  // The default integral type is unsigned int.
323  template<class IntType = unsigned int>
324  List<IntType> unpack() const;
325 
326  //- Return the range of values as a list of integral type.
327  // The default integral type is unsigned int.
328  template<class IntType = unsigned int>
329  List<IntType> unpack(const labelRange& range) const;
330 
331  //- Extract the values for the specified locations as
332  //- a list of integral type.
333  // The default integral type is unsigned int.
334  template<class IntType = unsigned int>
335  List<IntType> unpack(const labelUList& locations) const;
336 
337 
338  // Edit
339 
340  //- Assign all entries to the given value.
341  inline void fill(const unsigned int val);
342 
343  //- Trim any trailing zero elements, optionally specifying a
344  //- a minimum position, below which trimming will not occur.
345  //
346  // \return true if trimming changed the size.
347  inline bool trim(label minpos=-1);
348 
349  //- Clear all bits but do not adjust the addressable size.
350  // \note Method name compatibility with boost::dynamic_bitset
351  inline void reset();
352 
353  //- Alter the size of the underlying storage.
354  // The addressed size will be truncated if needed to fit, but will
355  // remain otherwise untouched.
356  inline void setCapacity(const label numElem);
357 
358  //- Reset addressable list size, does not shrink the allocated size.
359  // Optionally specify a value for new elements.
360  inline void resize(const label numElem, const unsigned int val = 0u);
361 
362  //- Currently identical to resize. Subject to future change (Oct-2021)
363  inline void resize_nocopy(const label numElem);
364 
365  //- Reserve allocation space for at least this size.
366  // Never shrinks the allocated size.
367  // The list size is adjusted as per DynamicList with
368  // SizeInc=0, SizeMult=2, SizeDiv=1
369  inline void reserve(const label numElem);
370 
371  //- Clear the list, i.e. set addressable size to zero.
372  // Does not adjust the underlying storage
373  inline void clear();
374 
375  //- Clear the list and delete storage.
376  inline void clearStorage();
377 
378  //- Shrink the allocated space to what is actually used.
379  inline void shrink();
380 
381  //- Swap contents with argument
382  inline void swap(PackedList<Width>& rhs);
383 
384  //- Transfer the contents of the argument list into this list
385  //- and annul the argument list.
386  inline void transfer(PackedList<Width>& rhs);
387 
388 
389  // Low-level access
390 
391  //- The number of internal storage blocks
392  inline label nBlocks() const;
393 
394  //- Return the underlying storage blocks
395  inline const List<unsigned int>& storage() const;
396 
397  //- Return the underlying storage blocks
398  // Manipulate with utmost caution
399  inline List<unsigned int>& storage();
400 
401  //- A const pointer to the raw storage
402  inline const unsigned int* cdata() const noexcept;
403 
404  //- A pointer to the raw storage
405  inline unsigned int* data() noexcept;
406 
407  //- A const pointer to the raw storage, reinterpreted as byte data
408  inline const char* cdata_bytes() const noexcept;
409 
410  //- A pointer to the raw storage, reinterpreted as byte data
411  inline char* data_bytes() noexcept;
412 
413  //- The number of bytes used in the raw storage
414  //- including any unused padding.
415  inline std::streamsize size_bytes() const noexcept;
416 
417  //- The number of bytes used in the raw storage
418  //- including any unused padding.
419  inline std::streamsize byteSize() const noexcept;
420 
421 
422  // IO
423 
424  //- Print bit patterns, optionally with extra debug
425  Ostream& printBits(Ostream& os, bool debugOutput=false) const;
426 
427  //- Clear list and read from stream
428  Istream& readList(Istream& is);
429 
430  //- Write List, with line-breaks in ASCII when length exceeds shortLen.
431  // Using '0' suppresses line-breaks entirely.
432  Ostream& writeList(Ostream& os, const label shortLen=0) const;
433 
434  //- Write as a dictionary entry with keyword
435  void writeEntry(const word& keyword, Ostream& os) const;
436 
437 
438  // Member Operators
439 
440  //- Append a value at the end of the list
441  inline PackedList<Width>& append(const unsigned int val);
442 
443  //- Remove and return the last element
444  inline unsigned int remove();
445 
446  //- Identical to get() - get value at index.
447  // Never auto-vivify entries.
448  inline unsigned int operator[](const label i) const;
449 
450  //- Non-const access to value at index.
451  // Fatal for out-of-range indices
452  inline reference operator[](const label i);
453 
454  //- Copy assignment.
455  inline void operator=(const PackedList<Width>& lst);
456 
457  //- Move assignment.
458  inline void operator=(PackedList<Width>&& lst);
459 
460  //- Assign all entries to the given value. fill()
461  inline void operator=(const unsigned int val);
462 
463 
464  // Access helpers
465 
466  //- A reference supporting read/write access to an entry
467  class reference
468  {
469  protected:
470 
471  friend class PackedList; // Access for parent
472  void operator&() = delete; // Refuse to provide its address
473 
474  //- Reference to the block
475  block_type& ref_;
476 
477  //- The bit shift to access the given sub-portion
478  unsigned shift_;
479 
480  //- Construct by taking reference of block from within
481  //- the list and the specified index.
482  inline reference(PackedList* parent, const label index);
483 
484  //- Get value as unsigned, no range-checking
485  inline unsigned int get() const;
486 
487  //- Set value, returning true if changed, no range-checking
488  inline bool set(unsigned int val);
489 
490  public:
491 
492  //- Copy construct
493  reference(const reference&) = default;
494 
495  //- Move construct
496  reference(reference&&) = default;
497 
498  //- Value assignment
499  inline void operator=(const reference& other);
500 
501  //- Value assignment
502  inline void operator=(const unsigned int val);
503 
504  //- Conversion operator.
505  inline operator unsigned int () const;
506  };
507 
508 
509  // IOstream Operators
510 
511  //- Return info proxy.
513  {
514  return *this;
515  }
516 
517  friend Ostream& operator<< <Width>
518  (
519  Ostream& os,
521  );
522 
523  friend Istream& operator>> <Width>
524  (
525  Istream& is,
526  PackedList<Width>& list
527  );
528 
529 
530  // Hashing
531 
532  //- Hashing functor for PackedList
533  // Seeded with logical size for disambiguation of padding
534  struct hasher
535  {
536  unsigned operator()(const PackedList<Width>& obj) const
537  {
538  return Foam::Hasher
539  (
540  obj.cdata(),
541  obj.size_bytes(),
542  unsigned(obj.size())
543  );
544  }
545  };
546 
547 
548  // Housekeeping
549 
550  //- Deprecated(2020-11) use fill()
551  // \deprecated(2020-11) use fill()
552  void assign(const unsigned int val) { this->fill(val); }
553 
554  //- Deprecated(2020-11) use operator=
555  // \deprecated(2020-11) use operator=
556  void assign(const PackedList<Width>& rhs) { (*this) = rhs; }
557 
558  //- Alias for resize()
559  void setSize(const label n, unsigned int val = 0u) { resize(n, val); }
560 };
561 
562 
563 // * * * * * * * * * * * * * * * * * Traits * * * * * * * * * * * * * * * * //
564 
565 //- Hashing for PackedList data
566 template<unsigned Width>
567 struct Hash<PackedList<Width>> : PackedList<Width>::hasher {};
568 
569 
570 // * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
571 
572 //- Write List to Ostream, as per UList::writeList() with default length.
573 // The default short-length is given by Detail::ListPolicy::short_length
574 template<unsigned Width>
576 {
578 }
579 
580 
581 //- Test for equality of sizes and the bits set
582 template<unsigned Width>
583 inline bool operator==(const PackedList<Width>& a, const PackedList<Width>& b);
584 
585 //- Test for inequality of sizes or the bits set
586 template<unsigned Width>
587 inline bool operator!=(const PackedList<Width>& a, const PackedList<Width>& b);
588 
589 
590 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
591 
592 } // End namespace Foam
593 
594 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
595 
596 #include "PackedListI.H"
597 
598 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
599 
600 #ifdef NoRepository
601  #include "PackedList.C"
602  #include "PackedListIO.C"
603 #endif
604 
605 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
606 
607 #endif
608 
609 // ************************************************************************* //
Foam::PackedList::element_width
static constexpr unsigned element_width
The width of an individual element (in bits).
Definition: PackedList.H:144
BitOps.H
Foam::PackedList::reset
void reset()
Clear all bits but do not adjust the addressable size.
Definition: PackedListI.H:505
Foam::PackedList::resize
void resize(const label numElem, const unsigned int val=0u)
Reset addressable list size, does not shrink the allocated size.
Definition: PackedListI.H:409
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::InfoProxy
A helper class for outputting values to Ostream.
Definition: InfoProxy.H:47
Foam::PackedList::reference::ref_
block_type & ref_
Reference to the block.
Definition: PackedList.H:474
Foam::PackedList::reserve
void reserve(const label numElem)
Reserve allocation space for at least this size.
Definition: PackedListI.H:486
Foam::operator&
tmp< GeometricField< Type, fvPatchField, volMesh > > operator&(const fvMatrix< Type > &, const DimensionedField< Type, volMesh > &)
Foam::PackedList::operator
friend Ostream & operator(Ostream &os, const InfoProxy< PackedList< Width >> &info)
Foam::PackedList::reference
A reference supporting read/write access to an entry.
Definition: PackedList.H:466
Foam::Hasher
unsigned Hasher(const void *data, size_t len, unsigned seed=0)
Bob Jenkins's 96-bit mixer hashing function (lookup3)
Definition: Hasher.C:581
Foam::PackedList::clone
autoPtr< PackedList< Width > > clone() const
Clone.
Definition: PackedListI.H:281
InfoProxy.H
PackedListI.H
Foam::PackedList::block_type
unsigned int block_type
The storage block type for bit elements.
Definition: PackedList.H:136
Foam::PackedList::size_bytes
std::streamsize size_bytes() const noexcept
Definition: PackedListI.H:589
Foam::PackedList::nBlocks
label nBlocks() const
The number of internal storage blocks.
Definition: PackedListI.H:554
Foam::PackedList::clear_trailing_bits
void clear_trailing_bits()
Clear any partial rubbish in the last addressable block.
Definition: PackedListI.H:83
Foam::PackedList::empty
bool empty() const noexcept
True if the list is empty (ie, size() is zero).
Definition: PackedListI.H:384
Foam::PackedList::readList
Istream & readList(Istream &is)
Clear list and read from stream.
Definition: PackedListIO.C:64
Foam::operator>>
Istream & operator>>(Istream &, directionInfo &)
Definition: directionInfo.C:230
Foam::PackedList::PackedList
constexpr PackedList() noexcept
Default construct, zero-sized and no allocation.
Definition: PackedListI.H:177
Foam::PackedList::hasher::operator()
unsigned operator()(const PackedList< Width > &obj) const
Definition: PackedList.H:535
Foam::PackedList::checkIndex
void checkIndex(const label i) const
Check index is within valid range [0,size)
Definition: PackedListI.H:359
Foam::PackedList::swap
void swap(PackedList< Width > &rhs)
Swap contents with argument.
Definition: PackedListI.H:603
Foam::PackedList::get
unsigned int get(const label i) const
Get value at index i or 0 for out-of-range.
Definition: PackedListI.H:630
PackedListCore.H
Foam::PackedList::cdata_bytes
const char * cdata_bytes() const noexcept
A const pointer to the raw storage, reinterpreted as byte data.
Definition: PackedListI.H:575
Foam::PackedList::mask_lower
static constexpr block_type mask_lower(unsigned elementOffset)
Masking for all bits below the element offset.
Definition: PackedList.H:170
Foam::operator!=
bool operator!=(const eddy &a, const eddy &b)
Definition: eddy.H:239
Foam::PackedList::size_
label size_
Number of entries used.
Definition: PackedList.H:187
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
Foam::uniform
Definition: uniform.H:50
n
label n
Definition: TABSMDCalcMethod2.H:31
Foam::PackedList::printBits
Ostream & printBits(Ostream &os, bool debugOutput=false) const
Print bit patterns, optionally with extra debug.
Definition: PackedListIO.C:44
Foam::PackedList::blocks_
block_container blocks_
The blocks of raw data.
Definition: PackedList.H:184
Foam::PackedList::repeated_value
static unsigned int repeated_value(unsigned val)
A fill value for complete blocks.
Definition: PackedListI.H:34
Foam::Hash
Hash function class. The default definition is for primitives. Non-primitives used to hash entries on...
Definition: Hash.H:53
Foam::PackedList::block_container
List< block_type > block_container
The internal container for storing the blocks.
Definition: PackedList.H:181
Foam::constant::physicoChemical::b
const dimensionedScalar b
Wien displacement law constant: default SI units: [m.K].
Definition: createFields.H:27
labelList.H
Foam::operator==
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
Foam::Istream
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:61
IndirectListBase.H
Foam::PackedList::unset
bool unset(const label i)
Unset the entry at index i.
Definition: PackedListI.H:684
Foam::Detail::ListPolicy::short_length
Number of items before requiring line-breaks in the list output.
Definition: ListPolicy.H:61
Foam::PackedList::const_reference
unsigned int const_reference
Definition: PackedList.H:228
Foam::PackedList::remove
unsigned int remove()
Remove and return the last element.
Definition: PackedListI.H:709
Foam::labelRange
A range or interval of labels defined by a start and a size.
Definition: labelRange.H:55
Foam::PackedList::fill
void fill(const unsigned int val)
Assign all entries to the given value.
Definition: PackedListI.H:728
Foam::PackedList::cdata
const unsigned int * cdata() const noexcept
A const pointer to the raw storage.
Definition: PackedListI.H:561
Foam::PackedList::writeList
Ostream & writeList(Ostream &os, const label shortLen=0) const
Write List, with line-breaks in ASCII when length exceeds shortLen.
Definition: PackedListIO.C:179
Foam::PackedList::setSize
void setSize(const label n, unsigned int val=0u)
Alias for resize()
Definition: PackedList.H:558
PackedListIO.C
os
OBJstream os(runTime.globalPath()/outputName)
Foam::PackedList::transfer
void transfer(PackedList< Width > &rhs)
Definition: PackedListI.H:616
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::PackedList::append
PackedList< Width > & append(const unsigned int val)
Append a value at the end of the list.
Definition: PackedListI.H:697
Foam::PackedList::equal
bool equal(const PackedList< Width > &other) const
Test for equality of sizes and the bits set.
Definition: PackedList.C:152
Foam::PackedList::setPair
void setPair(Istream &is)
Read an index/value pair and set accordingly.
Definition: PackedListI.H:58
Foam::PackedList::unpack
List< IntType > unpack() const
Return the values as a list of integral type.
Foam::PackedList::assign
void assign(const unsigned int val)
Deprecated(2020-11) use fill()
Definition: PackedList.H:551
Foam::PackedList::max_value
static constexpr block_type max_value
Definition: PackedList.H:152
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::PackedList::writeEntry
void writeEntry(Ostream &os) const
Write as a dictionary entry.
Definition: PackedListIO.C:34
range
scalar range
Definition: LISASMDCalcMethod1.H:12
Foam::PackedList::elem_per_block
static constexpr unsigned elem_per_block
The number of elements stored per data block.
Definition: PackedList.H:147
Foam::PackedList::hasher
Hashing functor for PackedList.
Definition: PackedList.H:533
Foam::List< block_type >
Foam::PackedList
A dynamic list of packed unsigned integers, with the number of bits per item specified by the <Width>...
Definition: PackedList.H:108
Foam::PackedList::operator=
void operator=(const PackedList< Width > &lst)
Copy assignment.
Definition: PackedListI.H:773
Foam::PackedList::size
label size() const noexcept
Number of entries.
Definition: PackedListI.H:377
Foam::UList< label >
Foam::PackedList::trim
bool trim(label minpos=-1)
Definition: PackedListI.H:97
Foam::PackedList::storage
const List< unsigned int > & storage() const
Return the underlying storage blocks.
Definition: PackedListI.H:547
Foam::Detail::PackedListCore
Template-invariant parts for PackedList.
Definition: PackedListCore.H:53
Foam::PackedList::data_bytes
char * data_bytes() noexcept
A pointer to the raw storage, reinterpreted as byte data.
Definition: PackedListI.H:582
Foam::PackedList::clearStorage
void clearStorage()
Clear the list and delete storage.
Definition: PackedListI.H:520
Foam::PackedList::set
bool set(const label i, unsigned int val=~0u)
Set value at index i, default value set is the max_value.
Definition: PackedListI.H:653
Foam::PackedList::shrink
void shrink()
Shrink the allocated space to what is actually used.
Definition: PackedListI.H:528
Foam::IndirectListBase
Base for lists with indirect addressing, templated on the list contents type and the addressing type....
Definition: IndirectListBase.H:56
Foam::PackedList::byteSize
std::streamsize byteSize() const noexcept
Definition: PackedListI.H:596
Foam::PackedList::resize_nocopy
void resize_nocopy(const label numElem)
Currently identical to resize. Subject to future change (Oct-2021)
Definition: PackedListI.H:399
Foam::PackedList::values
labelList values() const
Return the values as a list of labels.
Definition: PackedList.C:175
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::PackedList::reference::shift_
unsigned shift_
The bit shift to access the given sub-portion.
Definition: PackedList.H:477
Foam::PackedList::capacity
label capacity() const noexcept
The number of elements that can be stored with reallocating.
Definition: PackedListI.H:391
Foam::PackedList::copyAssign
void copyAssign(const PackedList< Width > &rhs)
Copy assignment.
Definition: PackedListI.H:142
Foam::PackedList::num_blocks
static constexpr label num_blocks(label numElem) noexcept
Definition: PackedList.H:163
Foam::PackedList::bits_per_block
static constexpr unsigned bits_per_block
The number of bits in a single block.
Definition: PackedList.H:141
Foam::data
Database for solution data, solver performance and other reduced data.
Definition: data.H:55
Foam::PackedList::clear
void clear()
Clear the list, i.e. set addressable size to zero.
Definition: PackedListI.H:512
Foam::PackedList::info
InfoProxy< PackedList< Width > > info() const
Return info proxy.
Definition: PackedList.H:511
Foam::PackedList::readValue
static unsigned int readValue(Istream &is)
Read a list entry (allows for specialization)
Definition: PackedListI.H:41
PackedList.C
Foam::PackedList::setCapacity
void setCapacity(const label numElem)
Alter the size of the underlying storage.
Definition: PackedListI.H:471