]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-dencoder: TYPE_FEATUREFUL_NOCOPY
authorSage Weil <sage@redhat.com>
Wed, 30 Dec 2015 20:03:42 +0000 (15:03 -0500)
committerSage Weil <sage@redhat.com>
Tue, 1 Mar 2016 16:16:59 +0000 (11:16 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/test/encoding/ceph_dencoder.cc

index 119145a690a8c091bef54699a3f3813ca550ef90..dfe29f366914b4ebb3a13ae4bca1eb41017ef3e4 100644 (file)
 #define TYPE_FEATUREFUL(t)
 #define TYPE_FEATUREFUL_STRAYDATA(t)
 #define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
 #define TYPE_NOCOPY(t)
 #define MESSAGE(t)
 #include "types.h"
 #undef TYPE
 #undef TYPE_STRAYDATA
 #undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
 #undef TYPE_FEATUREFUL
 #undef TYPE_FEATUREFUL_STRAYDATA
 #undef TYPE_FEATUREFUL_NONDETERMINISTIC
-#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL_NOCOPY
 #undef MESSAGE
 
 #define MB(m) ((m) * 1024 * 1024)
@@ -180,9 +182,9 @@ public:
 };
 
 template<class T>
-class DencoderImplFeatureful : public DencoderBase<T> {
+class DencoderImplFeaturefulNoCopy : public DencoderBase<T> {
 public:
-  DencoderImplFeatureful(bool stray_ok, bool nondeterministic)
+  DencoderImplFeaturefulNoCopy(bool stray_ok, bool nondeterministic)
     : DencoderBase<T>(stray_ok, nondeterministic) {}
   virtual void encode(bufferlist& out, uint64_t features) {
     out.clear();
@@ -190,6 +192,23 @@ public:
   }
 };
 
+template<class T>
+class DencoderImplFeatureful : public DencoderImplFeaturefulNoCopy<T> {
+public:
+  DencoderImplFeatureful(bool stray_ok, bool nondeterministic)
+    : DencoderImplFeaturefulNoCopy<T>(stray_ok, nondeterministic) {}
+  void copy() {
+    T *n = new T;
+    *n = *this->m_object;
+    delete this->m_object;
+    this->m_object = n;
+  }
+  void copy_ctor() {
+    T *n = new T(*this->m_object);
+    delete this->m_object;
+    this->m_object = n;
+  }
+};
 
 template<class T>
 class MessageDencoderImpl : public Dencoder {
@@ -280,15 +299,18 @@ int main(int argc, const char **argv)
 #define TYPE_FEATUREFUL(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(false, false);
 #define TYPE_FEATUREFUL_STRAYDATA(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(true, false);
 #define TYPE_FEATUREFUL_NONDETERMINISTIC(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(false, true);
+#define TYPE_FEATUREFUL_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeaturefulNoCopy<t>(false, false);
 #define TYPE_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeatureNoCopy<t>(false, false);
 #define MESSAGE(t) dencoders[T_STRINGIFY(t)] = new MessageDencoderImpl<t>;
 #include "types.h"
 #undef TYPE
 #undef TYPE_STRAYDATA
 #undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
 #undef TYPE_FEATUREFUL
 #undef TYPE_FEATUREFUL_STRAYDATA
 #undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
 #undef T_STR
 #undef T_STRINGIFY