From 6bd41c513dccf540b0516413f275e646bb0c1296 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs@hunt.opencfd.co.uk>
Date: Fri, 23 Jan 2009 08:59:28 +0000
Subject: [PATCH] missing assignment operator

---
 .../Lists/DynamicList/DynamicList.H           |  9 +++++--
 .../Lists/DynamicList/DynamicListI.H          | 25 ++++++++++++++++++-
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
index d6553dcfabe..2738b414b08 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
@@ -182,9 +182,14 @@ public:
         //- Assignment of all addressed entries to the given value
         inline void operator=(const T&);
 
-        //- Assignment from List<T>. Also handles assignment from DynamicList.
-        inline void operator=(const UList<T>&);
+        //- Assignment from DynamicList
+        inline void operator=
+        (
+            const DynamicList<T, SizeInc, SizeMult, SizeDiv>&
+        );
 
+        //- Assignment from List<T>.
+        inline void operator=(const UList<T>&);
 
     // IOstream operators
 
diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
index f1e7d40dd60..c573a5df5e6 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
@@ -334,13 +334,36 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
 (
     const UList<T>& lst
 )
+{
+    if (capacity_ >= lst.size())
+    {
+        // can copy w/o reallocating, match initial size to avoid reallocation
+        List<T>::size(lst.size());
+        List<T>::operator=(lst);
+    }
+    else
+    {
+        // make everything available for the copy operation
+        List<T>::size(capacity_);
+
+        List<T>::operator=(lst);
+        capacity_ = List<T>::size();
+    }
+}
+
+
+template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
+inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
+(
+    const DynamicList<T, SizeInc, SizeMult, SizeDiv>& lst
+)
 {
     if (this == &lst)
     {
         FatalErrorIn
         (
             "DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator="
-            "(const UList<T>&)"
+            "(const DynamicList<T, SizeInc, SizeMult, SizeDiv>&)"
         )   << "attempted assignment to self" << abort(FatalError);
     }
 
-- 
GitLab