From 5ca4acadd6450e8ec1bb4000dfe6efaf75d6e08d Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Tue, 22 Mar 2016 08:26:50 +0000 Subject: [PATCH] List: Added construction from and assignment to zero --- src/OpenFOAM/containers/Lists/List/List.C | 24 +++++++++++++++++++++ src/OpenFOAM/containers/Lists/List/List.H | 6 ++++++ src/OpenFOAM/containers/Lists/List/ListI.H | 7 ++++++ src/OpenFOAM/containers/Lists/UList/UList.C | 10 +++++++++ src/OpenFOAM/containers/Lists/UList/UList.H | 4 ++++ 5 files changed, 51 insertions(+) diff --git a/src/OpenFOAM/containers/Lists/List/List.C b/src/OpenFOAM/containers/Lists/List/List.C index 134bd4f04aa..34cc05ee8d6 100644 --- a/src/OpenFOAM/containers/Lists/List/List.C +++ b/src/OpenFOAM/containers/Lists/List/List.C @@ -79,6 +79,30 @@ Foam::List<T>::List(const label s, const T& a) } +template<class T> +Foam::List<T>::List(const label s, const zero) +: + UList<T>(NULL, s) +{ + if (this->size_ < 0) + { + FatalErrorInFunction + << "bad size " << this->size_ + << abort(FatalError); + } + + if (this->size_) + { + this->v_ = new T[this->size_]; + + List_ACCESS(T, (*this), vp); + List_FOR_ALL((*this), i) + List_ELEM((*this), vp, i) = Zero; + List_END_FOR_ALL + } +} + + template<class T> Foam::List<T>::List(const List<T>& a) : diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index d86ea022511..9b28f5461f3 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -105,6 +105,9 @@ public: //- Construct with given size and value for all elements. List(const label, const T&); + //- Construct with given size initializing all elements to zero. + List(const label, const zero); + //- Copy constructor. List(const List<T>&); @@ -225,6 +228,9 @@ public: //- Assignment of all entries to the given value inline void operator=(const T&); + //- Assignment of all entries to zero + inline void operator=(const zero); + // Istream operator diff --git a/src/OpenFOAM/containers/Lists/List/ListI.H b/src/OpenFOAM/containers/Lists/List/ListI.H index 1d1e9912441..7d4b325140f 100644 --- a/src/OpenFOAM/containers/Lists/List/ListI.H +++ b/src/OpenFOAM/containers/Lists/List/ListI.H @@ -141,4 +141,11 @@ inline void Foam::List<T>::operator=(const T& t) } +template<class T> +inline void Foam::List<T>::operator=(const zero) +{ + UList<T>::operator=(Zero); +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/UList/UList.C b/src/OpenFOAM/containers/Lists/UList/UList.C index 2bbe09038ac..7014e396a98 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.C +++ b/src/OpenFOAM/containers/Lists/UList/UList.C @@ -76,6 +76,16 @@ void Foam::UList<T>::operator=(const T& t) } +template<class T> +void Foam::UList<T>::operator=(const zero) +{ + List_ACCESS(T, (*this), vp); + List_FOR_ALL((*this), i) + List_ELEM((*this), vp, i) = Zero; + List_END_FOR_ALL +} + + // * * * * * * * * * * * * * * STL Member Functions * * * * * * * * * * * * // template<class T> diff --git a/src/OpenFOAM/containers/Lists/UList/UList.H b/src/OpenFOAM/containers/Lists/UList/UList.H index aff5ff8e121..a2fd872fa63 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.H +++ b/src/OpenFOAM/containers/Lists/UList/UList.H @@ -46,6 +46,7 @@ SourceFiles #include "label.H" #include "uLabel.H" #include "nullObject.H" +#include "zero.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -223,6 +224,9 @@ public: //- Assignment of all entries to the given value void operator=(const T&); + //- Assignment of all entries to zero + void operator=(const zero); + // STL type definitions -- GitLab