dictionary is updated

This commit is contained in:
Hamidreza Norouzi 2023-10-01 20:04:46 +03:30
parent 59c148afa6
commit 5a94fc5688
6 changed files with 181 additions and 132 deletions

View File

@ -14,4 +14,4 @@ add_subdirectory(phasicFlow)
#add_subdirectory(Geometry)
add_subdirectory(MPIParallelization)
#add_subdirectory(MPIParallelization)

View File

@ -27,6 +27,12 @@ streams/streams.cpp
fileSystem/fileSystem.cpp
processors/processors.cpp
dictionary/dictionary.cpp
dictionary/entry/iEntry.cpp
dictionary/entry/dataEntry.cpp
dictionary/twoPartEntry/twoPartEntry.cpp
)
set(link_libs)

View File

@ -468,15 +468,6 @@ bool pFlow::dictionary::add
return addPtr(keyword, ptr);
}
bool pFlow::dictionary::add
(
const word& keyword,
const int16& v
)
{
uniquePtr<iEntry> ptr = makeUnique<dataEntry>(keyword, *this, token(v));
return addPtr(keyword, ptr);
}
bool pFlow::dictionary::add
(
@ -491,7 +482,7 @@ bool pFlow::dictionary::add
bool pFlow::dictionary::add
(
const word& keyword,
const label& v
const uint64& v
)
{
uniquePtr<iEntry> ptr = makeUnique<dataEntry>(keyword, *this, token(v));
@ -508,6 +499,15 @@ bool pFlow::dictionary::add
return addPtr(keyword, ptr);
}
bool pFlow::dictionary::add
(
const word& keyword,
const uint8& v
)
{
uniquePtr<iEntry> ptr = makeUnique<dataEntry>(keyword, *this, token(v));
return addPtr(keyword, ptr);
}
bool pFlow::dictionary::addDict
(

View File

@ -34,7 +34,36 @@ Licence:
namespace pFlow
{
/**
* Dictionary holds a set of data entries or sub-dictionaries that are enclosed
* in a curely braces or are in a file.
*
* data entry format is:
* ```
* entryName value;
* ```
* and a dictionary in a file can be:
* ```
* entryName2 value2;
*
* entryName3 value3;
*
* subDict1
* {
* entryName4 value4;
*
* ....
*
* }
*
* subDict2
* {
* ...
* }
*
* ```
*
*/
class dictionary
:
public iEntry
@ -43,39 +72,39 @@ protected:
//// - Data members
// global name of dictionary, separated with dots
/// global name of dictionary, separated with dots
word name_;
// all the entries (data and dictionary) of the current dictionary
/// all the entries (data and dictionary) of the current dictionary
wordOrderedMapPtr<iEntry> entries_;
// entries in order of insertion
/// entries in order of insertion
List<iEntry*> orderedEntries_;
// - ref to parrent dictionary
/// ref to parrent dictionary
const dictionary& parDict_;
bool isGlobal_;
//// - protected methods
///// protected methods
// - find an entry based on keyword
// return nullptr if not found
/// find an entry based on keyword
/// return nullptr if not found
iEntry* findEntry(const word& keyword);
// - find and entry based on keyword
// return nullptr if not found
/// find and entry based on keyword
/// return nullptr if not found
iEntry* findEntry(const word& keyword)const;
// - reads a dataEntry with keyword from dictionary
/// reads a dataEntry with keyword from dictionary
template<typename T>
bool readDataEntry( const word& keyword, T& val)const;
// - read dictionary from stream - without keyword
/// read dictionary from stream - without keyword
bool readDictionary(iIstream & is);
// - write dictionary to stream - with keyword
/// write dictionary to stream - with keyword
bool writeDictionary(iOstream& os, bool withBlock = true)const;
@ -88,184 +117,184 @@ public:
//// - Constructors
// - cunstructs a null dictionary
/// cunstructs a null dictionary
dictionary();
// - construct an empty dictionary with keyword
/// construct an empty dictionary with keyword
dictionary(const word& keyword);
// - construct an empty dictionary with keyword and make it global/fileDictionary (if true)
/// construct an empty dictionary with keyword and make it global/fileDictionary (if true)
dictionary(const word& keyword, bool global);
// - construct a dictionary with name and read it from file
/// construct a dictionary with name and read it from file
dictionary(const word& keyword, const fileSystem& file);
// - cunstruct an empty dictionary with keyword and parDict
/// cunstruct an empty dictionary with keyword and parDict
dictionary(const word& keyword, const dictionary& parDict);
// - cunstruct a dictionary with keyword and parDict and from stream
/// cunstruct a dictionary with keyword and parDict and from stream
dictionary( const word& keyword, const dictionary& parDict, iIstream& is);
// - copy construct with keyword and new parrent dict
// discard the keyword and parDict of dict
/// copy construct with keyword and new parrent dict
/// discard the keyword and parDict of dict
dictionary(const word& keyword, const dictionary& parDict, const dictionary& dict);
// - copy construct as default behavior
// entries_ are copied smoothly. set parrent dict to nullDict
/// copy construct as default behavior
/// entries_ are copied smoothly. set parrent dict to nullDict
dictionary(const dictionary& );
// - assignment preserve name of this dictionary
// - only entries are transfered with ownership
/// assignment preserve name of this dictionary
/// only entries are transfered with ownership
dictionary& operator=(const dictionary& rhs);
//// - Methods
// - pointer to this dictionary
/// pointer to this dictionary
virtual dictionary* dictPtr();
// - pointer to this dictionary
/// pointer to this dictionary
virtual const dictionary* dictPtr() const;
// - if this is a dictionary
/// if this is a dictionary
virtual bool isDictionary() const;
// - global name of entry, separated with dots
/// global name of entry, separated with dots
virtual word globalName()const;
// - const ref to parrent dictionary
/// const ref to parrent dictionary
virtual const dictionary& parrentDict() const;
// - ref to this dictionary, if it is a dictionary
/// ref to this dictionary, if it is a dictionary
virtual dictionary& dict();
// - const ref to this dictionary, if it is a dictionary
/// const ref to this dictionary, if it is a dictionary
virtual const dictionary& dict() const;
// - if dictionary is file dictionary, return false
/// if dictionary is file dictionary, return false
virtual bool isFileDict()const;
// - add a pointer entry (dictionary/dataEntry)
/// add a pointer entry (dictionary/dataEntry)
// replaces this entry with existing one
bool addPtr(const word& keyword, uniquePtr<iEntry>& etry );
// - add a float dataEntry
/// add a float dataEntry
bool add(const word& keyword, const float& v);
// - add a double dataEntry
/// add a double dataEntry
bool add(const word& keyword, const double& v);
// - add a word dataEntry
/// add a word dataEntry
bool add(const word& keyword, const word& v);
// - add a int64 dataEntry
/// add a int64 dataEntry
bool add(const word& keyword, const int64& v);
// - add a int32 dataEntry
/// add a int32 dataEntry
bool add(const word& keyword, const int32& v);
// - add a int16 dataEntry
bool add(const word& keyword, const int16& v);
// - add a int8 dataEntry
/// add a int8 dataEntry
bool add(const word& keyword, const int8& v);
// - add a label dataEntry
bool add(const word& keyword, const label& v);
/// add a uint64 dataEntry
bool add(const word& keyword, const uint64& v);
// - add a uint32 dataEntry
/// add a uint32 dataEntry
bool add(const word& keyword, const uint32& v);
/// add a uint8 dataEntry
bool add(const word& keyword, const uint8& v);
// add a dictionary with the specifiedd keyword
bool addDict(const word& keyword, const dictionary& dict);
// - add a dataEntry of type T
/// add a dataEntry of type T
template<typename T>
bool add(const word& keyword, const T& v );
void clear();
// - pointer to a subdictionary
// fatalExit if not found
/// pointer to a subdictionary
/// fatalExit if not found
dictionary* subDictPtr(const word& keyword);
// - ref to a subdictioanry
// fatalExit if not found
/// ref to a subdictioanry
/// fatalExit if not found
dictionary& subDict(const word& keyword);
// - const ref to a subdictioanry
// fatalExit if not found
/// const ref to a subdictioanry
/// fatalExit if not found
const dictionary& subDict(const word& keyword) const;
// - pointer to a dataEntry
// fatalExit if not found/not a dataEntry
/// pointer to a dataEntry
/// fatalExit if not found/not a dataEntry
dataEntry* dataEntryPtr(const word& keyword);
// - ref to a subdictioanry
// fatalExit if not found/not a dataEntry
/// ref to a subdictioanry
/// fatalExit if not found/not a dataEntry
dataEntry& dataEntryRef(const word& keyword);
// - const ref to a subdictioanry
// fatalExit if not found/not a dataEntry
/// const ref to a subdictioanry
/// fatalExit if not found/not a dataEntry
const dataEntry& dataEntryRef(const word& keyword)const;
// - search for a sub-dict with keyword
// create a new sub-dict if not found and return a ref to it
// fatalExit if fails
/// search for a sub-dict with keyword
/// create a new sub-dict if not found and return a ref to it
/// fatalExit if fails
dictionary& subDictOrCreate(const word& keyword);
// - get the value of data entry
/// get the value of data entry
template<typename T>
T getVal(const word& keyword) const;
// - get the value of data entry or
// if not found, set the value to setVal
/// get the value of data entry or
/// if not found, set the value to setVal
template<typename T>
T getValOrSet(const word& keyword, const T& setVal)const;
// return number of entris in this dictionary
/// return number of entris in this dictionary
size_t numEntries()const;
// return number of non-nullptr dataEntries
/// return number of non-nullptr dataEntries
size_t numDataEntries()const;
// return number of non-nullptr dictionaries
/// return number of non-nullptr dictionaries
size_t numDictionaries()const;
// return all keywords (non-nullptr) in this dictionary
/// return all keywords (non-nullptr) in this dictionary
wordList allKeywords()const;
// return a list of all dataEntries (non-nullptr) keywords
/// return a list of all dataEntries (non-nullptr) keywords
wordList dataEntryKeywords()const;
// return a list of all dictionary (non-null) keywords
/// return a list of all dictionary (non-null) keywords
wordList dictionaryKeywords()const;
// check if a sub-dictionary exists
/// check if a sub-dictionary exists
bool containsDictionay(const word& name)const;
// check if a data entry exist
/// check if a data entry exist
bool containsDataEntry(const word& name)const;
// clone polymorphic object (here dictionary)
/// clone polymorphic object (here dictionary)
virtual uniquePtr<iEntry> clone() const;
virtual iEntry* clonePtr() const;
// - clone the polymorhpic object with parDict as the new parrent dictionary
/// clone the polymorhpic object with parDict as the new parrent dictionary
virtual uniquePtr<iEntry> clone(const dictionary& parDict)const;
virtual iEntry* clonePtr(const dictionary& parDict) const;
//// IO operations
//// - IO operations
// - read from stream
/// read from stream
virtual bool read(iIstream& is);
// - write to stream
/// write to stream
virtual bool write(iOstream& os) const;
};
@ -338,7 +367,8 @@ T dictionary::getValOrSet
}
}
}
} // pFlow
#endif // __dictionary_hpp__

