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