From 9c9d6c64b59049eb0e652818f1dcb0bff4c2a685 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 15 Nov 2021 17:56:06 +0100
Subject: [PATCH] DEFEATURE: remove general objects storage from exprResult

- unused, generally fragile.
---
 .../expressions/exprResult/exprResult.C       | 29 +------
 .../expressions/exprResult/exprResult.H       | 17 +---
 .../expressions/exprResult/exprResultI.H      | 83 +------------------
 3 files changed, 6 insertions(+), 123 deletions(-)

diff --git a/src/OpenFOAM/expressions/exprResult/exprResult.C b/src/OpenFOAM/expressions/exprResult/exprResult.C
index a2085021983..58263f5505e 100644
--- a/src/OpenFOAM/expressions/exprResult/exprResult.C
+++ b/src/OpenFOAM/expressions/exprResult/exprResult.C
@@ -213,8 +213,7 @@ Foam::expressions::exprResult::exprResult()
     needsReset_(false),
     size_(0),
     single_(),
-    fieldPtr_(nullptr),
-    objectPtr_(nullptr)
+    fieldPtr_(nullptr)
 {
     clear();
 }
@@ -251,8 +250,7 @@ Foam::expressions::exprResult::exprResult
     needsReset_(false),
     size_(0),
     single_(),
-    fieldPtr_(nullptr),
-    objectPtr_(nullptr)
+    fieldPtr_(nullptr)
 {
     DebugInFunction << nl;
 
@@ -399,7 +397,6 @@ void Foam::expressions::exprResult::clear()
 {
     uglyDelete();
     valType_.clear();
-    objectPtr_.reset(nullptr);
     size_ = 0;
 }
 
@@ -533,12 +530,6 @@ void Foam::expressions::exprResult::operator=(const exprResult& rhs)
                 << exit(FatalError);
         }
     }
-    else if (objectPtr_)
-    {
-        FatalErrorInFunction
-            << "Assignment with general content not possible" << nl
-            << exit(FatalError);
-    }
 }
 
 
@@ -561,8 +552,6 @@ void Foam::expressions::exprResult::operator=(exprResult&& rhs)
     single_ = rhs.single_;
     fieldPtr_ = rhs.fieldPtr_;
 
-    objectPtr_.reset(rhs.objectPtr_.release());
-
     rhs.fieldPtr_ = nullptr;  // Took ownership of field pointer
     rhs.clear();
 }