View File

@ -36,7 +36,15 @@ namespace pFlow
class dictionary;
/**
* Data entry to be used in dictionries. Its format is:
*
* ```
* entryName value;
*
* entryName2 (list of values);
* ```
*/
class dataEntry
:
public iEntry
@ -46,19 +54,19 @@ protected:
//// - data memebers
// - ref to parrent dictionary
/// ref to parrent dictionary
const dictionary& parDict_;
// - list the tokens as input token stream
/// list the tokens as input token stream
iTstream tokenStream_;
//// - protected member functions
// - read dataEntry from stream
/// read dataEntry from stream
bool readDataEntry(iIstream& is);
// - write dataEntry to stream
/// write dataEntry to stream
bool writeDataEntry(iOstream& os) const;
public:
@ -67,57 +75,57 @@ public:
//// - constructors
// - construct null dataEntry
/// construct null dataEntry
dataEntry();
// - construct from keyword and parDict, empty dataEntry
/// construct from keyword and parDict, empty dataEntry
dataEntry(const word& keyword, const dictionary& parDict);
// - construct from keyword, parDict and input token stream
/// construct from keyword, parDict and input token stream
dataEntry(const word& keyWord, const dictionary& parDict, const iTstream& is);
//- construct from keyword, parDict and input stream
dataEntry(const word& keyWord, const dictionary& parDict, iIstream& is);
// - construct from keyword, parDict and a single token
/// construct from keyword, parDict and a single token
dataEntry(const word& keyword, const dictionary& parDict, const token& tok);
// - construct from keyword, parDict, and data of type T
/// construct from keyword, parDict, and data of type T
template<typename T>
dataEntry(const word& keyword, const dictionary& parDict, const T& v);
// - copy construct with new keyword and parDict
/// copy construct with new keyword and parDict
dataEntry(const word& keyword, const dictionary& parDict, const dataEntry& entry );
// - copy construct
/// copy construct
dataEntry(const dataEntry& src )= default;
//// - Methods
// - global name of entry, separated with dots
/// global name of entry, separated with dots
virtual word globalName()const;
// - access to token stream
/// access to token stream
virtual iTstream& stream();
// - not permited to be called
/// not permited to be called
virtual dictionary* dictPtr();
// - not permited to be called
/// not permited to be called
virtual const dictionary* dictPtr() const;
// - should returen false;
/// should returen false;
virtual bool isDictionary()const;
// - const ref to parrent dictionary
/// const ref to parrent dictionary
virtual const dictionary& parrentDict() const;
// - not permited to be called
/// not permited to be called
virtual dictionary& dict();
// - not permited to be called
/// not permited to be called
virtual const dictionary& dict() const;
// clone the object
@ -132,10 +140,10 @@ public:
//// - IO operations
// - read from stream
/// read from stream
virtual bool read(iIstream& is);
// - write to stream
/// write to stream
virtual bool write(iOstream& os) const;
};

