aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/stubs/callback.h
diff options
context:
space:
mode:
authorCamillo Lugaresi <camillol@google.com>2016-12-20 17:38:09 -0800
committerCamillo Lugaresi <camillol@google.com>2016-12-21 20:46:42 -0800
commit4e229c8b5c62a3cd39196b71cbf1da6158335d5e (patch)
tree36f6469013a34a1e68699c8d10852c0b28711ed6 /src/google/protobuf/stubs/callback.h
parentd948b66d4f4f41e438981f49ad4668ab0ba6ab0a (diff)
downloadprotobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.tar.gz
protobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.tar.bz2
protobuf-4e229c8b5c62a3cd39196b71cbf1da6158335d5e.zip
add MethodResultCallback_0_0
Diffstat (limited to 'src/google/protobuf/stubs/callback.h')
-rw-r--r--src/google/protobuf/stubs/callback.h30
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>