From 90ff1dfa5c7c001e56ab0accfc0f850f8957d80c Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 27 Feb 2019 08:01:19 +0100 Subject: [PATCH] ENH: additional constructors for IjkField --- applications/test/IjkField/Test-IjkField.C | 8 +++++++- src/OpenFOAM/meshes/ijkMesh/IjkField.H | 17 +++++++---------- src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/applications/test/IjkField/Test-IjkField.C b/applications/test/IjkField/Test-IjkField.C index 8f093218f0..70cba9bf71 100644 --- a/applications/test/IjkField/Test-IjkField.C +++ b/applications/test/IjkField/Test-IjkField.C @@ -36,7 +36,8 @@ template Ostream& print(const IjkField& fld) { Info<< static_cast&>(fld).size() - << " " << fld.sizes() << ' ' << flatOutput(fld); + << " addr:" << long(fld.cdata()) << ' ' << fld.sizes() << ' ' + << flatOutput(fld); return Info; } @@ -102,6 +103,11 @@ int main(int argc, char *argv[]) Info<< "/= operator: "; print(field1) << nl; + IjkField field3(std::move(field2)); + + Info<< "Move construct: "; print(field2) << nl; + print(field3) << nl; + // Field operations are still limited, but we can bypass things too { diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkField.H b/src/OpenFOAM/meshes/ijkMesh/IjkField.H index 6ef025dfe4..0e21e473e1 100644 --- a/src/OpenFOAM/meshes/ijkMesh/IjkField.H +++ b/src/OpenFOAM/meshes/ijkMesh/IjkField.H @@ -25,17 +25,11 @@ Class Foam::IjkField Description - Generic templated field type. + Generic templated field type with i-j-k addressing. SourceFiles - IjkFieldFunctions.H - IjkFieldFunctionsM.H - IjkFieldMapper.H IjkFieldI.H - IjkFieldM.H IjkField.C - IjkFieldFunctions.C - IjkFieldFunctionsM.C \*---------------------------------------------------------------------------*/ @@ -64,9 +58,6 @@ class IjkField //- The i-j-k addressing ijkAddressing ijk_; - //- Copy construct - inline IjkField(const IjkField& fld); - public: @@ -75,6 +66,12 @@ public: //- Construct zero-sized inline IjkField(); + //- Copy construct + inline IjkField(const IjkField& field); + + //- Move construct + inline IjkField(IjkField&& field); + //- Construct with sizing information, leaving values uninitialized inline explicit IjkField(const labelVector& ijk); diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H index 5efc135acd..8943bfa5dc 100644 --- a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H +++ b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H @@ -33,6 +33,22 @@ inline Foam::IjkField::IjkField() {} +template +inline Foam::IjkField::IjkField(const IjkField& field) +: + Field(field), + ijk_(field.ijk()) +{} + + +template +inline Foam::IjkField::IjkField(IjkField&& field) +: + Field(std::move(field)), + ijk_(field.ijk()) +{} + + template inline Foam::IjkField::IjkField(const labelVector& ijk) :