From: Sage Weil Date: Wed, 30 Dec 2015 20:03:42 +0000 (-0500) Subject: ceph-dencoder: TYPE_FEATUREFUL_NOCOPY X-Git-Tag: v10.1.0~241^2~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4cf4f8dd138eaf888a15df6dbadd58fc3c342966;p=ceph.git ceph-dencoder: TYPE_FEATUREFUL_NOCOPY Signed-off-by: Sage Weil --- diff --git a/src/test/encoding/ceph_dencoder.cc b/src/test/encoding/ceph_dencoder.cc index 119145a690a8..dfe29f366914 100644 --- a/src/test/encoding/ceph_dencoder.cc +++ b/src/test/encoding/ceph_dencoder.cc @@ -30,16 +30,18 @@ #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 DencoderImplFeatureful : public DencoderBase { +class DencoderImplFeaturefulNoCopy : public DencoderBase { public: - DencoderImplFeatureful(bool stray_ok, bool nondeterministic) + DencoderImplFeaturefulNoCopy(bool stray_ok, bool nondeterministic) : DencoderBase(stray_ok, nondeterministic) {} virtual void encode(bufferlist& out, uint64_t features) { out.clear(); @@ -190,6 +192,23 @@ public: } }; +template +class DencoderImplFeatureful : public DencoderImplFeaturefulNoCopy { +public: + DencoderImplFeatureful(bool stray_ok, bool nondeterministic) + : DencoderImplFeaturefulNoCopy(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 MessageDencoderImpl : public Dencoder { @@ -280,15 +299,18 @@ int main(int argc, const char **argv) #define TYPE_FEATUREFUL(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful(false, false); #define TYPE_FEATUREFUL_STRAYDATA(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful(true, false); #define TYPE_FEATUREFUL_NONDETERMINISTIC(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful(false, true); +#define TYPE_FEATUREFUL_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeaturefulNoCopy(false, false); #define TYPE_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeatureNoCopy(false, false); #define MESSAGE(t) dencoders[T_STRINGIFY(t)] = new MessageDencoderImpl; #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