diff --git a/applications/test/PtrListDictionary/Make/files b/applications/test/PtrListDictionary/Make/files
new file mode 100644
index 0000000000..a3c4c87ba4
--- /dev/null
+++ b/applications/test/PtrListDictionary/Make/files
@@ -0,0 +1,3 @@
+Test-PtrListDictionary.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-PtrListDictionary
diff --git a/applications/test/PtrListDictionary/Make/options b/applications/test/PtrListDictionary/Make/options
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/applications/test/PtrListDictionary/Test-PtrListDictionary.C b/applications/test/PtrListDictionary/Test-PtrListDictionary.C
new file mode 100644
index 0000000000..33aa3b2792
--- /dev/null
+++ b/applications/test/PtrListDictionary/Test-PtrListDictionary.C
@@ -0,0 +1,123 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
+ \\/ 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 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 .
+
+Application
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#include "OSspecific.H"
+
+#include "scalar.H"
+
+#include "IOstreams.H"
+#include "PtrListDictionary.H"
+
+using namespace Foam;
+
+class Scalar
+{
+ scalar data_;
+
+public:
+
+ Scalar()
+ :
+ data_(0)
+ {}
+
+ Scalar(scalar val)
+ :
+ data_(val)
+ {}
+
+ ~Scalar()
+ {
+ Info<<"delete Scalar: " << data_ << endl;
+ }
+
+ friend Ostream& operator<<(Ostream& os, const Scalar& val)
+ {
+ os << val.data_;
+ return os;
+ }
+};
+
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ PtrListDictionary scalarDict(10);
+ forAll(scalarDict, i)
+ {
+ word key("ent" + name(i));
+ scalarDict.set(i, key, new Scalar(1.3*i));
+ }
+
+ Info<< nl << "scalarDict1: " << endl;
+ forAll(scalarDict, i)
+ {
+ Info<< "elem " << i << " = " << scalarDict[i] << endl;
+ }
+
+ Scalar* ent8Ptr = scalarDict.lookupPtr("ent8");
+
+ Info<< "ent8 = " << *ent8Ptr << endl;
+
+ PtrListDictionary scalarDict2(15);
+ forAll(scalarDict2, i)
+ {
+ word key("ent" + name(i));
+ scalarDict2.set(i, key, new Scalar(1.3*i));
+ }
+ Info<< nl << "scalarDict2: " << endl;
+ forAll(scalarDict2, i)
+ {
+ Info<< "elem " << i << " = " << scalarDict2[i] << endl;
+ }
+
+ scalarDict.transfer(scalarDict2);
+
+ Scalar* p = scalarDict.lookupPtr("ent8");
+
+ if (p)
+ {
+ Info<< "found: " << *p << endl;
+ }
+ else
+ {
+ Info<< "no p: " << endl;
+ }
+
+ scalarDict.clear();
+
+ Info<< nl << "Done." << endl;
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H
index 43634bc93a..f9294eedd0 100644
--- a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H
+++ b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H
@@ -74,13 +74,15 @@ class DictionaryBase
:
public IDLListType
{
- // Private data
+protected:
+
+ // Protected data
//- HashTable of the entries held on the IDLListType for quick lookup
HashTable hashedTs_;
- // Private Member functions
+ // Protected Member functions
// Add the IDLListType entries into the HashTable
void addEntries();
diff --git a/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H b/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H
index e6d1a5f999..a287e326cb 100644
--- a/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H
+++ b/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H
@@ -25,11 +25,10 @@ Class
Foam::PtrDictionary
Description
- Template dictionary class which does not manages the storage
- associated with it.
+ Template dictionary class which manages the storage associated with it.
- It is derived from DictionaryBase instantiated on a non-memory managed
- form of intrusive doubly-linked list of T.
+ It is derived from DictionaryBase instantiated on a memory managed form of
+ intrusive doubly-linked list of \.
SourceFiles
PtrDictionary.C
diff --git a/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.C b/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.C
new file mode 100644
index 0000000000..dae34e82fe
--- /dev/null
+++ b/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.C
@@ -0,0 +1,127 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
+ \\/ 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 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 "PtrListDictionary.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::PtrListDictionary::PtrListDictionary(const label size)
+:
+ DictionaryBase, T>(2*size)
+{
+ PtrList::setSize(size);
+}
+
+
+template
+Foam::PtrListDictionary::PtrListDictionary(const PtrListDictionary& dict)
+:
+ DictionaryBase, T>(dict)
+{}
+
+
+template
+template
+Foam::PtrListDictionary::PtrListDictionary(Istream& is, const INew& iNew)
+:
+ DictionaryBase, T>(is, iNew)
+{}
+
+
+template
+Foam::PtrListDictionary::PtrListDictionary(Istream& is)
+:
+ DictionaryBase, T>(is)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+inline Foam::autoPtr Foam::PtrListDictionary::set
+(
+ const label i,
+ const word& key,
+ T* ptr
+)
+{
+ if (!DictionaryBase, T>::hashedTs_.insert(key, ptr))
+ {
+ FatalErrorIn
+ (
+ "PtrListDictionary::set(const label i, const word& key, T* ptr)"
+ ) << "Cannot insert with key '" << key << "' into hash-table"
+ << abort(FatalError);
+ }
+ return PtrList::set(i, ptr);
+}
+
+
+template
+inline Foam::autoPtr Foam::PtrListDictionary::set
+(
+ const label i,
+ const word& key,
+ autoPtr& aptr
+)
+{
+ T* ptr = aptr.ptr();
+ if (!DictionaryBase, T>::hashedTs_.insert(key, ptr))
+ {
+ FatalErrorIn
+ (
+ "PtrListDictionary::"
+ "set(const label i, const word& key, autoPtr& aptr)"
+ ) << "Cannot insert with key '" << key << "' into hash-table"
+ << abort(FatalError);
+ }
+ return PtrList::set(i, ptr);
+}
+
+
+template
+inline Foam::autoPtr Foam::PtrListDictionary::set
+(
+ const label i,
+ const word& key,
+ tmp& t
+)
+{
+ T* ptr = t.ptr();
+ if (!DictionaryBase, T>::hashedTs_.insert(key, ptr))
+ {
+ FatalErrorIn
+ (
+ "PtrListDictionary::"
+ "set(const label i, const word& key, tmp& t)"
+ ) << "Cannot insert with key '" << key << "' into hash-table"
+ << abort(FatalError);
+ }
+ return PtrList::set(i, ptr);
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.H b/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.H
new file mode 100644
index 0000000000..761bccd76e
--- /dev/null
+++ b/src/OpenFOAM/containers/Dictionaries/PtrListDictionary/PtrListDictionary.H
@@ -0,0 +1,121 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
+ \\/ 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 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 .
+
+Class
+ Foam::PtrListDictionary
+
+Description
+ Template dictionary class which manages the storage associated with it.
+
+ It is derived from DictionaryBase instantiated on the memory managed PtrList
+ of \ to provide ordered indexing in addition to the dictionary lookup.
+
+SourceFiles
+ PtrListDictionary.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef PtrListDictionary_H
+#define PtrListDictionary_H
+
+#include "DictionaryBase.H"
+#include "PtrList.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class PtrListDictionary Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class PtrListDictionary
+:
+ public DictionaryBase, T>
+{
+
+public:
+
+ // Constructors
+
+ //- Construct given initial list size
+ PtrListDictionary(const label size);
+
+ //- Copy construct
+ PtrListDictionary(const PtrListDictionary&);
+
+ //- Construct from Istream using given Istream constructor class
+ template
+ PtrListDictionary(Istream&, const INew&);
+
+ //- Construct from Istream
+ PtrListDictionary(Istream&);
+
+
+ // Member functions
+
+ //- Set element to pointer provided and return old element
+ autoPtr set(const label, const word& key, T*);
+
+ //- Set element to autoPtr value provided and return old element
+ autoPtr set(const label, const word& key, autoPtr&);
+
+ //- Set element to tmp value provided and return old element
+ autoPtr set(const label, const word& key, tmp&);
+
+
+ // Member operators
+
+ using PtrList::operator[];
+
+ //- Find and return entry
+ const T& operator[](const word& key) const
+ {
+ return *DictionaryBase, T>::operator[](key);
+ }
+
+ //- Find and return entry
+ T& operator[](const word& key)
+ {
+ return *DictionaryBase, T>::operator[](key);
+ }
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "PtrListDictionary.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //