dictionary.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::dictionary
26 
27 Description
28  A list of keyword definitions, which are a keyword followed by any number
29  of values (e.g. words and numbers). The keywords can represent patterns
30  which are matched using Posix regular expressions. The general order for
31  searching is as follows:
32  - exact match
33  - pattern match (in reverse order)
34  - optional recursion into the enclosing (parent) dictionaries
35 
36  The dictionary class is the base class for IOdictionary.
37  It also serves as a bootstrap dictionary for the objectRegistry data
38  dictionaries since, unlike the IOdictionary class, it does not use an
39  objectRegistry itself to work.
40 
41  To add - a merge() member function with a non-const dictionary parameter?
42  This would avoid unnecessary cloning in the add(entry*, bool) method.
43 
44 SourceFiles
45  dictionary.C
46  dictionaryIO.C
47 
48 \*---------------------------------------------------------------------------*/
49 
50 #ifndef dictionary_H
51 #define dictionary_H
52 
53 #include "entry.H"
54 #include "IDLList.H"
55 #include "DLList.H"
56 #include "HashTable.H"
57 #include "ITstream.H"
58 #include "wordReList.H"
59 #include "Pair.H"
60 #include "className.H"
61 
62 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
63 
64 namespace Foam
65 {
66 
67 // Forward declaration of friend functions and operators
68 class regExp;
69 class dictionary;
70 class SHA1Digest;
71 
72 Istream& operator>>(Istream&, dictionary&);
73 Ostream& operator<<(Ostream&, const dictionary&);
74 
75 /*---------------------------------------------------------------------------*\
76  Class dictionaryName Declaration
77 \*---------------------------------------------------------------------------*/
78 
79 class dictionaryName
80 {
81  // Private Data
82 
83  fileName name_;
84 
85 
86 public:
87 
88  // Constructors
89 
90  //- Construct dictionaryName null
92  {}
93 
94  //- Construct dictionaryName as copy of the given fileName
96  :
97  name_(name)
98  {}
99 
100  //- Move constructor
102  :
103  name_(move(name.name_))
104  {}
105 
106 
107  // Member Functions
108 
109  //- Return the dictionary name
110  const fileName& name() const
111  {
112  return name_;
113  }
114 
115  //- Return the dictionary name
116  fileName& name()
117  {
118  return name_;
119  }
120 
121  //- Return the local dictionary name (final part of scoped name)
122  const word dictName() const
123  {
124  const word scopedName = name_.name();
125 
126  string::size_type i = scopedName.rfind('/');
127 
128  if (i == scopedName.npos)
129  {
130  return scopedName;
131  }
132  else
133  {
134  return scopedName.substr(i + 1, scopedName.npos);
135  }
136  }
137 
138 
139  // Member Operators
141  void operator=(const dictionaryName& name)
142  {
143  name_ = name.name_;
144  }
147  {
148  name_ = move(name.name_);
149  }
150 };
151 
152 
153 /*---------------------------------------------------------------------------*\
154  Class dictionary Declaration
155 \*---------------------------------------------------------------------------*/
157 class dictionary
158 :
159  public dictionaryName,
160  public IDLList<entry>
161 {
162  // Private Data
163 
164  //- HashTable of the entries held on the DL-list for quick lookup
165  HashTable<entry*> hashedEntries_;
166 
167  //- Parent dictionary
168  const dictionary& parent_;
169 
170  //- Entries of matching patterns
171  DLList<entry*> patternEntries_;
172 
173  //- Patterns as precompiled regular expressions
174  DLList<autoPtr<regExp>> patternRegexps_;
175 
176 
177  // Private Member Functions
178 
179  //- Find and return an entry data stream pointer if present
180  // otherwise return nullptr. Supports scoping using '.'
181  const entry* lookupDotScopedSubEntryPtr
182  (
183  const word&,
184  bool recursive,
185  bool patternMatch
186  ) const;
187 
188  //- Find and return an entry data stream pointer if present
189  // otherwise return nullptr. Supports scoping using '/'
190  const entry* lookupSlashScopedSubEntryPtr
191  (
192  const word&,
193  bool recursive,
194  bool patternMatch
195  ) const;
196 
197  //- Find and return an entry data stream pointer if present
198  // otherwise return nullptr. Supports scoping using '/' or '.'
199  const entry* lookupScopedSubEntryPtr
200  (
201  const word&,
202  bool recursive,
203  bool patternMatch
204  ) const;
205 
206  //- Search patterns table for exact match or regular expression match
207  bool findInPatterns
208  (
209  const bool patternMatch,
210  const word& Keyword,
213  ) const;
214 
215  //- Search patterns table for exact match or regular expression match
216  bool findInPatterns
217  (
218  const bool patternMatch,
219  const word& Keyword,
220  DLList<entry*>::iterator& wcLink,
222  );
223 
224 
225  // Private Classes
227  class includedDictionary;
228 
229 
230 public:
231 
232  //- Declare friendship with the entry class for IO
233  friend class entry;
234 
235 
236  // Declare name of the class and its debug switch
237  ClassName("dictionary");
238 
239 
240  // Public static data
241 
242  //- Null dictionary
243  static const dictionary null;
244 
245  //- If true write optional keywords and values
246  // if not present in dictionary
247  static bool writeOptionalEntries;
248 
249 
250  // Constructors
251 
252  //- Construct top-level dictionary null
253  dictionary();
254 
255  //- Construct top-level empty dictionary with given name
256  dictionary(const fileName& name);
257 
258  //- Construct given the entry name, parent dictionary and Istream,
259  // reading entries until lastEntry or EOF
260  dictionary
261  (
262  const fileName& name,
263  const dictionary& parentDict,
264  Istream&
265  );
266 
267  //- Construct top-level dictionary from Istream,
268  // reading entries until EOF, optionally keeping the header
269  dictionary(Istream&, const bool keepHeader=false);
270 
271  //- Construct as copy given the parent dictionary
272  dictionary(const dictionary& parentDict, const dictionary&);
273 
274  //- Construct top-level dictionary as copy
275  dictionary(const dictionary&);
276 
277  //- Construct top-level dictionary as copy from pointer to dictionary.
278  // A null pointer is treated like an empty dictionary.
279  dictionary(const dictionary*);
280 
281  //- Move constructor transferring parameter contents
282  // given parent dictionary
283  dictionary(const dictionary& parentDict, dictionary&&);
284 
285  //- Move constructor
287 
288  //- Construct and return clone
289  autoPtr<dictionary> clone() const;
290 
291  //- Construct top-level dictionary on freestore from Istream
293 
294 
295  //- Destructor
296  virtual ~dictionary();
297 
298 
299  // Member Functions
300 
301  //- Return the parent dictionary
302  const dictionary& parent() const
303  {
304  return parent_;
305  }
306 
307  //- Return whether this dictionary is null
308  bool isNull() const
309  {
310  return this == &null;
311  }
312 
313  //- Return the top of the tree
314  const dictionary& topDict() const;
315 
316  //- Return the scoped keyword with which this dictionary can be
317  // accessed from the top dictionary in the tree
318  word topDictKeyword() const;
319 
320  //- Return line number of first token in dictionary
321  label startLineNumber() const;
322 
323  //- Return line number of last token in dictionary
324  label endLineNumber() const;
325 
326  //- Return the SHA1 digest of the dictionary contents
327  SHA1Digest digest() const;
328 
329  //- Return the dictionary as a list of tokens
330  tokenList tokens() const;
331 
332 
333  // Search and lookup
334 
335  //- Search dictionary for given keyword
336  // If recursive, search parent dictionaries
337  // If patternMatch, use regular expressions
338  bool found
339  (
340  const word&,
341  bool recursive=false,
342  bool patternMatch=true
343  ) const;
344 
345  //- Find and return an entry data stream pointer if present
346  // otherwise return nullptr.
347  // If recursive, search parent dictionaries.
348  // If patternMatch, use regular expressions
349  const entry* lookupEntryPtr
350  (
351  const word&,
352  bool recursive,
353  bool patternMatch
354  ) const;
355 
356  //- Find and return an entry data stream pointer for manipulation
357  // if present otherwise return nullptr.
358  // If recursive, search parent dictionaries.
359  // If patternMatch, use regular expressions.
360  entry* lookupEntryPtr
361  (
362  const word&,
363  bool recursive,
364  bool patternMatch
365  );
366 
367  //- Find and return an entry data stream if present, trying a list
368  // of keywords in sequence, otherwise return nullptr.
369  // If recursive, search parent dictionaries.
370  // If patternMatch, use regular expressions
371  const entry* lookupEntryPtrBackwardsCompatible
372  (
373  const wordList&,
374  bool recursive,
375  bool patternMatch
376  ) const;
377 
378  //- Find and return an entry data stream if present otherwise error.
379  // If recursive, search parent dictionaries.
380  // If patternMatch, use regular expressions.
381  const entry& lookupEntry
382  (
383  const word&,
384  bool recursive,
385  bool patternMatch
386  ) const;
387 
388  //- Find and return an entry data stream if present, trying a list
389  // of keywords in sequence, otherwise error.
390  // If recursive, search parent dictionaries.
391  // If patternMatch, use regular expressions
392  const entry& lookupEntryBackwardsCompatible
393  (
394  const wordList&,
395  bool recursive,
396  bool patternMatch
397  ) const;
398 
399  //- Find and return an entry data stream
400  // If recursive, search parent dictionaries.
401  // If patternMatch, use regular expressions.
403  (
404  const word&,
405  bool recursive=false,
406  bool patternMatch=true
407  ) const;
408 
409  //- Find and return an entry data stream, trying a list of keywords
410  // in sequence
411  // if not found throw a fatal error relating to the first keyword
412  // If recursive, search parent dictionaries.
413  // If patternMatch, use regular expressions.
414  ITstream& lookupBackwardsCompatible
415  (
416  const wordList&,
417  bool recursive=false,
418  bool patternMatch=true
419  ) const;
420 
421  //- Find and return a T,
422  // if not found throw a fatal error.
423  // If recursive, search parent dictionaries.
424  // If patternMatch, use regular expressions.
425  template<class T>
426  T lookup
427  (
428  const word&,
429  bool recursive=false,
430  bool patternMatch=true
431  ) const;
432 
433  //- Find and return a T, trying a list of keywords in sequence
434  // if not found throw a fatal error relating to the first keyword
435  // If recursive, search parent dictionaries.
436  // If patternMatch, use regular expressions.
437  template<class T>
438  T lookupBackwardsCompatible
439  (
440  const wordList&,
441  bool recursive=false,
442  bool patternMatch=true
443  ) const;
444 
445  //- Find and return a T,
446  // if not found return the given default value.
447  // If recursive, search parent dictionaries.
448  // If patternMatch, use regular expressions.
449  template<class T>
450  T lookupOrDefault
451  (
452  const word&,
453  const T&,
454  bool recursive=false,
455  bool patternMatch=true
456  ) const;
457 
458  //- Find and return a T, trying a list of keywords in sequence
459  // if not found throw a fatal error relating to the first keyword
460  // If recursive, search parent dictionaries.
461  // If patternMatch, use regular expressions.
462  template<class T>
463  T lookupOrDefaultBackwardsCompatible
464  (
465  const wordList&,
466  const T&,
467  bool recursive=false,
468  bool patternMatch=true
469  ) const;
470 
471  //- Find and return a T, if not found return the given
472  // default value, and add to dictionary.
473  // If recursive, search parent dictionaries.
474  // If patternMatch, use regular expressions.
475  template<class T>
476  T lookupOrAddDefault
477  (
478  const word&,
479  const T&,
480  bool recursive=false,
481  bool patternMatch=true
482  );
483 
484  //- Find an entry if present, and assign to T
485  // Returns true if the entry was found.
486  // If recursive, search parent dictionaries.
487  // If patternMatch, use regular expressions.
488  template<class T>
489  bool readIfPresent
490  (
491  const word&,
492  T&,
493  bool recursive=false,
494  bool patternMatch=true
495  ) const;
496 
497  //- Find and return an entry data stream pointer if present
498  // otherwise return nullptr. Allows scoping using '/' with
499  // special handling for '!' and '..'.
500  const entry* lookupScopedEntryPtr
501  (
502  const word&,
503  bool recursive,
504  bool patternMatch
505  ) const;
506 
507  //- Check if entry is a sub-dictionary
508  bool isDict(const word&) const;
509 
510  //- Find and return a sub-dictionary pointer if present
511  // otherwise return nullptr.
512  const dictionary* subDictPtr(const word&) const;
513 
514  //- Find and return a sub-dictionary pointer if present
515  // otherwise return nullptr.
516  dictionary* subDictPtr(const word&);
517 
518  //- Find and return a sub-dictionary
519  const dictionary& subDict(const word&) const;
520 
521  //- Find and return a sub-dictionary for manipulation
522  dictionary& subDict(const word&);
523 
524  //- Find and return a sub-dictionary as a copy, or
525  // return an empty dictionary if the sub-dictionary does not exist
526  dictionary subOrEmptyDict
527  (
528  const word&,
529  const bool mustRead = false
530  ) const;
531 
532  //- Find and return a sub-dictionary if found
533  // otherwise return this dictionary
534  const dictionary& optionalSubDict(const word&) const;
535 
536  //- Find and return a sub-dictionary by scoped lookup
537  // i.e. the keyword may contain scope characters.
538  // If the keyword is null this dictionary is returned
539  const dictionary& scopedDict(const word&) const;
540 
541  //- Find and return a sub-dictionary by scoped lookup
542  // i.e. the keyword may contain scope characters.
543  // If the keyword is null this dictionary is returned
544  dictionary& scopedDict(const word&);
545 
546  //- Return the table of contents
547  wordList toc() const;
548 
549  //- Return the sorted table of contents
550  wordList sortedToc() const;
551 
552  //- Return the list of available keys or patterns
553  List<keyType> keys(bool patterns=false) const;
554 
555 
556  // Editing
557 
558  //- Substitute the given keyword prepended by '$' with the
559  // corresponding sub-dictionary entries
560  bool substituteKeyword(const word& keyword);
561 
562  //- Substitute the given scoped keyword prepended by '$' with the
563  // corresponding sub-dictionary entries
564  bool substituteScopedKeyword(const word& keyword);
565 
566  //- Add a new entry
567  // With the merge option, dictionaries are interwoven and
568  // primitive entries are overwritten
569  bool add(entry*, bool mergeEntry=false);
570 
571  //- Add an entry
572  // With the merge option, dictionaries are interwoven and
573  // primitive entries are overwritten
574  void add(const entry&, bool mergeEntry=false);
575 
576  //- Add a word entry
577  // optionally overwrite an existing entry
578  void add(const keyType&, const word&, bool overwrite=false);
579 
580  //- Add a string entry
581  // optionally overwrite an existing entry
582  void add(const keyType&, const string&, bool overwrite=false);
583 
584  //- Add a label entry
585  // optionally overwrite an existing entry
586  void add(const keyType&, const label, bool overwrite=false);
587 
588  //- Add a scalar entry
589  // optionally overwrite an existing entry
590  void add(const keyType&, const scalar, bool overwrite=false);
591 
592  //- Add a dictionary entry
593  // optionally merge with an existing sub-dictionary
594  void add
595  (
596  const keyType&,
597  const dictionary&,
598  bool mergeEntry=false
599  );
600 
601  //- Add a T entry
602  // optionally overwrite an existing entry
603  template<class T>
604  void add(const keyType&, const T&, bool overwrite=false);
605 
606  //- Assign a new entry, overwrite any existing entry
607  void set(entry*);
608 
609  //- Assign a new entry, overwrite any existing entry
610  void set(const entry&);
611 
612  //- Assign a dictionary entry, overwrite any existing entry
613  void set(const keyType&, const dictionary&);
614 
615  //- Assign a T entry, overwrite any existing entry
616  template<class T>
617  void set(const keyType&, const T&);
618 
619  //- Remove an entry specified by keyword
620  bool remove(const word&);
621 
622  //- Change the keyword for an entry,
623  // optionally forcing overwrite of an existing entry
624  bool changeKeyword
625  (
626  const keyType& oldKeyword,
627  const keyType& newKeyword,
628  bool forceOverwrite=false
629  );
630 
631  //- Merge entries from the given dictionary.
632  // Also merge sub-dictionaries as required.
633  bool merge(const dictionary&);
634 
635  //- Clear the dictionary
636  void clear();
637 
638  //- Transfer the contents of the argument and annul the argument.
639  void transfer(dictionary&);
640 
641 
642  // Read
643 
644  //- Read dictionary from Istream, optionally keeping the header
645  bool read(Istream&, const bool keepHeader=false);
646 
647  //- Return true if the dictionary global,
648  // i.e. the same on all processors.
649  // Defaults to false, must be overridden by global IO dictionaries
650  virtual bool global() const;
651 
652 
653  // Write
654 
655  //- Write dictionary, normally with sub-dictionary formatting
656  void write(Ostream&, const bool subDict=true) const;
657 
658 
659  // Member Operators
660 
661  //- Find and return entry
662  ITstream& operator[](const word&) const;
663 
664  void operator=(const dictionary&);
665 
666  void operator=(dictionary&&);
667 
668  //- Include entries from the given dictionary.
669  // Warn, but do not overwrite existing entries.
670  void operator+=(const dictionary&);
671 
672  //- Conditionally include entries from the given dictionary.
673  // Do not overwrite existing entries.
674  void operator|=(const dictionary&);
675 
676  //- Unconditionally include entries from the given dictionary.
677  // Overwrite existing entries.
678  void operator<<=(const dictionary&);
679 
680 
681  // IOstream Operators
682 
683  //- Read dictionary from Istream
684  friend Istream& operator>>(Istream&, dictionary&);
685 
686  //- Write dictionary to Ostream
687  friend Ostream& operator<<(Ostream&, const dictionary&);
688 };
689 
690 
691 // Private Classes
694 :
695  public dictionary
696 {
697  // Private Data
698 
699  //- Global IO status inherited from the parent dictionary
700  bool global_;
701 
702 public:
703 
704  // Constructors
705 
706  //- Construct an included dictionary for the given parent
707  // setting the "global" status dictionary without setting the parent
709  (
710  const fileName& fName,
711  const dictionary& parentDict
712  );
713 
714  //- Destructor
715  virtual ~includedDictionary()
716  {}
717 
718 
719  // Member Functions
720 
721  //- Return true if the dictionary global,
722  // i.e. the same on all processors.
723  // Inherited from the parent dictionary into which this is included
724  virtual bool global() const
725  {
726  return global_;
727  }
728 };
729 
730 
731 // Global Operators
732 
733 //- Combine dictionaries.
734 // Starting from the entries in dict1 and then including those from dict2.
735 // Warn, but do not overwrite the entries from dict1.
736 dictionary operator+(const dictionary& dict1, const dictionary& dict2);
737 
738 //- Combine dictionaries.
739 // Starting from the entries in dict1 and then including those from dict2.
740 // Do not overwrite the entries from dict1.
741 dictionary operator|(const dictionary& dict1, const dictionary& dict2);
742 
743 
744 // Global Functions
745 
746 //- Parse dictionary substitution argument list
747 void dictArgList
748 (
749  const string& funcArgs,
750  word& funcName,
751  wordReList& args,
752  List<Tuple2<word, string>>& namedArgs
753 );
754 
755 //- Parse dictionary substitution argument list
756 void dictArgList
757 (
758  const string& funcArgs,
759  wordReList& args,
760  List<Tuple2<word, string>>& namedArgs
761 );
762 
763 //- Extracts dict name and keyword
764 Pair<word> dictAndKeyword(const word& scopedName);
765 
766 //- Write a dictionary entry
767 void writeEntry(Ostream& os, const dictionary& dict);
768 
769 //- Helper function to write the keyword and entry
770 template<class EntryType>
771 void writeEntry(Ostream& os, const word& entryName, const EntryType& value);
772 
773 //- Helper function to write the keyword and entry only if the
774 // values are not equal. The value is then output as value2
775 template<class EntryType>
777 (
778  Ostream& os,
779  const word& entryName,
780  const EntryType& value1,
781  const EntryType& value2
782 );
783 
784 
785 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
786 
787 } // End namespace Foam
788 
789 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
790 
791 #ifdef NoRepository
792  #include "dictionaryTemplates.C"
793 #endif
794 
795 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
796 
797 #endif
798 
799 // ************************************************************************* //
Template class for intrusive linked lists.
Definition: ILList.H:50
A class for handling keywords in dictionaries.
Definition: keyType.H:66
dictionary dict
HashSet< Key, Hash > operator|(const HashSet< Key, Hash > &hash1, const HashSet< Key, Hash > &hash2)
Combine entries from HashSets.
tUEqn clear()
A class for handling file names.
Definition: fileName.H:79
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:156
A 2-tuple for storing two objects of different types.
Definition: HashTable.H:65
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Template class for non-intrusive linked lists.
Definition: LList.H:51
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Definition: Istream.H:57
dictionaryName()
Construct dictionaryName null.
Definition: dictionary.H:90
void writeEntryIfDifferent(Ostream &os, const word &entryName, const EntryType &value1, const EntryType &value2)
Helper function to write the keyword and entry only if the.
An STL-conforming const_iterator.
Definition: LList.H:297
The SHA1 message digest.
Definition: SHA1Digest.H:62
An STL-conforming iterator.
Definition: LList.H:246
An STL-conforming const_iterator.
Definition: UILList.H:234
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
const word dictName() const
Return the local dictionary name (final part of scoped name)
Definition: dictionary.H:121
#define ClassName(TypeNameString)
Add typeName information from argument TypeNameString to a class.
Definition: className.H:65
Pair< word > dictAndKeyword(const word &scopedName)
Extracts dict name and keyword.
Definition: dictionary.C:1796
bool read(const char *, int32_t &)
Definition: int32IO.C:85
stressControl lookup("compactNormalStress") >> compactNormalStress
T clone(const T &t)
Definition: List.H:54
bool isNull(const T &t)
Return true if t is a reference to the nullObject of type T.
Definition: nullObjectI.H:46
const fileName & name() const
Return the dictionary name.
Definition: dictionary.H:109
Intrusive doubly-linked list.
A class for handling words, derived from string.
Definition: word.H:59
Istream & operator>>(Istream &, directionInfo &)
word name() const
Return file name (part beyond last /)
Definition: fileName.C:195
An STL-conforming iterator.
Definition: UILList.H:185
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
tmp< fvMatrix< Type > > operator+(const fvMatrix< Type > &, const fvMatrix< Type > &)
An STL-conforming hash table.
Definition: HashTable.H:61
graph_traits< Graph >::vertices_size_type size_type
Definition: SloanRenumber.C:73
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:54
void add(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
Definition: HashTableIO.C:96
void operator=(const dictionaryName &name)
Definition: dictionary.H:140
Macro definitions for declaring ClassName(), NamespaceName(), etc.
Ostream & operator<<(Ostream &, const ensightPart &)
Non-intrusive doubly-linked list.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:52
Foam::argList args(argc, argv)
bool found
void dictArgList(const string &funcArgs, word &funcName, wordReList &args, List< Tuple2< word, string >> &namedArgs)
Parse dictionary substitution argument list.
Definition: dictionary.C:1637
Input token stream.
Definition: ITstream.H:49
Namespace for OpenFOAM.
A keyword and a list of tokens is an &#39;entry&#39;.
Definition: entry.H:65