From e44efb5130f1b901e25fd3121aabeafaf456e803 Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Wed, 20 Oct 2010 11:03:00 +0100 Subject: [PATCH] ENH: Added copy/clone functionality tp DataEntry class --- .../IO/DataEntry/Constant/Constant.C | 22 +++------------ .../IO/DataEntry/Constant/Constant.H | 25 ++++++----------- .../IO/DataEntry/DataEntry/DataEntry.C | 27 +++++++++++++++++++ .../IO/DataEntry/DataEntry/DataEntry.H | 12 +++++++-- .../submodels/IO/DataEntry/Table/Table.H | 6 +++++ .../IO/DataEntry/polynomial/polynomial.H | 13 ++++----- 6 files changed, 62 insertions(+), 43 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C index fca56988570..cca5a8e9506 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C @@ -31,8 +31,10 @@ template<class Type> Foam::Constant<Type>::Constant(const word& entryName, Istream& is) : DataEntry<Type>(entryName), - value_(is) -{} + value_(pTraits<Type>::zero) +{ + is >> value_; +} template<class Type> @@ -43,22 +45,6 @@ Foam::Constant<Type>::Constant(const Constant<Type>& cnst) {} -template<> -Foam::Constant<Foam::label>::Constant(const word& entryName, Istream& is) -: - DataEntry<label>(entryName), - value_(readLabel(is)) -{} - - -template<> -Foam::Constant<Foam::scalar>::Constant(const word& entryName, Istream& is) -: - DataEntry<scalar>(entryName), - value_(readScalar(is)) -{} - - // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class Type> diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H index 3a36935c111..ef15f0f0c57 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H @@ -51,11 +51,7 @@ template<class Type> class Constant; template<class Type> -Ostream& operator<< -( - Ostream&, - const Constant<Type>& -); +Ostream& operator<<(Ostream&, const Constant<Type>&); /*---------------------------------------------------------------------------*\ Class Constant Declaration @@ -92,6 +88,12 @@ public: //- Copy constructor Constant(const Constant<Type>& cnst); + //- Construct and return a clone + virtual tmp<DataEntry<Type> > clone() const + { + return tmp<DataEntry<Type> >(new Constant<Type>(*this)); + } + //- Destructor virtual ~Constant(); @@ -107,23 +109,12 @@ public: //- Ostream Operator - friend Ostream& operator<< <Type> - ( - Ostream&, - const Constant<Type>& - ); + friend Ostream& operator<< <Type>(Ostream&, const Constant<Type>&); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -template<> -Constant<label>::Constant(const word& entryName, Istream& is); - -template<> -Constant<scalar>::Constant(const word& entryName, Istream& is); - - } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C index cd9f3a4b0c7..2ebcd67bd34 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C @@ -30,6 +30,7 @@ License template<class Type> Foam::DataEntry<Type>::DataEntry(const word& entryName) : + refCount(), name_(entryName) {} @@ -37,6 +38,7 @@ Foam::DataEntry<Type>::DataEntry(const word& entryName) template<class Type> Foam::DataEntry<Type>::DataEntry(const DataEntry<Type>& de) : + refCount(), name_(de.name_) {} @@ -57,6 +59,31 @@ const Foam::word& Foam::DataEntry<Type>::name() const } +template<class Type> +Type Foam::DataEntry<Type>::value(const scalar x) const +{ + notImplemented("Type Foam::DataEntry<Type>::value(const scalar) const"); + + return pTraits<Type>::zero; +} + + +template<class Type> +Type Foam::DataEntry<Type>::integrate(const scalar x1, const scalar x2) const +{ + notImplemented + ( + "Type Foam::DataEntry<Type>::integrate" + "(" + "const scalar, " + "const scalar" + ") const" + ); + + return pTraits<Type>::zero; +} + + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "DataEntryIO.C" diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H index c2048c25d30..03c1b7b417d 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H @@ -62,6 +62,8 @@ Ostream& operator<< template<class Type> class DataEntry +: + public refCount { // Private Member Functions @@ -104,6 +106,12 @@ public: //- Copy constructor DataEntry(const DataEntry<Type>& de); + //- Construct and return a clone + virtual tmp<DataEntry<Type> > clone() const + { + return tmp<DataEntry<Type> >(new DataEntry<Type>(*this)); + } + //- Selector static autoPtr<DataEntry<Type> > New @@ -128,10 +136,10 @@ public: // Evaluation //- Return value as a function of (scalar) independent variable - virtual Type value(const scalar x) const = 0; + virtual Type value(const scalar x) const; //- Integrate between two (scalar) values - virtual Type integrate(const scalar x1, const scalar x2) const = 0; + virtual Type integrate(const scalar x1, const scalar x2) const; //- Ostream Operator diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H index bdb84e87eec..61a3596fd71 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H @@ -98,6 +98,12 @@ public: //- Copy constructor Table(const Table<Type>& tbl); + //- Construct and return a clone + virtual tmp<DataEntry<Type> > clone() const + { + return tmp<DataEntry<Type> >(new Table<Type>(*this)); + } + //- Destructor virtual ~Table(); diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H index 47fc1fd30fa..78c55c78704 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H @@ -91,12 +91,17 @@ public: // Constructors - //- Construct from entry name and Istream polynomial(const word& entryName, Istream& is); //- Copy constructor polynomial(const polynomial& poly); + //- Construct and return a clone + virtual tmp<DataEntry<scalar> > clone() const + { + return tmp<DataEntry<scalar> >(new polynomial(*this)); + } + //- Destructor virtual ~polynomial(); @@ -112,11 +117,7 @@ public: //- Ostream Operator - friend Ostream& operator<< - ( - Ostream&, - const polynomial& - ); + friend Ostream& operator<<(Ostream&, const polynomial&); }; -- GitLab