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 line number of first token in dictionary
317  label startLineNumber() const;
318 
319  //- Return line number of last token in dictionary
320  label endLineNumber() const;
321 
322  //- Return the SHA1 digest of the dictionary contents
323  SHA1Digest digest() const;
324 
325  //- Return the dictionary as a list of tokens
326  tokenList tokens() const;
327 
328 
329  // Search and lookup
330 
331  //- Search dictionary for given keyword
332  // If recursive, search parent dictionaries
333  // If patternMatch, use regular expressions
334  bool found
335  (
336  const word&,
337  bool recursive=false,
338  bool patternMatch=true
339  ) const;
340 
341  //- Find and return an entry data stream pointer if present
342  // otherwise return nullptr.
343  // If recursive, search parent dictionaries.
344  // If patternMatch, use regular expressions
345  const entry* lookupEntryPtr
346  (
347  const word&,
348  bool recursive,
349  bool patternMatch
350  ) const;
351 
352  //- Find and return an entry data stream pointer for manipulation
353  // if present otherwise return nullptr.
354  // If recursive, search parent dictionaries.
355  // If patternMatch, use regular expressions.
356  entry* lookupEntryPtr
357  (
358  const word&,
359  bool recursive,
360  bool patternMatch
361  );
362 
363  //- Find and return an entry data stream if present, trying a list
364  // of keywords in sequence, otherwise return nullptr.
365  // If recursive, search parent dictionaries.
366  // If patternMatch, use regular expressions
367  const entry* lookupEntryPtrBackwardsCompatible
368  (
369  const wordList&,
370  bool recursive,
371  bool patternMatch
372  ) const;
373 
374  //- Find and return an entry data stream if present otherwise error.
375  // If recursive, search parent dictionaries.
376  // If patternMatch, use regular expressions.
377  const entry& lookupEntry
378  (
379  const word&,
380  bool recursive,
381  bool patternMatch
382  ) const;
383 
384  //- Find and return an entry data stream if present, trying a list
385  // of keywords in sequence, otherwise error.
386  // If recursive, search parent dictionaries.
387  // If patternMatch, use regular expressions
388  const entry& lookupEntryBackwardsCompatible
389  (
390  const wordList&,
391  bool recursive,
392  bool patternMatch
393  ) const;
394 
395  //- Find and return an entry data stream
396  // If recursive, search parent dictionaries.
397  // If patternMatch, use regular expressions.
399  (
400  const word&,
401  bool recursive=false,
402  bool patternMatch=true
403  ) const;
404 
405  //- Find and return an entry data stream, trying a list of keywords
406  // in sequence
407  // if not found throw a fatal error relating to the first keyword
408  // If recursive, search parent dictionaries.
409  // If patternMatch, use regular expressions.
410  ITstream& lookupBackwardsCompatible
411  (
412  const wordList&,
413  bool recursive=false,
414  bool patternMatch=true
415  ) const;
416 
417  //- Find and return a T,
418  // if not found throw a fatal error.
419  // If recursive, search parent dictionaries.
420  // If patternMatch, use regular expressions.
421  template<class T>
422  T lookup
423  (
424  const word&,
425  bool recursive=false,
426  bool patternMatch=true
427  ) const;
428 
429  //- Find and return a T, trying a list of keywords in sequence
430  // if not found throw a fatal error relating to the first keyword
431  // If recursive, search parent dictionaries.
432  // If patternMatch, use regular expressions.
433  template<class T>
434  T lookupBackwardsCompatible
435  (
436  const wordList&,
437  bool recursive=false,
438  bool patternMatch=true
439  ) const;
440 
441  //- Find and return a T,
442  // if not found return the given default value.
443  // If recursive, search parent dictionaries.
444  // If patternMatch, use regular expressions.
445  template<class T>
446  T lookupOrDefault
447  (
448  const word&,
449  const T&,
450  bool recursive=false,
451  bool patternMatch=true
452  ) const;
453 
454  //- Find and return a T, trying a list of keywords in sequence
455  // if not found throw a fatal error relating to the first keyword
456  // If recursive, search parent dictionaries.
457  // If patternMatch, use regular expressions.
458  template<class T>
459  T lookupOrDefaultBackwardsCompatible
460  (
461  const wordList&,
462  const T&,
463  bool recursive=false,
464  bool patternMatch=true
465  ) const;
466 
467  //- Find and return a T, if not found return the given
468  // default value, and add to dictionary.
469  // If recursive, search parent dictionaries.
470  // If patternMatch, use regular expressions.
471  template<class T>
472  T lookupOrAddDefault
473  (
474  const word&,
475  const T&,
476  bool recursive=false,
477  bool patternMatch=true
478  );
479 
480  //- Find an entry if present, and assign to T
481  // Returns true if the entry was found.
482  // If recursive, search parent dictionaries.
483  // If patternMatch, use regular expressions.
484  template<class T>
485  bool readIfPresent
486  (
487  const word&,
488  T&,
489  bool recursive=false,
490  bool patternMatch=true
491  ) const;
492 
493  //- Find and return an entry data stream pointer if present
494  // otherwise return nullptr. Allows scoping using '/' with
495  // special handling for '!' and '..'.
496  const entry* lookupScopedEntryPtr
497  (
498  const word&,
499  bool recursive,
500  bool patternMatch
501  ) const;
502 
503  //- Check if entry is a sub-dictionary
504  bool isDict(const word&) const;
505 
506  //- Find and return a sub-dictionary pointer if present
507  // otherwise return nullptr.
508  const dictionary* subDictPtr(const word&) const;
509 
510  //- Find and return a sub-dictionary pointer if present
511  // otherwise return nullptr.
512  dictionary* subDictPtr(const word&);
513 
514  //- Find and return a sub-dictionary
515  const dictionary& subDict(const word&) const;
516 
517  //- Find and return a sub-dictionary for manipulation
518  dictionary& subDict(const word&);
519 
520  //- Find and return a sub-dictionary as a copy, or
521  // return an empty dictionary if the sub-dictionary does not exist
522  dictionary subOrEmptyDict
523  (
524  const word&,
525  const bool mustRead = false
526  ) const;
527 
528  //- Find and return a sub-dictionary if found
529  // otherwise return this dictionary
530  const dictionary& optionalSubDict(const word&) const;
531 
532  //- Find and return a sub-dictionary by scoped lookup
533  // i.e. the keyword may contain scope characters.
534  // If the keyword is null this dictionary is returned
535  const dictionary& scopedDict(const word&) const;
536 
537  //- Find and return a sub-dictionary by scoped lookup
538  // i.e. the keyword may contain scope characters.
539  // If the keyword is null this dictionary is returned
540  dictionary& scopedDict(const word&);
541 
542  //- Return the table of contents
543  wordList toc() const;
544 
545  //- Return the sorted table of contents
546  wordList sortedToc() const;
547 
548  //- Return the list of available keys or patterns
549  List<keyType> keys(bool patterns=false) const;
550 
551 
552  // Editing
553 
554  //- Substitute the given keyword prepended by '$' with the
555  // corresponding sub-dictionary entries
556  bool substituteKeyword(const word& keyword);
557 
558  //- Substitute the given scoped keyword prepended by '$' with the
559  // corresponding sub-dictionary entries
560  bool substituteScopedKeyword(const word& keyword);
561 
562  //- Add a new entry
563  // With the merge option, dictionaries are interwoven and
564  // primitive entries are overwritten
565  bool add(entry*, bool mergeEntry=false);
566 
567  //- Add an entry
568  // With the merge option, dictionaries are interwoven and
569  // primitive entries are overwritten
570  void add(const entry&, bool mergeEntry=false);
571 
572  //- Add a word entry
573  // optionally overwrite an existing entry
574  void add(const keyType&, const word&, bool overwrite=false);
575 
576  //- Add a string entry
577  // optionally overwrite an existing entry
578  void add(const keyType&, const string&, bool overwrite=false);
579 
580  //- Add a label entry
581  // optionally overwrite an existing entry
582  void add(const keyType&, const label, bool overwrite=false);
583 
584  //- Add a scalar entry
585  // optionally overwrite an existing entry
586  void add(const keyType&, const scalar, bool overwrite=false);
587 
588  //- Add a dictionary entry
589  // optionally merge with an existing sub-dictionary
590  void add
591  (
592  const keyType&,
593  const dictionary&,
594  bool mergeEntry=false
595  );
596 
597  //- Add a T entry
598  // optionally overwrite an existing entry
599  template<class T>
600  void add(const keyType&, const T&, bool overwrite=false);
601 
602  //- Assign a new entry, overwrite any existing entry
603  void set(entry*);
604 
605  //- Assign a new entry, overwrite any existing entry
606  void set(const entry&);
607 
608  //- Assign a dictionary entry, overwrite any existing entry
609  void set(const keyType&, const dictionary&);
610 
611  //- Assign a T entry, overwrite any existing entry
612  template<class T>
613  void set(const keyType&, const T&);
614 
615  //- Remove an entry specified by keyword
616  bool remove(const word&);
617 
618  //- Change the keyword for an entry,
619  // optionally forcing overwrite of an existing entry
620  bool changeKeyword
621  (
622  const keyType& oldKeyword,
623  const keyType& newKeyword,
624  bool forceOverwrite=false
625  );
626 
627  //- Merge entries from the given dictionary.
628  // Also merge sub-dictionaries as required.
629  bool merge(const dictionary&);
630 
631  //- Clear the dictionary
632  void clear();
633 
634  //- Transfer the contents of the argument and annul the argument.
635  void transfer(dictionary&);
636 
637 
638  // Read
639 
640  //- Read dictionary from Istream, optionally keeping the header
641  bool read(Istream&, const bool keepHeader=false);
642 
643  //- Return true if the dictionary global,
644  // i.e. the same on all processors.
645  // Defaults to false, must be overridden by global IO dictionaries
646  virtual bool global() const;
647 
648 
649  // Write
650 
651  //- Write dictionary, normally with sub-dictionary formatting
652  void write(Ostream&, const bool subDict=true) const;
653 
654 
655  // Member Operators
656 
657  //- Find and return entry
658  ITstream& operator[](const word&) const;
659 
660  void operator=(const dictionary&);
661 
662  void operator=(dictionary&&);
663 
664  //- Include entries from the given dictionary.
665  // Warn, but do not overwrite existing entries.
666  void operator+=(const dictionary&);
667 
668  //- Conditionally include entries from the given dictionary.
669  // Do not overwrite existing entries.
670  void operator|=(const dictionary&);
671 
672  //- Unconditionally include entries from the given dictionary.
673  // Overwrite existing entries.
674  void operator<<=(const dictionary&);
675 
676 
677  // IOstream Operators
678 
679  //- Read dictionary from Istream
680  friend Istream& operator>>(Istream&, dictionary&);
681 
682  //- Write dictionary to Ostream
683  friend Ostream& operator<<(Ostream&, const dictionary&);
684 };
685 
686 
687 // Private Classes
690 :
691  public dictionary
692 {
693  // Private Data
694 
695  //- Global IO status inherited from the parent dictionary
696  bool global_;
697 
698 public:
699 
700  // Constructors
701 
702  //- Construct an included dictionary for the given parent
703  // setting the "global" status dictionary without setting the parent
705  (
706  const fileName& fName,
707  const dictionary& parentDict
708  );
709 
710  //- Destructor
711  virtual ~includedDictionary()
712  {}
713 
714 
715  // Member Functions
716 
717  //- Return true if the dictionary global,
718  // i.e. the same on all processors.
719  // Inherited from the parent dictionary into which this is included
720  virtual bool global() const
721  {
722  return global_;
723  }
724 };
725 
726 
727 // Global Operators
728 
729 //- Combine dictionaries.
730 // Starting from the entries in dict1 and then including those from dict2.
731 // Warn, but do not overwrite the entries from dict1.
732 dictionary operator+(const dictionary& dict1, const dictionary& dict2);
733 
734 //- Combine dictionaries.
735 // Starting from the entries in dict1 and then including those from dict2.
736 // Do not overwrite the entries from dict1.
737 dictionary operator|(const dictionary& dict1, const dictionary& dict2);
738 
739 
740 // Global Functions
741 
742 //- Parse dictionary substitution argument list
743 void dictArgList
744 (
745  const string& funcArgs,
746  word& funcName,
747  wordReList& args,
748  List<Tuple2<word, string>>& namedArgs
749 );
750 
751 //- Parse dictionary substitution argument list
752 void dictArgList
753 (
754  const string& funcArgs,
755  wordReList& args,
756  List<Tuple2<word, string>>& namedArgs
757 );
758 
759 //- Extracts dict name and keyword
760 Pair<word> dictAndKeyword(const word& scopedName);
761 
762 //- Write a dictionary entry
763 void writeEntry(Ostream& os, const dictionary& dict);
764 
765 //- Helper function to write the keyword and entry
766 template<class EntryType>
767 void writeEntry(Ostream& os, const word& entryName, const EntryType& value);
768 
769 //- Helper function to write the keyword and entry only if the
770 // values are not equal. The value is then output as value2
771 template<class EntryType>
773 (
774  Ostream& os,
775  const word& entryName,
776  const EntryType& value1,
777  const EntryType& value2
778 );
779 
780 
781 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
782 
783 } // End namespace Foam
784 
785 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
786 
787 #ifdef NoRepository
788  #include "dictionaryTemplates.C"
789 #endif
790 
791 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
792 
793 #endif
794 
795 // ************************************************************************* //
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()
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
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:1776
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:1617
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