ENH: additional constructors for IjkField

This commit is contained in:
Mark Olesen
2019-02-27 08:01:19 +01:00
parent eae53be0c7
commit 90ff1dfa5c
3 changed files with 30 additions and 11 deletions

View File

@ -36,7 +36,8 @@ template<class T>
Ostream& print(const IjkField<T>& fld) Ostream& print(const IjkField<T>& fld)
{ {
Info<< static_cast<const Field<T>&>(fld).size() Info<< static_cast<const Field<T>&>(fld).size()
<< " " << fld.sizes() << ' ' << flatOutput(fld); << " addr:" << long(fld.cdata()) << ' ' << fld.sizes() << ' '
<< flatOutput(fld);
return Info; return Info;
} }
@ -102,6 +103,11 @@ int main(int argc, char *argv[])
Info<< "/= operator: "; print(field1) << nl; Info<< "/= operator: "; print(field1) << nl;
IjkField<scalar> field3(std::move(field2));
Info<< "Move construct: "; print(field2) << nl;
print(field3) << nl;
// Field operations are still limited, but we can bypass things too // Field operations are still limited, but we can bypass things too
{ {

View File

@ -25,17 +25,11 @@ Class
Foam::IjkField Foam::IjkField
Description Description
Generic templated field type. Generic templated field type with i-j-k addressing.
SourceFiles SourceFiles
IjkFieldFunctions.H
IjkFieldFunctionsM.H
IjkFieldMapper.H
IjkFieldI.H IjkFieldI.H
IjkFieldM.H
IjkField.C IjkField.C
IjkFieldFunctions.C
IjkFieldFunctionsM.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -64,9 +58,6 @@ class IjkField
//- The i-j-k addressing //- The i-j-k addressing
ijkAddressing ijk_; ijkAddressing ijk_;
//- Copy construct
inline IjkField(const IjkField<Type>& fld);
public: public:
@ -75,6 +66,12 @@ public:
//- Construct zero-sized //- Construct zero-sized
inline IjkField(); inline IjkField();
//- Copy construct
inline IjkField(const IjkField<Type>& field);
//- Move construct
inline IjkField(IjkField<Type>&& field);
//- Construct with sizing information, leaving values uninitialized //- Construct with sizing information, leaving values uninitialized
inline explicit IjkField(const labelVector& ijk); inline explicit IjkField(const labelVector& ijk);

View File

@ -33,6 +33,22 @@ inline Foam::IjkField<Type>::IjkField()
{} {}
template<class Type>
inline Foam::IjkField<Type>::IjkField(const IjkField<Type>& field)
:
Field<Type>(field),
ijk_(field.ijk())
{}
template<class Type>
inline Foam::IjkField<Type>::IjkField(IjkField<Type>&& field)
:
Field<Type>(std::move(field)),
ijk_(field.ijk())
{}
template<class Type> template<class Type>
inline Foam::IjkField<Type>::IjkField(const labelVector& ijk) inline Foam::IjkField<Type>::IjkField(const labelVector& ijk)
: :