From c608331860fbe8c804c5d15266b0dc8c0797344f Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 18 Jul 2013 13:07:18 +0100 Subject: [PATCH] ENH: MeshObject: allow for MeshObjects which are also regIOobject themselves --- src/OpenFOAM/meshes/MeshObject/MeshObject.C | 35 ++++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C index 01e86da379..1a8ebe937a 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.C +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.C @@ -65,7 +65,12 @@ const Type& Foam::MeshObject::New Pout<< "MeshObject::New(const Mesh&) : constructing new " << Type::typeName << endl; } - return regIOobject::store(new Type(mesh)); + + Type* objectPtr = new Type(mesh); + + regIOobject::store(static_cast*>(objectPtr)); + + return *objectPtr; } } @@ -98,7 +103,12 @@ const Type& Foam::MeshObject::New Pout<< "MeshObject::New(const Mesh&) : constructing new " << Type::typeName << endl; } - return regIOobject::store(new Type(mesh, d)); + + Type* objectPtr = new Type(mesh, d); + + regIOobject::store(static_cast*>(objectPtr)); + + return *objectPtr; } } @@ -132,7 +142,14 @@ const Type& Foam::MeshObject::New Pout<< "MeshObject(const Mesh&) : constructing new " << Type::typeName << endl; } - return regIOobject::store(new Type(mesh, d1, d2)); + + Type* objectPtr = new Type(mesh, d1, d2); + + // Make sure to register the top level regIOobject for if Type itself + // is a regIOobject + regIOobject::store(static_cast*>(objectPtr)); + + return *objectPtr; } } @@ -167,7 +184,11 @@ const Type& Foam::MeshObject::New Pout<< "MeshObject(const Mesh&) : constructing new " << Type::typeName << endl; } - return regIOobject::store(new Type(mesh, d1, d2, d3)); + Type* objectPtr = new Type(mesh, d1, d2, d3); + + regIOobject::store(static_cast*>(objectPtr)); + + return *objectPtr; } } @@ -203,7 +224,11 @@ const Type& Foam::MeshObject::New Pout<< "MeshObject(const Mesh&) : constructing new " << Type::typeName << endl; } - return regIOobject::store(new Type(mesh, d1, d2, d3, d4)); + Type* objectPtr = new Type(mesh, d1, d2, d3, d4); + + regIOobject::store(static_cast*>(objectPtr)); + + return *objectPtr; } }