/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . \*---------------------------------------------------------------------------*/ #include "DictionaryBase.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template void Foam::DictionaryBase::addEntries() { for (auto iter = this->begin(); iter != this->end(); ++iter) { this->hashedTs_.insert((*iter).keyword(), &(*iter)); } } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template Foam::DictionaryBase::DictionaryBase(const label size) : hashedTs_(size) {} template Foam::DictionaryBase::DictionaryBase ( const DictionaryBase& dict ) : IDLListType(dict) { addEntries(); } template template Foam::DictionaryBase::DictionaryBase ( Istream& is, const INew& iNew ) : IDLListType(is, iNew) { addEntries(); } template Foam::DictionaryBase::DictionaryBase(Istream& is) : IDLListType(is) { addEntries(); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template bool Foam::DictionaryBase::found(const word& keyword) const { return hashedTs_.found(keyword); } template const T* Foam::DictionaryBase::cfind ( const word& keyword ) const { const auto iter = hashedTs_.cfind(keyword); if (iter.found()) { return *iter; } return nullptr; } template T* Foam::DictionaryBase::find(const word& keyword) { auto iter = hashedTs_.find(keyword); if (iter.found()) { return *iter; } return nullptr; } template const T* Foam::DictionaryBase::lookup(const word& keyword) const { const auto iter = hashedTs_.cfind(keyword); if (!iter.found()) { FatalErrorInFunction << "'" << keyword << "' not found" << exit(FatalError); } return *iter; } template T* Foam::DictionaryBase::lookup(const word& keyword) { auto iter = hashedTs_.find(keyword); if (!iter.found()) { FatalErrorInFunction << "'" << keyword << "' not found" << exit(FatalError); } return *iter; } template Foam::wordList Foam::DictionaryBase::toc() const { // Cannot rely on the items themselves having a keyword() method // so simply return the toc() from the hashed entries // Make it sorted, since anything else would have no meaning. return hashedTs_.sortedToc(); } template Foam::wordList Foam::DictionaryBase::sortedToc() const { return hashedTs_.sortedToc(); } template template Foam::wordList Foam::DictionaryBase::sortedToc ( const Compare& comp ) const { return hashedTs_.sortedToc(comp); } template void Foam::DictionaryBase::insert(const word& keyword, T* tPtr) { // NOTE: we should probably check that HashTable::insert actually worked hashedTs_.insert(keyword, tPtr); IDLListType::insert(tPtr); } template void Foam::DictionaryBase::append(const word& keyword, T* tPtr) { // NOTE: we should probably check that HashTable::insert actually worked hashedTs_.insert(keyword, tPtr); IDLListType::append(tPtr); } template T* Foam::DictionaryBase::remove(const word& keyword) { auto iter = hashedTs_.find(keyword); if (iter.found()) { T* ptr = IDLListType::remove(iter()); hashedTs_.erase(iter); return ptr; } return nullptr; } template void Foam::DictionaryBase::clear() { IDLListType::clear(); hashedTs_.clear(); } template void Foam::DictionaryBase::transfer ( DictionaryBase& dict ) { if (this == &dict) { return; // Self-assignment is a no-op } IDLListType::transfer(dict); hashedTs_.transfer(dict.hashedTs_); } // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template void Foam::DictionaryBase::operator= ( const DictionaryBase& dict ) { if (this == &dict) { return; // Self-assignment is a no-op } IDLListType::operator=(dict); this->hashedTs_.clear(); this->addEntries(); } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "DictionaryBaseIO.C" // ************************************************************************* //