41 bool Foam::dictionary::findInPatterns
43 const bool patternMatch,
45 DLList<entry*>::const_iterator& wcLink,
46 DLList<autoPtr<regExp> >::const_iterator& reLink
49 if (patternEntries_.
size())
51 while (wcLink != patternEntries_.
end())
56 ? reLink()->match(Keyword)
57 : wcLink()->keyword() == Keyword
72 bool Foam::dictionary::findInPatterns
74 const bool patternMatch,
77 DLList<autoPtr<regExp> >::iterator& reLink
80 if (patternEntries_.size())
82 while (wcLink != patternEntries_.end())
87 ? reLink()->match(Keyword)
88 : wcLink()->keyword() == Keyword
130 hashedEntries_.insert(iter().keyword(), &iter());
132 if (iter().keyword().isPattern())
134 patternEntries_.insert(&iter());
135 patternRegexps_.insert
155 hashedEntries_.insert(iter().keyword(), &iter());
157 if (iter().keyword().isPattern())
159 patternEntries_.insert(&iter());
160 patternRegexps_.insert
227 return first()->startLineNumber();
240 return last()->endLineNumber();
265 if (hashedEntries_.found(keyword))
271 if (patternEntries_.size())
274 patternEntries_.
begin();
276 patternRegexps_.begin();
279 if (findInPatterns(
true, keyword, wcLink, reLink))
287 return parent_.found(keyword, recursive);
306 if (iter == hashedEntries_.
end())
308 if (patternMatch && patternEntries_.size())
311 patternEntries_.
begin();
313 patternRegexps_.begin();
316 if (findInPatterns(patternMatch, keyword, wcLink, reLink))
324 return parent_.lookupEntryPtr(keyword, recursive, patternMatch);
345 if (iter == hashedEntries_.
end())
347 if (patternMatch && patternEntries_.size())
350 patternEntries_.
begin();
352 patternRegexps_.begin();
355 if (findInPatterns(patternMatch, keyword, wcLink, reLink))
363 return const_cast<dictionary&
>(parent_).lookupEntryPtr
387 const entry* entryPtr = lookupEntryPtr(keyword, recursive, patternMatch);
389 if (entryPtr == NULL)
393 "dictionary::lookupEntry(const word&, bool, bool) const",
395 ) <<
"keyword " << keyword <<
" is undefined in dictionary "
411 return lookupEntry(keyword, recursive, patternMatch).stream();
418 const entry* entryPtr = lookupEntryPtr(keyword,
false,
true);
422 return entryPtr->
isDict();
433 const entry* entryPtr = lookupEntryPtr(keyword,
false,
true);
437 return &entryPtr->
dict();
448 const entry* entryPtr = lookupEntryPtr(keyword,
false,
true);
450 if (entryPtr == NULL)
454 "dictionary::subDict(const word& keyword) const",
456 ) <<
"keyword " << keyword <<
" is undefined in dictionary "
460 return entryPtr->
dict();
466 entry* entryPtr = lookupEntryPtr(keyword,
false,
true);
468 if (entryPtr == NULL)
472 "dictionary::subDict(const word& keyword)",
474 ) <<
"keyword " << keyword <<
" is undefined in dictionary "
478 return entryPtr->
dict();
487 const entry* entryPtr = lookupEntryPtr(keyword,
false,
true);
489 if (entryPtr == NULL)
495 return entryPtr->
dict();
507 keys[nKeys++] = iter().keyword();
521 if (iter().keyword().isPattern() ? patterns : !patterns)
523 keys[nKeys++] = iter().keyword();
539 if (mergeEntry && iter != hashedEntries_.
end())
542 if (iter()->isDict() && entryPtr->
isDict())
544 iter()->dict().merge(entryPtr->
dict());
554 hashedEntries_.erase(iter);
556 if (hashedEntries_.insert(entryPtr->
keyword(), entryPtr))
562 patternEntries_.insert(entryPtr);
563 patternRegexps_.insert
573 IOWarningIn(
"dictionary::add(entry*, bool)", (*
this))
574 <<
"problem replacing entry "<< entryPtr->
keyword()
575 <<
" in dictionary " <<
name() <<
endl;
584 if (hashedEntries_.insert(entryPtr->
keyword(), entryPtr))
591 patternEntries_.insert(entryPtr);
592 patternRegexps_.insert
602 IOWarningIn(
"dictionary::add(entry*, bool)", (*
this))
603 <<
"attempt to add entry "<< entryPtr->
keyword()
604 <<
" which already exists in dictionary " <<
name()
615 add(e.
clone(*this).ptr(), mergeEntry);
661 entry* existingPtr = lookupEntryPtr(entryPtr->
keyword(),
false,
true);
664 if (existingPtr && existingPtr->
isDict())
674 set(e.
clone(*this).ptr());
688 if (iter != hashedEntries_.
end())
692 patternEntries_.
begin();
694 patternRegexps_.begin();
697 if (findInPatterns(
false, Keyword, wcLink, reLink))
699 patternEntries_.remove(wcLink);
700 patternRegexps_.remove(reLink);
705 hashedEntries_.erase(iter);
724 if (oldKeyword == newKeyword)
732 if (iter == hashedEntries_.
end())
737 if (iter()->keyword().isPattern())
741 "dictionary::changeKeyword(const word&, const word&, bool)"
742 ) <<
"Old keyword "<< oldKeyword
744 <<
"Pattern replacement not yet implemented."
752 if (iter2 != hashedEntries_.
end())
756 if (iter2()->keyword().isPattern())
760 patternEntries_.
begin();
762 patternRegexps_.begin();
765 if (findInPatterns(
false, iter2()->keyword(), wcLink, reLink))
767 patternEntries_.remove(wcLink);
768 patternRegexps_.remove(reLink);
774 hashedEntries_.erase(iter2);
781 "dictionary::changeKeyword(const word&, const word&, bool)"
782 ) <<
"cannot rename keyword "<< oldKeyword
783 <<
" to existing keyword " << newKeyword
784 <<
" in dictionary " <<
name() <<
endl;
790 iter()->keyword() = newKeyword;
791 iter()->name() =
name() +
"::" + newKeyword;
792 hashedEntries_.erase(oldKeyword);
793 hashedEntries_.insert(newKeyword, iter());
797 patternEntries_.insert(iter());
798 patternRegexps_.insert
814 <<
"attempted merge to self for dictionary " <<
name()
818 bool changed =
false;
824 if (fnd != hashedEntries_.
end())
828 if (fnd()->isDict() && iter().isDict())
830 if (fnd()->dict().merge(iter().dict()))
837 add(iter().clone(*this).ptr(),
true);
844 add(iter().clone(*this).ptr());
856 hashedEntries_.clear();
857 patternEntries_.clear();
858 patternRegexps_.clear();
869 hashedEntries_.transfer(dict.hashedEntries_);
870 patternEntries_.transfer(dict.patternEntries_);
871 patternRegexps_.transfer(dict.patternRegexps_);
885 return lookup(keyword);
894 FatalErrorIn(
"dictionary::operator=(const dictionary&)")
895 <<
"attempted assignment to self for dictionary " <<
name()
907 add(iter().clone(*this).ptr());
917 FatalErrorIn(
"dictionary::operator+=(const dictionary&)")
918 <<
"attempted addition assignment to self for dictionary " <<
name()
924 add(iter().clone(*this).ptr());
934 FatalErrorIn(
"dictionary::operator|=(const dictionary&)")
935 <<
"attempted assignment to self for dictionary " <<
name()
941 if (!found(iter().keyword()))
943 add(iter().clone(*this).ptr());
954 FatalErrorIn(
"dictionary::operator<<=(const dictionary&)")
955 <<
"attempted assignment to self for dictionary " <<
name()
961 set(iter().clone(*this).ptr());