54 "iIstream is not good for reading tokens .... \n";
61 if( nextTok == token::END_BLOCK)
64 "Not expecting a } for the start of a dictionray \n";
68 bool hasBlockToken =
true;
71 if(nextTok != token::BEGIN_BLOCK)
73 hasBlockToken =
false;
79 while ( !is.
eof() && iEntry::createEntry(*
this, is, hasBlockToken) )
94 for(
const auto& e:orderedEntries_)
110 if(
auto [ptr, exist] = entries_.find(keyword); exist)
125 if(
auto [ptr, exist] = entries_.find(keyword); exist)
127 return const_cast<iEntry*
> (ptr);
141 parDict_(dictionary::nullDict),
154 parDict_(dictionary::nullDict),
169 parDict_(dictionary::nullDict),
184 parDict_(dictionary::nullDict),
189 if(!read(dictStream))
192 "error in reading dictionary from file "<< file <<
endl;
229 if( !readDictionary(is) )
232 "error in reading dictionary " << name_ <<
endl;
256 auto ptr = entry->
clone(*
this);
257 auto key = entry->name();
259 if( !addPtr(key, ptr) )
262 " error in cloning dicrionary / dataEntry " << entry->globalName() <<
endl;
279 parDict_(dictionary::nullDict),
288 auto ptr = entry->
clone(*
this);
289 auto key = entry->name();
291 if( !addPtr(key, ptr) )
294 " error in cloning dicrionary / dataEntry " << entry->globalName() <<
endl;
308 if( &rhs ==
this)
return *
this;
312 for(
auto& entry: rhs.orderedEntries_)
317 auto ptr = entry->clone(*
this);
318 auto key = entry->name();
320 if( !addPtr(key, ptr) )
323 " error in cloning dicrionary / dataEntry " << entry->globalName() <<
endl;
385 if(entry ==
nullptr)
return false;
387 iEntry* oldEntryPtr =
nullptr;
388 iEntry* newEntryPtr = entry.get();
391 if(
auto [ptr, exist] = entries_.find(keyword); exist )
394 "keyword " << keyword <<
" already exists in the dicrionary " <<
395 this->globalName() <<
". The old entry will be replaced by the new one. \n";
401 if( entries_.insertReplace(keyword, entry) )
406 auto oIter = orderedEntries_.find(oldEntryPtr);
407 *oIter = newEntryPtr;
411 orderedEntries_.push_back(newEntryPtr);
428 return addPtr(keyword, ptr);
438 return addPtr(keyword, ptr);
448 return addPtr(keyword, ptr);
458 return addPtr(keyword, ptr);
468 return addPtr(keyword, ptr);
478 return addPtr(keyword, ptr);
488 return addPtr(keyword, ptr);
498 return addPtr(keyword, ptr);
508 return addPtr(keyword, ptr);
519 return addPtr(keyword, ptr);
524 orderedEntries_.clear();
533 if(
auto entry = findEntry(keyword); entry!=
nullptr && entry->isDictionary() )
540 "keyword " << keyword<<
" is not an sub-dictionary of " << this->globalName()<<
endl;
552 if(
auto entry = findEntry(keyword); entry!=
nullptr && entry->isDictionary() )
559 "keyword " << keyword<<
" is not an sub-dictionary of " << this->globalName()<<
endl;
572 if(
auto entry = findEntry(keyword); entry!=
nullptr && entry->isDictionary() )
579 "keyword " << keyword<<
" is not an sub-dictionary of " << this->globalName()<<
endl;
587 if(
auto entry = findEntry(keyword); entry && !entry->isDictionary() )
594 "keyword " << keyword<<
" is not a dataEntry of " << this->globalName()<<
endl;
602 if(
auto entry = findEntry(keyword); entry && !entry->isDictionary() )
609 "keyword " << keyword<<
" is not a dataEntry of " << this->globalName()<<
endl;
620 if(
auto entry = findEntry(keyword); entry && !entry->isDictionary() )
627 "keyword " << keyword<<
" is not a dataEntry of " << this->globalName()<<
endl;
638 if(
auto entry = findEntry(keyword); entry!=
nullptr && entry->isDictionary() )
652 return subDictOrCreate(keyword);
657 "Unable to create sub-dictionary "<< keyword <<
" in dictionary " << globalName() <<
endl;
666 return entries_.size();
672 for(
auto& e:entries_)
674 if( e.second && !e.second->isDictionary())
685 for(
auto& e:entries_)
687 if( e.second && e.second->isDictionary())
699 for(
auto oe:orderedEntries_)
701 if(oe) wl.push_back( oe->keyword() );
710 for(
auto oe:orderedEntries_)
712 if( oe && !oe->isDictionary())
714 wl.push_back(oe->keyword());
725 for(
auto& oe:orderedEntries_)
727 if( oe && oe->isDictionary())
729 wl.push_back(oe->keyword());
740 if(
auto ptr = findEntry(name); ptr)
742 return ptr->isDictionary();
752 if(
auto ptr = findEntry(name); ptr)
754 return !ptr->isDictionary();
762 if(!isFileDict() && !readKeyword(is, keyword_, tok))
765 "expected a valid keyword for dictionary but found " << tok <<
endl;
769 if( !readDictionary(is) )
772 "error in reading dictionary " << keyword_ <<
endl;
782 if(! writeDictionary(os, !isFileDict()) )
793 return makeUnique<dictionary>(*
this);
800 auto ptr = makeUnique<dictionary>(*
this);
801 return ptr.release();
809 return makeUnique<dictionary>(this->keyword(), parDict, *
this);
817 auto ptr = makeUnique<dictionary>(this->keyword(), parDict, *
this);
818 return ptr.release();