mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
- this builds on Mattijs' commit 968f0bbd57 but with a first()
as well.
- Added both to FixedList, IndirectList, UIndirectList and *PtrList and
since they can certainly be useful there. Did not add to BiIndirectList,
since I'm not sure what it should mean there. Did not add to PackedList,
since it's not clear how useful they'd be yet in these contexts (and I'm
not sure how it would interact with the iterator proxy implementation).
- Note: STL defines front() and back() for these methods.
192 lines
5.2 KiB
C++
192 lines
5.2 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration |
|
|
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
|
\\/ M anipulation |
|
|
-------------------------------------------------------------------------------
|
|
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 2 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, write to the Free Software Foundation,
|
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
Class
|
|
Foam::DictionaryBase
|
|
|
|
Description
|
|
Base dictionary class templated on both the form of doubly-linked list
|
|
it uses as well as the type it holds.
|
|
|
|
The double templating allows for the instantiation of forms with or
|
|
without storage management.
|
|
|
|
Note
|
|
The IDLListType parameter should itself be a template but this confused
|
|
gcc 2.95.2 so it has to be instantiated for T when an instantiation of
|
|
DictionaryBase is requested
|
|
|
|
See Also
|
|
Dictionary and UDictionary
|
|
|
|
SourceFiles
|
|
DictionaryBase.C
|
|
DictionaryBaseIO.C
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef DictionaryBase_H
|
|
#define DictionaryBase_H
|
|
|
|
#include "HashTable.H"
|
|
#include "wordList.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
|
|
// Forward declaration of friend functions and operators
|
|
|
|
template<class IDLListType, class T>
|
|
class DictionaryBase;
|
|
|
|
template<class IDLListType, class T>
|
|
Ostream& operator<<(Ostream&, const DictionaryBase<IDLListType, T>&);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class DictionaryBase Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
template<class IDLListType, class T>
|
|
class DictionaryBase
|
|
:
|
|
public IDLListType
|
|
{
|
|
// Private data
|
|
|
|
//- HashTable of the entries held on the IDLListType for quick lookup
|
|
HashTable<T*> hashedTs_;
|
|
|
|
|
|
// Private Member functions
|
|
|
|
// Add the IDLListType entries into the HashTable
|
|
void addEntries();
|
|
|
|
|
|
public:
|
|
|
|
// Constructors
|
|
|
|
//- Null constructor
|
|
DictionaryBase();
|
|
|
|
//- Copy construct
|
|
DictionaryBase(const DictionaryBase&);
|
|
|
|
//- Construct from Istream using given Istream constructor class
|
|
template<class INew>
|
|
DictionaryBase(Istream&, const INew&);
|
|
|
|
//- Construct from Istream using default Istream constructor class
|
|
DictionaryBase(Istream&);
|
|
|
|
|
|
// Member functions
|
|
|
|
// Search and lookup
|
|
|
|
//- Search DictionaryBase for given keyword
|
|
bool found(const word&) const;
|
|
|
|
//- Find and return an entry if present, otherwise return NULL
|
|
const T* lookupPtr(const word&) const;
|
|
|
|
//- Find and return an entry if present, otherwise return NULL
|
|
T* lookupPtr(const word&);
|
|
|
|
//- Find and return entry
|
|
const T* lookup(const word&) const;
|
|
|
|
//- Find and return entry
|
|
T* lookup(const word&);
|
|
|
|
//- Return the table of contents
|
|
wordList toc() const;
|
|
|
|
|
|
// Editing
|
|
|
|
//- Add at head of dictionary
|
|
void insert(const word&, T*);
|
|
|
|
//- Add at tail of dictionary
|
|
void append(const word&, T*);
|
|
|
|
//- Remove and return entry specified by keyword.
|
|
// Return NULL if the keyword was not found.
|
|
T* remove(const word&);
|
|
|
|
//- Clear the dictionary
|
|
void clear();
|
|
|
|
//- Transfer the contents of the argument into this DictionaryBase
|
|
// and annul the argument.
|
|
void transfer(DictionaryBase<IDLListType, T>&);
|
|
|
|
// Member operators
|
|
|
|
void operator=(const DictionaryBase&);
|
|
|
|
//- Find and return entry
|
|
const T* operator[](const word& key) const
|
|
{
|
|
return lookup(key);
|
|
}
|
|
|
|
//- Find and return entry
|
|
T* operator[](const word& key)
|
|
{
|
|
return lookup(key);
|
|
}
|
|
|
|
|
|
// Ostream operator
|
|
|
|
friend Ostream& operator<< <IDLListType, T>
|
|
(
|
|
Ostream&,
|
|
const DictionaryBase<IDLListType, T>&
|
|
);
|
|
};
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#ifdef NoRepository
|
|
# include "DictionaryBase.C"
|
|
#endif
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|