View File

@ -35,6 +35,10 @@ namespace pFlow
class dictionary;
/**
* Interface calss for data entry and dictionary
*
*/
class iEntry
{
@ -42,10 +46,10 @@ public:
//// - public static methods
// - read a keyword from stream
/// read a keyword from stream
static bool readKeyword(iIstream &is, word& keyword, token& tok );
// - create an entry (dataEntry or dictionary) from stream
/// create an entry (dataEntry or dictionary) from stream
static bool createEntry(dictionary& parDict, iIstream& is, bool hasBlockToken = false);
protected:
@ -57,41 +61,42 @@ protected:
public:
/// Type info
TypeInfo("iEntry");
//// - Constructors
// - empty constructor
/// empty constructor
iEntry()
{}
// - construct with a keyword
/// construct with a keyword
iEntry(const word& key)
{
// this moved here due to a very strange core dumped error!
keyword_ = key;
}
// - destructor
/// destructor
virtual ~iEntry()
{}
//// - Methods
// - return keyword
/// return keyword
virtual const word& keyword() const
{
return keyword_;
}
// - return keyword
/// return keyword
virtual word& keyword()
{
return keyword_;
}
/// name/keyword of entry
virtual word name()const
{
return keyword();
@ -100,49 +105,50 @@ public:
// global name of entry, separated with dots
virtual word globalName()const = 0;
// - pointer to this dictionary
/// pointer to this dictionary
virtual dictionary* dictPtr()
{
return nullptr;
}
// - const pointer to this dictionary
/// const pointer to this dictionary
virtual const dictionary* dictPtr() const
{
return nullptr;
}
// - if this is a dictionary
/// if this is a dictionary
virtual bool isDictionary() const
{
return false;
}
// - const ref to parrent dictionary
/// const ref to parrent dictionary
virtual const dictionary& parrentDict() const = 0;
// - ref to this dictionary, if it is a dictionary
/// ref to this dictionary, if it is a dictionary
virtual dictionary& dict() = 0;
// - const ref to this dictionary, if it is a dicrionary
/// const ref to this dictionary, if it is a dicrionary
virtual const dictionary& dict() const = 0;
// clone the object
/// clone the object
virtual iEntry* clonePtr() const = 0;
virtual uniquePtr<iEntry> clone() const = 0;
// clone the object and change its ownership to parDict
/// clone the object and change its ownership to parDict
virtual iEntry* clonePtr(const dictionary& parDict) const = 0;
/// clone the object and change its ownership to parDict
virtual uniquePtr<iEntry> clone(const dictionary& parDict)const = 0;
//// - IO operatoins
// read from stream
/// read from stream
virtual bool read(iIstream& is) = 0;
// write to stream
/// write to stream
virtual bool write(iOstream& os) const =0;
};
@ -150,11 +156,10 @@ public:
iOstream& operator << (iOstream& os, const iEntry& e);
iIstream& operator >> (iIstream& is, iEntry& e);
}
} // pFlow
#endif //__iEntry_hpp__