@@ -707,13 +696,6 @@ Foam::expressions::exprResult::operator*=
     const scalar& b
 )
 {
-    if (isObject())
-    {
-        FatalErrorInFunction
-            << "Can only multiply Field-type exprResult. Not "
-            << valType_ << nl
-            << exit(FatalError);
-    }
     if (!fieldPtr_)
     {
         FatalErrorInFunction
@@ -748,13 +730,6 @@ Foam::expressions::exprResult::operator+=
     const exprResult& b
 )
 {
-    if (isObject())
-    {
-        FatalErrorInFunction
-            << "Can only add Field-type, not type: "
-            << valType_ << nl
-            << exit(FatalError);
-    }
     if (!fieldPtr_)
     {
         FatalErrorInFunction
diff --git a/src/OpenFOAM/expressions/exprResult/exprResult.H b/src/OpenFOAM/expressions/exprResult/exprResult.H
index 66c28e93c1c..90083ae9064 100644
--- a/src/OpenFOAM/expressions/exprResult/exprResult.H
+++ b/src/OpenFOAM/expressions/exprResult/exprResult.H
@@ -149,9 +149,6 @@ class exprResult
         //- Allocated plain field (eg, scalarField)
         void *fieldPtr_;
 
-        //- Alternative storage for non-plain fields (eg, volScalarField)
-        autoPtr<regIOobject> objectPtr_;
-
 
     // Private Member Functions
 
@@ -251,9 +248,6 @@ class exprResult
         template<class Type>
         inline void setSingleValueImpl(const Type& val);
 
-        template<class Type>
-        inline void setObjectResultImpl(Type* ptr);
-
 
 protected:
 
@@ -408,10 +402,7 @@ public:
         inline Type getValue() const;
 
         //- True if valueType is a bool
-        inline bool isBool() const;
-
-        //- True if the object pointer is being used
-        inline bool isObject() const;
+        inline bool is_bool() const;
 
         //- The field or object size
         inline label size() const;
@@ -461,10 +452,6 @@ public:
         template<class Type>
         inline void setSingleValue(const Type& val);
 
-        //- Set result object
-        template<class Type>
-        inline void setObjectResult(autoPtr<Type>&& obj);
-
 
     // Access/Get results
 
@@ -478,7 +465,7 @@ public:
 
         //- Return non-const reference to the field, casting away constness
         template<class Type>
-        inline Field<Type>& getRef() const;
+        inline Field<Type>& constCast() const;
 
         //- Return tmp field of the contents,
         //- optionally keeping a copy in cache
diff --git a/src/OpenFOAM/expressions/exprResult/exprResultI.H b/src/OpenFOAM/expressions/exprResult/exprResultI.H
index c4ee1b783e9..eb771176f67 100644
--- a/src/OpenFOAM/expressions/exprResult/exprResultI.H
+++ b/src/OpenFOAM/expressions/exprResult/exprResultI.H
@@ -213,15 +213,6 @@ Foam::expressions::exprResult::exprResult(Field<Type>&& fld)
 }
 
 
-template<class Type>
-Foam::expressions::exprResult::exprResult(autoPtr<Type>&& obj)
-:
-    exprResult()
-{
-    setObjectResult(std::move(obj));
-}
-
-
 template<class Type>
 Foam::expressions::exprResult::exprResult(const dimensioned<Type>& dt)
 :
@@ -281,18 +272,12 @@ inline Type Foam::expressions::exprResult::getValue() const
 }
 
 
-inline bool Foam::expressions::exprResult::isBool() const
+inline bool Foam::expressions::exprResult::is_bool() const
 {
     return valType_ == pTraits<bool>::typeName;
 }
 
 
-inline bool Foam::expressions::exprResult::isObject() const
-{
-    return bool(objectPtr_);
-}
-
-
 inline Foam::label Foam::expressions::exprResult::size() const
 {
     return size_;
@@ -369,30 +354,6 @@ void Foam::expressions::exprResult::setResultImpl
 }
 
 
-template<class Type>
-void Foam::expressions::exprResult::setObjectResult(autoPtr<Type>&& obj)
-{
-    target().setObjectResultImpl(obj.ptr());  // release()
-}
-
-
-template<class T>
-void Foam::expressions::exprResult::setObjectResultImpl(T* ptr)
-{
-    clear();
-
-    isUniform_ = false;
-    isPointData_ = false;
-
-    if (ptr != nullptr)
-    {
-        size_ = ptr->size();
-        valType_ = ptr->typeName;
-        objectPtr_.reset(ptr);
-    }
-}
-
-
 template<class Type>
 void Foam::expressions::exprResult::setResult
 (
@@ -756,52 +717,12 @@ Foam::expressions::exprResult::ref()
 
 template<class Type>
 inline Foam::Field<Type>&
-Foam::expressions::exprResult::getRef() const
+Foam::expressions::exprResult::constCast() const
 {
     return const_cast<Field<Type>&>(this->cref<Type>());
 }
 
 
-template<class Type>
-inline Foam::tmp<Type>
-Foam::expressions::exprResult::getObjectResult(bool cacheCopy)
-{
-    DebugInFunction << nl;
-
-    if (!isType<Type>())
-    {
-        FatalErrorInFunction
-            << "The expected return type " << pTraits<Type>::typeName
-            << " is different from the stored result type "
-            << valType_ << nl << nl
-            << exit(FatalError);
-    }
-
-    Type* ptr = dynamic_cast<Type*>(objectPtr_.get());
-
-    if (!ptr)
-    {
-        WarningInFunction
-            << "Cannot cast object pointer to " << pTraits<Type>::typeName
-            << nl << nl;
-
-        return nullptr;
-    }
-
-    if (cacheCopy)
-    {
-        // Return duplicated content
-        return tmp<Type>::New(*ptr);
-    }
-
-    objectPtr_.release();  // Take ownership in ptr
-
-    clear();
-
-    return tmp<Type>(ptr);
-}
-
-
 template<template<class> class BinaryOp, class Type>
 inline Type Foam::expressions::exprResult::getReduced
 (
-- 
GitLab