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-------------------------------------------------------------------------------
11License
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
27Class
28 Foam::PackedList
29
30Description
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
38Note
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
77Note
78 Iterators for this class have been intentionally removed, for performance
79 reasons.
80
81See also
82 Foam::BitOps
83 Foam::DynamicList
84
85SourceFiles
86 PackedListI.H
87 PackedList.C
88 PackedListIO.C
89
90\*---------------------------------------------------------------------------*/
91
92#ifndef Foam_PackedList_H
93#define Foam_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
105namespace Foam
106{
107
108// Forward Declarations
109template<unsigned Width> class PackedList;
110class labelRange;
111
112template<unsigned Width>
114
115template<unsigned Width>
117
118template<unsigned Width>
120
121
122/*---------------------------------------------------------------------------*\
123 Class PackedList Declaration
124\*---------------------------------------------------------------------------*/
125
126template<unsigned Width>
127class PackedList
128:
130{
131public:
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
177protected:
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
225public:
226
227 // Forward declaration of access classes
228
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>
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 //- (uses a size doubling strategy).
367 // Never shrinks the allocated size.
368 inline void reserve(const label numElem);
369
370 //- Clear the list, i.e. set addressable size to zero.
371 // Does not adjust the underlying storage
372 inline void clear();
373
374 //- Clear the list and delete storage.
375 inline void clearStorage();
376
377 //- Shrink the allocated space to what is actually used.
378 inline void shrink();
379
380 //- Swap contents with argument
381 inline void swap(PackedList<Width>& rhs);
382
383 //- Transfer the contents of the argument list into this list
384 //- and annul the argument list.
385 inline void transfer(PackedList<Width>& rhs);
386
387
388 // Low-level access
389
390 //- The number of internal storage blocks
391 inline label nBlocks() const;
392
393 //- Return the underlying storage blocks
394 inline const List<unsigned int>& storage() const;
395
396 //- Return the underlying storage blocks
397 // Manipulate with utmost caution
398 inline List<unsigned int>& storage();
399
400 //- A const pointer to the raw storage
401 inline const unsigned int* cdata() const noexcept;
402
403 //- A pointer to the raw storage
404 inline unsigned int* data() noexcept;
405
406 //- A const pointer to the raw storage, reinterpreted as byte data
407 inline const char* cdata_bytes() const noexcept;
408
409 //- A pointer to the raw storage, reinterpreted as byte data
410 inline char* data_bytes() noexcept;
411
412 //- The number of bytes used in the raw storage
413 //- including any unused padding.
414 inline std::streamsize size_bytes() const noexcept;
415
416 //- The number of bytes used in the raw storage
417 //- including any unused padding.
418 inline std::streamsize byteSize() const noexcept;
419
420
421 // IO
422
423 //- Print bit patterns, optionally with extra debug
424 Ostream& printBits(Ostream& os, bool debugOutput=false) const;
425
426 //- Clear list and read from stream
428
429 //- Write List, with line-breaks in ASCII when length exceeds shortLen.
430 // Using '0' suppresses line-breaks entirely.
431 Ostream& writeList(Ostream& os, const label shortLen=0) const;
432
433 //- Write as a dictionary entry with keyword
434 void writeEntry(const word& keyword, Ostream& os) const;
435
436
437 // Member Operators
438
439 //- Append a value at the end of the list
440 inline PackedList<Width>& append(const unsigned int val);
441
442 //- Remove and return the last element
443 inline unsigned int remove();
444
445 //- Identical to get() - get value at index.
446 // Never auto-vivify entries.
447 inline unsigned int operator[](const label i) const;
448
449 //- Non-const access to value at index.
450 // Fatal for out-of-range indices
451 inline reference operator[](const label i);
452
453 //- Copy assignment.
454 inline void operator=(const PackedList<Width>& lst);
455
456 //- Move assignment.
457 inline void operator=(PackedList<Width>&& lst);
458
459 //- Assign all entries to the given value. fill()
460 inline void operator=(const unsigned int val);
461
462
463 // Access helpers
464
465 //- A reference supporting read/write access to an entry
466 class reference
467 {
468 protected:
470 friend class PackedList; // Access for parent
471 void operator&() = delete; // Refuse to provide its address
472
473 //- Reference to the block
474 block_type& ref_;
475
476 //- The bit shift to access the given sub-portion
477 unsigned shift_;
478
479 //- Construct by taking reference of block from within
480 //- the list and the specified index.
481 inline reference(PackedList* parent, const label index);
482
483 //- Get value as unsigned, no range-checking
484 inline unsigned int get() const;
485
486 //- Set value, returning true if changed, no range-checking
487 inline bool set(unsigned int val);
488
489 public:
490
491 //- Copy construct
492 reference(const reference&) = default;
493
494 //- Move construct
495 reference(reference&&) = default;
496
497 //- Value assignment
498 inline void operator=(const reference& other);
499
500 //- Value assignment
501 inline void operator=(const unsigned int val);
502
503 //- Conversion operator.
504 inline operator unsigned int () const;
505 };
506
507
508 // IOstream Operators
509
510 //- Return info proxy.
512 {
513 return *this;
514 }
516 friend Ostream& operator<< <Width>
517 (
518 Ostream& os,
520 );
522 friend Istream& operator>> <Width>
523 (
524 Istream& is,
526 );
527
528
529 // Hashing
530
531 //- Hashing functor for PackedList
532 // Seeded with logical size for disambiguation of padding
533 struct hasher
535 unsigned operator()(const PackedList<Width>& obj) const
536 {
537 return Foam::Hasher
538 (
539 obj.cdata(),
540 obj.size_bytes(),
541 unsigned(obj.size())
542 );
543 }
544 };
545
546
547 // Housekeeping
548
549 //- Deprecated(2020-11) use fill()
550 // \deprecated(2020-11) use fill()
551 void assign(const unsigned int val) { this->fill(val); }
552
553 //- Deprecated(2020-11) use operator=
554 // \deprecated(2020-11) use operator=
555 void assign(const PackedList<Width>& rhs) { (*this) = rhs; }
556
557 //- Alias for resize()
558 void setSize(const label n, unsigned int val = 0u) { resize(n, val); }
559};
560
561
562// * * * * * * * * * * * * * * * * * Traits * * * * * * * * * * * * * * * * //
563
564//- Hashing for PackedList data
565template<unsigned Width>
566struct Hash<PackedList<Width>> : PackedList<Width>::hasher {};
567
568
569// * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
570
571//- Write List to Ostream, as per UList::writeList() with default length.
572// The default short-length is given by Detail::ListPolicy::short_length
573template<unsigned Width>
575{
577}
578
579
580//- Test for equality of sizes and the bits set
581template<unsigned Width>
582inline bool operator==(const PackedList<Width>& a, const PackedList<Width>& b);
583
584//- Test for inequality of sizes or the bits set
585template<unsigned Width>
586inline bool operator!=(const PackedList<Width>& a, const PackedList<Width>& b);
587
588
589// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
590
591} // End namespace Foam
592
593// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
594
595#include "PackedListI.H"
596
597// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
598
599#ifdef NoRepository
600 #include "PackedList.C"
601 #include "PackedListIO.C"
602#endif
603
604// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
605
606#endif
607
608// ************************************************************************* //
scalar range
label n
Base for lists with indirect addressing, templated on the list contents type and the addressing type....
A helper class for outputting values to Ostream.
Definition: InfoProxy.H:52
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:64
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: List.H:77
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
A reference supporting read/write access to an entry.
Definition: PackedList.H:466
reference(PackedList *parent, const label index)
unsigned shift_
The bit shift to access the given sub-portion.
Definition: PackedList.H:476
block_type & ref_
Reference to the block.
Definition: PackedList.H:473
reference(const reference &)=default
Copy construct.
reference(reference &&)=default
Move construct.
A dynamic list of packed unsigned integers, with the number of bits per item specified by the <Width>...
Definition: PackedList.H:129
void copyAssign(const PackedList< Width > &rhs)
Copy assignment.
Definition: PackedListI.H:142
unsigned int const_reference
Definition: PackedList.H:229
void shrink()
Shrink the allocated space to what is actually used.
Definition: PackedListI.H:528
label size_
Number of entries used.
Definition: PackedList.H:187
static unsigned int readValue(Istream &is)
Read a list entry (allows for specialization)
Definition: PackedListI.H:41
void swap(PackedList< Width > &rhs)
Swap contents with argument.
Definition: PackedListI.H:603
bool unset(const label i)
Unset the entry at index i.
Definition: PackedListI.H:684
char * data_bytes() noexcept
A pointer to the raw storage, reinterpreted as byte data.
Definition: PackedListI.H:582
void checkIndex(const label i) const
Check index is within valid range [0,size)
Definition: PackedListI.H:359
const unsigned int * cdata() const noexcept
A const pointer to the raw storage.
Definition: PackedListI.H:561
List< block_type > block_container
The internal container for storing the blocks.
Definition: PackedList.H:181
bool equal(const PackedList< Width > &other) const
Test for equality of sizes and the bits set.
Definition: PackedList.C:152
static constexpr block_type mask_lower(unsigned elementOffset)
Masking for all bits below the element offset.
Definition: PackedList.H:170
block_container blocks_
The blocks of raw data.
Definition: PackedList.H:184
bool empty() const noexcept
True if the list is empty (ie, size() is zero).
Definition: PackedListI.H:384
labelList values() const
Return the values as a list of labels.
Definition: PackedList.C:175
void resize_nocopy(const label numElem)
Currently identical to resize. Subject to future change (Oct-2021)
Definition: PackedListI.H:399
void setSize(const label n, unsigned int val=0u)
Alias for resize()
Definition: PackedList.H:557
autoPtr< PackedList< Width > > clone() const
Clone.
Definition: PackedListI.H:281
void resize(const label numElem, const unsigned int val=0u)
Reset addressable list size, does not shrink the allocated size.
Definition: PackedListI.H:409
void fill(const unsigned int val)
Assign all entries to the given value.
Definition: PackedListI.H:728
void assign(const unsigned int val)
Deprecated(2020-11) use fill()
Definition: PackedList.H:550
List< IntType > unpack() const
Return the values as a list of integral type.
static constexpr block_type max_value
Definition: PackedList.H:152
static unsigned int repeated_value(unsigned val)
A fill value for complete blocks.
Definition: PackedListI.H:34
void setCapacity(const label numElem)
Alter the size of the underlying storage.
Definition: PackedListI.H:471
void clear_trailing_bits()
Clear any partial rubbish in the last addressable block.
Definition: PackedListI.H:83
static constexpr unsigned element_width
The width of an individual element (in bits).
Definition: PackedList.H:144
std::streamsize byteSize() const noexcept
Definition: PackedListI.H:596
InfoProxy< PackedList< Width > > info() const
Return info proxy.
Definition: PackedList.H:510
label nBlocks() const
The number of internal storage blocks.
Definition: PackedListI.H:554
Ostream & printBits(Ostream &os, bool debugOutput=false) const
Print bit patterns, optionally with extra debug.
Definition: PackedListIO.C:44
void clearStorage()
Clear the list and delete storage.
Definition: PackedListI.H:520
label capacity() const noexcept
The number of elements that can be stored with reallocating.
Definition: PackedListI.H:391
label size() const noexcept
Number of entries.
Definition: PackedListI.H:377
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
bool trim(label minpos=-1)
Definition: PackedListI.H:97
friend Ostream & operator(Ostream &os, const InfoProxy< PackedList< Width > > &info)
void reserve(const label numElem)
Definition: PackedListI.H:486
unsigned int get(const label i) const
Get value at index i or 0 for out-of-range.
Definition: PackedListI.H:630
void operator=(const PackedList< Width > &lst)
Copy assignment.
Definition: PackedListI.H:773
constexpr PackedList() noexcept
Default construct, zero-sized and no allocation.
Definition: PackedListI.H:177
PackedList< Width > & append(const unsigned int val)
Append a value at the end of the list.
Definition: PackedListI.H:697
static constexpr unsigned elem_per_block
The number of elements stored per data block.
Definition: PackedList.H:147
void transfer(PackedList< Width > &rhs)
Definition: PackedListI.H:616
const char * cdata_bytes() const noexcept
A const pointer to the raw storage, reinterpreted as byte data.
Definition: PackedListI.H:575
void writeEntry(Ostream &os) const
Write as a dictionary entry.
Definition: PackedListIO.C:34
const List< unsigned int > & storage() const
Return the underlying storage blocks.
Definition: PackedListI.H:547
static constexpr label num_blocks(label numElem) noexcept
Definition: PackedList.H:163
void setPair(Istream &is)
Read an index/value pair and set accordingly.
Definition: PackedListI.H:58
unsigned int block_type
The storage block type for bit elements.
Definition: PackedList.H:136
Ostream & writeList(Ostream &os, const label shortLen=0) const
Write List, with line-breaks in ASCII when length exceeds shortLen.
Definition: PackedListIO.C:179
void clear()
Clear the list, i.e. set addressable size to zero.
Definition: PackedListI.H:512
Istream & readList(Istream &is)
Clear list and read from stream.
Definition: PackedListIO.C:64
void reset()
Clear all bits but do not adjust the addressable size.
Definition: PackedListI.H:505
std::streamsize size_bytes() const noexcept
Definition: PackedListI.H:589
static constexpr unsigned bits_per_block
The number of bits in a single block.
Definition: PackedList.H:141
unsigned int remove()
Remove and return the last element.
Definition: PackedListI.H:709
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
Database for solution data, solver performance and other reduced data.
Definition: data.H:58
A range or interval of labels defined by a start and a size.
Definition: labelRange.H:58
A class for handling words, derived from Foam::string.
Definition: word.H:68
OBJstream os(runTime.globalPath()/outputName)
Namespace for OpenFOAM.
bool operator!=(const eddy &a, const eddy &b)
Definition: eddy.H:239
unsigned Hasher(const void *data, size_t len, unsigned seed=0)
Bob Jenkins's 96-bit mixer hashing function (lookup3)
Definition: Hasher.C:581
tmp< GeometricField< Type, fvPatchField, volMesh > > operator&(const fvMatrix< Type > &, const DimensionedField< Type, volMesh > &)
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
Istream & operator>>(Istream &, directionInfo &)
const direction noexcept
Definition: Scalar.H:223
volScalarField & b
Definition: createFields.H:27
Number of items before requiring line-breaks in the list output.
Definition: ListPolicy.H:61
Template-invariant parts for PackedList.
Hash function class. The default definition is for primitives. Non-primitives used to hash entries on...
Definition: Hash.H:54
Hashing functor for PackedList.
Definition: PackedList.H:533
unsigned operator()(const PackedList< Width > &obj) const
Definition: PackedList.H:534