diff options
author | Camillo Lugaresi <camillol@google.com> | 2016-12-20 17:38:09 -0800 |
---|---|---|
committer | Camillo Lugaresi <camillol@google.com> | 2016-12-21 20:46:42 -0800 |
commit | 4e229c8b5c62a3cd39196b71cbf1da6158335d5e (patch) | |
tree | 36f6469013a34a1e68699c8d10852c0b28711ed6 /src | |
parent | d948b66d4f4f41e438981f49ad4668ab0ba6ab0a (diff) | |
download | protobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.tar.gz protobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.tar.bz2 protobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.zip |
add MethodResultCallback_0_0
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/stubs/callback.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/google/protobuf/stubs/callback.h b/src/google/protobuf/stubs/callback.h index bbd507a8..9ec04979 100644 --- a/src/google/protobuf/stubs/callback.h +++ b/src/google/protobuf/stubs/callback.h @@ -346,6 +346,29 @@ struct InternalConstRef { typedef const base_type& type; }; +template<typename R, typename T> +class MethodResultCallback_0_0 : public ResultCallback<R> { + public: + typedef R (T::*MethodType)(); + MethodResultCallback_0_0(T* object, MethodType method, bool self_deleting) + : object_(object), + method_(method), + self_deleting_(self_deleting) {} + ~MethodResultCallback_0_0() {} + + R Run() { + bool needs_delete = self_deleting_; + R result = (object_->*method_)(); + if (needs_delete) delete this; + return result; + } + + private: + T* object_; + MethodType method_; + bool self_deleting_; +}; + template <typename R, typename T, typename P1, typename P2, typename P3, typename P4, typename P5, typename A1, typename A2> class MethodResultCallback_5_2 : public ResultCallback2<R, A1, A2> { @@ -520,6 +543,13 @@ inline ResultCallback1<R, A1>* NewPermanentCallback( function, false, p1); } +// See MethodResultCallback_0_0 +template <typename R, typename T1, typename T2> +inline ResultCallback<R>* NewPermanentCallback( + T1* object, R (T2::*function)()) { + return new internal::MethodResultCallback_0_0<R, T1>(object, function, false); +} + // See MethodResultCallback_5_2 template <typename R, typename T, typename P1, typename P2, typename P3, typename P4, typename P5, typename A1, typename A2> |