From 96751f7e024d3694c55cfb647dcb5efd06d2f0e3 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Mon, 19 Jan 2009 14:31:31 +0100
Subject: [PATCH] Applied Mattijs' DynamicList copy constructor patch

---
 applications/test/DynamicList/DynamicListTest.C     | 13 +++++++++++++
 .../containers/Lists/DynamicList/DynamicList.H      |  7 +++++++
 .../containers/Lists/DynamicList/DynamicListI.H     | 12 +++++++++++-
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/applications/test/DynamicList/DynamicListTest.C b/applications/test/DynamicList/DynamicListTest.C
index 7e72651294f..324c5361bb7 100644
--- a/applications/test/DynamicList/DynamicListTest.C
+++ b/applications/test/DynamicList/DynamicListTest.C
@@ -160,6 +160,19 @@ int main(int argc, char *argv[])
         << " " << lstB.size() << endl;
     Info<< "<dlD>" << dlD << "</dlD>" << nl << "sizes: "
         << " " << dlD.size() << "/" << dlD.capacity() << endl;
+    
+    DynamicList<label,10> dlE1(10);
+    DynamicList<label> dlE2(dlE1);
+
+    Info<< "<dlE1>" << dlE1 << "</dlE1>" << nl << "sizes: "
+        << " " << dlE1.size() << "/" << dlE1.capacity() << endl;
+    Info<< "<dlE2>" << dlE2 << "</dlE2>" << nl << "sizes: "
+        << " " << dlE2.size() << "/" << dlE2.capacity() << endl;
+
+    dlE2.append(100);
+    Info<< "<dlE2>" << dlE2 << "</dlE2>" << endl;
+    
+    Info<< "\nEnd\n";
 
     return 0;
 }
diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
index dbbcb82b801..1e62ceb96c9 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
@@ -101,7 +101,14 @@ public:
         //- Construct given size.
         explicit inline DynamicList(const label);
 
+        //- Construct copy.
+        explicit inline DynamicList
+        (
+            const DynamicList<T, SizeInc, SizeMult, SizeDiv>&
+        );
+
         //- Construct from UList. Size set to UList size.
+        //  Also constructs from DynamicList with different sizing parameters.
         explicit inline DynamicList(const UList<T>&);
 
         //- Construct by transferring the parameter contents
diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
index 8357ee5889e..5f65f0e6657 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
@@ -50,6 +50,17 @@ inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList
 }
 
 
+template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
+inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList
+(
+    const DynamicList<T, SizeInc, SizeMult, SizeDiv>& lst
+)
+:
+    List<T>(lst),
+    capacity_(lst.size())
+{}
+
+
 template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
 inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList
 (
@@ -99,7 +110,6 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setCapacity
     }
     // we could also enforce SizeInc granularity when (!SizeMult || !SizeDiv)
 
-
     List<T>::setSize(capacity_);
     List<T>::size(nextFree);
 }
-- 
GitLab