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-2020 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>
116 Ostream& operator<<(Ostream& os, const PackedList<Width>& list);
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)
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;
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 nElem);
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 nElem, const unsigned int val = 0u);
361 
362  //- Reserve allocation space for at least this size.
363  // Never shrinks the allocated size.
364  // The list size is adjusted as per DynamicList with
365  // SizeInc=0, SizeMult=2, SizeDiv=1
366  inline void reserve(const label nElem);
367 
368  //- Clear the list, i.e. set addressable size to zero.
369  // Does not adjust the underlying storage
370  inline void clear();
371 
372  //- Clear the list and delete storage.
373  inline void clearStorage();
374 
375  //- Shrink the allocated space to what is actually used.
376  inline void shrink();
377 
378  //- Swap contents with argument
379  inline void swap(PackedList<Width>& rhs);
380 
381  //- Transfer the contents of the argument list into this list
382  //- and annul the argument list.
383  inline void transfer(PackedList<Width>& rhs);
384 
385 
386  // Low-level access
387 
388  //- The number of bytes used in the underlying storage
389  //- including any unused padding.
390  inline std::streamsize byteSize() const;
391 
392  //- The number of internal storage blocks
393  inline label nBlocks() const;
394 
395  //- Return the underlying storage blocks
396  inline const List<unsigned int>& storage() const;
397 
398  //- Return the underlying storage blocks
399  // Manipulate with utmost caution
400  inline List<unsigned int>& storage();
401 
402 
403  // IO
404 
405  //- Print bit patterns, optionally with extra debug
406  Ostream& printBits(Ostream& os, bool debugOutput=false) const;
407 
408  //- Clear list and read from stream
409  Istream& read(Istream& is);
410 
411  //- Write List, with line-breaks in ASCII when length exceeds shortLen.
412  // Using '0' suppresses line-breaks entirely.
413  Ostream& writeList(Ostream& os, const label shortLen=0) const;
414 
415  //- Write as a dictionary entry with keyword
416  void writeEntry(const word& keyword, Ostream& os) const;
417 
418 
419  // Member Operators
420 
421  //- Append a value at the end of the list
422  inline PackedList<Width>& append(const unsigned int val);
423 
424  //- Remove and return the last element
425  inline unsigned int remove();
426 
427  //- Identical to get() - get value at index.
428  // Never auto-vivify entries.
429  inline unsigned int operator[](const label i) const;
430 
431  //- Non-const access to value at index.
432  // Fatal for out-of-range indices
433  inline reference operator[](const label i);
434 
435  //- Copy assignment.
436  inline void operator=(const PackedList<Width>& lst);
437 
438  //- Move assignment.
439  inline void operator=(PackedList<Width>&& lst);
440 
441  //- Assign all entries to the given value. fill()
442  inline void operator=(const unsigned int val);
443 
444 
445  // Access helpers
446 
447  //- A reference supporting read/write access to an entry
448  class reference
449  {
450  protected:
451 
452  friend class PackedList; // Access for parent
453  void operator&() = delete; // Refuse to provide its address
454 
455  //- Reference to the block
456  block_type& ref_;
457 
458  //- The bit shift to access the given sub-portion
459  unsigned shift_;
460 
461  //- Construct by taking reference of block from within
462  //- the list and the specified index.
463  inline reference(PackedList* parent, const label index);
464 
465  //- Get value as unsigned, no range-checking
466  inline unsigned int get() const;
467 
468  //- Set value, returning true if changed, no range-checking
469  inline bool set(unsigned int val);
470 
471  public:
472 
473  //- Copy construct
474  reference(const reference&) = default;
475 
476  //- Move construct
477  reference(reference&&) = default;
478 
479  //- Value assignment
480  inline void operator=(const reference& other);
481 
482  //- Value assignment
483  inline void operator=(const unsigned int val);
484 
485  //- Conversion operator.
486  inline operator unsigned int () const;
487  };
488 
489 
490  // IOstream Operators
491 
492  //- Return info proxy.
494  {
495  return *this;
496  }
497 
498  friend Ostream& operator<< <Width>
499  (
500  Ostream& os,
502  );
503 
504  friend Istream& operator>> <Width>
505  (
506  Istream& is,
507  PackedList<Width>& list
508  );
509 
510 
511  // Housekeeping
512 
513  //- Deprecated(2020-11) use fill()
514  // \deprecated(2020-11) use fill()
515  void assign(const unsigned int val) { this->fill(val); }
516 
517  //- Deprecated(2020-11) use operator=
518  // \deprecated(2020-11) use operator=
519  void assign(const PackedList<Width>& rhs) { (*this) = rhs; }
520 
521  //- Alias for resize()
522  void setSize(const label len, unsigned int val = 0u)
523  {
524  resize(len, val);
525  }
526 };
527 
528 
529 // * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
530 
531 //- Write List to Ostream, as per UList::writeList() with default length.
532 // The default short-length is given by Detail::ListPolicy::short_length
533 template<unsigned Width>
534 Ostream& operator<<(Ostream& os, const PackedList<Width>& list)
535 {
537 }
538 
539 
540 //- Test for equality of sizes and the bits set
541 template<unsigned Width>
542 inline bool operator==(const PackedList<Width>& a, const PackedList<Width>& b);
543 
544 //- Test for inequality of sizes or the bits set
545 template<unsigned Width>
546 inline bool operator!=(const PackedList<Width>& a, const PackedList<Width>& b);
547 
548 
549 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
550 
551 } // End namespace Foam
552 
553 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
554 
555 #include "PackedListI.H"
556 
557 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
558 
559 #ifdef NoRepository
560  #include "PackedList.C"
561  #include "PackedListIO.C"
562 #endif
563 
564 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
565 
566 #endif
567 
568 // ************************************************************************* //
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:495
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
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:455
Foam::PackedList::setSize
void setSize(const label len, unsigned int val=0u)
Alias for resize()
Definition: PackedList.H:521
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::read
Istream & read(Istream &is)
Clear list and read from stream.
Definition: PackedListIO.C:64
Foam::PackedList::reference
A reference supporting read/write access to an entry.
Definition: PackedList.H:447
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::nBlocks
label nBlocks() const
The number of internal storage blocks.
Definition: PackedListI.H:544
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::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::checkIndex
void checkIndex(const label i) const
Check index is within valid range [0,size)
Definition: PackedListI.H:359
Foam::PackedList::resize
void resize(const label nElem, const unsigned int val=0u)
Reset addressable list size, does not shrink the allocated size.
Definition: PackedListI.H:399
Foam::PackedList::swap
void swap(PackedList< Width > &rhs)
Swap contents with argument.
Definition: PackedListI.H:558
Foam::PackedList::get
unsigned int get(const label i) const
Get value at index i or 0 for out-of-range.
Definition: PackedListI.H:585
PackedListCore.H
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:235
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
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::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::setCapacity
void setCapacity(const label nElem)
Alter the size of the underlying storage.
Definition: PackedListI.H:461
Foam::PackedList::unset
bool unset(const label i)
Unset the entry at index i.
Definition: PackedListI.H:639
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:664
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:683
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:204
Foam::PackedList::num_blocks
static constexpr label num_blocks(label numElem)
Definition: PackedList.H:163
Foam::PackedList::byteSize
std::streamsize byteSize() const
Definition: PackedListI.H:551
PackedListIO.C
Foam::PackedList::transfer
void transfer(PackedList< Width > &rhs)
Definition: PackedListI.H:571
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:652
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:514
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
Foam::PackedList::capacity
label capacity() const
The number of elements that can be stored with reallocating.
Definition: PackedListI.H:391
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::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:728
Foam::PackedList::size
label size() const noexcept
Number of entries.
Definition: PackedListI.H:377
Foam::UList< label >
Foam::PackedList::reserve
void reserve(const label nElem)
Reserve allocation space for at least this size.
Definition: PackedListI.H:476
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:537
Foam::Detail::PackedListCore
Template-invariant parts for PackedList.
Definition: PackedListCore.H:53
Foam::PackedList::clearStorage
void clearStorage()
Clear the list and delete storage.
Definition: PackedListI.H:510
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:608
Foam::PackedList::shrink
void shrink()
Shrink the allocated space to what is actually used.
Definition: PackedListI.H:518
Foam::IndirectListBase
Base for lists with indirect addressing, templated on the list contents type and the addressing type....
Definition: IndirectListBase.H:56
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:458
Foam::PackedList::copyAssign
void copyAssign(const PackedList< Width > &rhs)
Copy assignment.
Definition: PackedListI.H:142
Foam::PackedList::bits_per_block
static constexpr unsigned bits_per_block
The number of bits in a single block.
Definition: PackedList.H:141
Foam::PackedList::clear
void clear()
Clear the list, i.e. set addressable size to zero.
Definition: PackedListI.H:502
Foam::PackedList::info
InfoProxy< PackedList< Width > > info() const
Return info proxy.
Definition: PackedList.H:492
Foam::PackedList::readValue
static unsigned int readValue(Istream &is)
Read a list entry (allows for specialization)
Definition: PackedListI.H:41
PackedList.C