From 26450bdc7e68d98a483b286dc887f6f25e041d40 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 9 Oct 2008 16:37:09 +0200
Subject: [PATCH] modified xfer class make transfer optional

---
 src/OpenFOAM/containers/misc/xfer.H  | 16 +++++++++++-----
 src/OpenFOAM/containers/misc/xferI.H | 15 +++++++++++----
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/OpenFOAM/containers/misc/xfer.H b/src/OpenFOAM/containers/misc/xfer.H
index 2fec7405760..6654ced746b 100644
--- a/src/OpenFOAM/containers/misc/xfer.H
+++ b/src/OpenFOAM/containers/misc/xfer.H
@@ -60,18 +60,24 @@ class xfer
         //- Pointer to temporary object
         mutable T* ptr_;
 
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        xfer(const xfer<T>&);
+
 public:
 
     // Constructors
 
-        //- Null constructor, transfer later by assignment
+        //- Null constructor
+        //  Can be used later to transfer by assignment
         inline xfer();
 
-        //- Construct by transferring the parameter contents into the object
-        inline xfer(T&);
+        //- Construct by copying or by transferring the parameter contents
+        inline xfer(T&, bool allowTransfer=false);
 
-        //- Construct by transferring the parameter contents into the object
-        inline xfer(const xfer<T>&);
+        //- Copy constructor
+        inline xfer(const T&);
 
     // Destructor
 
diff --git a/src/OpenFOAM/containers/misc/xferI.H b/src/OpenFOAM/containers/misc/xferI.H
index fa5d5fa1522..f4f4b941979 100644
--- a/src/OpenFOAM/containers/misc/xferI.H
+++ b/src/OpenFOAM/containers/misc/xferI.H
@@ -34,20 +34,27 @@ inline Foam::xfer<T>::xfer()
 
 
 template<class T>
-inline Foam::xfer<T>::xfer(T& t)
+inline Foam::xfer<T>::xfer(T& t, bool allowTransfer)
 :
     ptr_(new T)
 {
-    ptr_->transfer(t);
+    if (allowTransfer)
+    {
+        ptr_->transfer(t);
+    }
+    else
+    {
+        ptr_->operator=(t);
+    }
 }
 
 
 template<class T>
-inline Foam::xfer<T>::xfer(const xfer<T>& t)
+inline Foam::xfer<T>::xfer(const T& t)
 :
     ptr_(new T)
 {
-    ptr_->transfer(*(t.ptr_));
+    ptr_->operator=(t);
 }
 
 
-- 
GitLab