| Index: third_party/protobuf/src/google/protobuf/stubs/callback.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/stubs/callback.h b/third_party/protobuf/src/google/protobuf/stubs/callback.h
|
| index 6da530d3e6f14aedefba6e39c566e979038a8171..87271c5eb8f58692cc967c9dbdc3c9814810c6c6 100644
|
| --- a/third_party/protobuf/src/google/protobuf/stubs/callback.h
|
| +++ b/third_party/protobuf/src/google/protobuf/stubs/callback.h
|
| @@ -78,6 +78,18 @@ class LIBPROTOBUF_EXPORT Closure {
|
| GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Closure);
|
| };
|
|
|
| +template<typename R>
|
| +class ResultCallback {
|
| + public:
|
| + ResultCallback() {}
|
| + virtual ~ResultCallback() {}
|
| +
|
| + virtual R Run() = 0;
|
| +
|
| + private:
|
| + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ResultCallback);
|
| +};
|
| +
|
| template<typename R, typename A1>
|
| class LIBPROTOBUF_EXPORT ResultCallback1 {
|
| public:
|
| @@ -240,6 +252,50 @@ class MethodClosure2 : public Closure {
|
| Arg2 arg2_;
|
| };
|
|
|
| +template<typename R>
|
| +class FunctionResultCallback_0_0 : public ResultCallback<R> {
|
| + public:
|
| + typedef R (*FunctionType)();
|
| +
|
| + FunctionResultCallback_0_0(FunctionType function, bool self_deleting)
|
| + : function_(function), self_deleting_(self_deleting) {}
|
| + ~FunctionResultCallback_0_0() {}
|
| +
|
| + R Run() {
|
| + bool needs_delete = self_deleting_; // read in case callback deletes
|
| + R result = function_();
|
| + if (needs_delete) delete this;
|
| + return result;
|
| + }
|
| +
|
| + private:
|
| + FunctionType function_;
|
| + bool self_deleting_;
|
| +};
|
| +
|
| +template<typename R, typename P1>
|
| +class FunctionResultCallback_1_0 : public ResultCallback<R> {
|
| + public:
|
| + typedef R (*FunctionType)(P1);
|
| +
|
| + FunctionResultCallback_1_0(FunctionType function, bool self_deleting,
|
| + P1 p1)
|
| + : function_(function), self_deleting_(self_deleting), p1_(p1) {}
|
| + ~FunctionResultCallback_1_0() {}
|
| +
|
| + R Run() {
|
| + bool needs_delete = self_deleting_; // read in case callback deletes
|
| + R result = function_(p1_);
|
| + if (needs_delete) delete this;
|
| + return result;
|
| + }
|
| +
|
| + private:
|
| + FunctionType function_;
|
| + bool self_deleting_;
|
| + P1 p1_;
|
| +};
|
| +
|
| template<typename R, typename Arg1>
|
| class FunctionResultCallback_0_1 : public ResultCallback1<R, Arg1> {
|
| public:
|
| @@ -408,6 +464,33 @@ inline Closure* NewPermanentCallback(
|
| object, method, false, arg1, arg2);
|
| }
|
|
|
| +// See ResultCallback
|
| +template<typename R>
|
| +inline ResultCallback<R>* NewCallback(R (*function)()) {
|
| + return new internal::FunctionResultCallback_0_0<R>(function, true);
|
| +}
|
| +
|
| +// See ResultCallback
|
| +template<typename R>
|
| +inline ResultCallback<R>* NewPermanentCallback(R (*function)()) {
|
| + return new internal::FunctionResultCallback_0_0<R>(function, false);
|
| +}
|
| +
|
| +// See ResultCallback
|
| +template<typename R, typename P1>
|
| +inline ResultCallback<R>* NewCallback(R (*function)(P1), P1 p1) {
|
| + return new internal::FunctionResultCallback_1_0<R, P1>(
|
| + function, true, p1);
|
| +}
|
| +
|
| +// See ResultCallback
|
| +template<typename R, typename P1>
|
| +inline ResultCallback<R>* NewPermanentCallback(
|
| + R (*function)(P1), P1 p1) {
|
| + return new internal::FunctionResultCallback_1_0<R, P1>(
|
| + function, false, p1);
|
| +}
|
| +
|
| // See ResultCallback1
|
| template<typename R, typename A1>
|
| inline ResultCallback1<R, A1>* NewCallback(R (*function)(A1)) {
|
|
|