Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: third_party/libaddressinput/chromium/cpp/include/libaddressinput/callback.h

Issue 109323011: [rac] Download all rules for a country code in libaddressinput. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix windows build. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (C) 2013 Google Inc. 1 // Copyright (C) 2013 Google Inc.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and 12 // See the License for the specific language governing permissions and
13 // limitations under the License. 13 // limitations under the License.
14 14
15 #ifndef I18N_ADDRESSINPUT_CALLBACK_H_ 15 #ifndef I18N_ADDRESSINPUT_CALLBACK_H_
16 #define I18N_ADDRESSINPUT_CALLBACK_H_ 16 #define I18N_ADDRESSINPUT_CALLBACK_H_
17 17
18 #include <libaddressinput/util/scoped_ptr.h> 18 #include <libaddressinput/util/scoped_ptr.h>
19 19
20 #include <cassert> 20 #include <cassert>
21 #include <cstddef> 21 #include <cstddef>
22 #include <string>
22 23
23 namespace i18n { 24 namespace i18n {
24 namespace addressinput { 25 namespace addressinput {
25 26
26 // Stores a pointer to a method in an object. Sample usage: 27 // Stores a pointer to a method in an object. Sample usage:
27 // class MyClass { 28 // class MyClass {
28 // public: 29 // public:
29 // typedef Callback<MyKeyType, MyDataType> MyCallback; 30 // typedef Callback<std::string, std::string> MyConstRefCallback;
31 // typedef ScopdedPtrCallback<std::string, MyDataType> MyScopedPtrCallback;
30 // 32 //
31 // void GetDataAsynchronously() { 33 // void GetStringAsynchronously() {
32 // scoped_ptr<MyCallback> callback(BuildCallback( 34 // scoped_ptr<MyCallback> callback(BuildCallback(
33 // this, &MyClass::OnDataReady)); 35 // this, &MyClass::OnStringReady));
34 // bool success = ... 36 // bool success = ...
35 // MyKeyType key = ... 37 // std::string key = ...
36 // MyDataType data = ... 38 // std::string data = ...
37 // (*callback)(success, key, data); 39 // (*callback)(success, key, data);
38 // } 40 // }
39 // 41 //
42 // void GetDataAsynchronously() {
43 // scoped_ptr<MyScopedPtrCallback> callback(BuildScopedPtrCallback(
44 // this, &MyClass::OnDataReady));
45 // bool success = ...
46 // std::string key = ...
47 // scoped_ptr<MyDataType> data = ...
48 // (*callback)(success, key, data.Pass());
49 // }
50 //
51 // void OnStringReady(bool success,
52 // const std::string& key,
53 // const std::string& data) {
54 // ...
55 // }
56 //
40 // void OnDataReady(bool success, 57 // void OnDataReady(bool success,
41 // const MyKeyType& key, 58 // const std::string& key,
42 // const MyDataType& data) { 59 // scoped_ptr<MyDataType> data) {
43 // ... 60 // ...
44 // } 61 // }
45 // }; 62 // };
46 template <typename Param1, typename Param2> 63 template <typename RequestType, typename ResponseType>
47 class Callback { 64 class Callback {
48 public: 65 public:
49 virtual ~Callback() {} 66 virtual ~Callback() {}
50 67
51 virtual void operator()(bool success, 68 virtual void operator()(bool success,
52 const Param1& param1, 69 const RequestType& request,
53 const Param2& param2) const = 0; 70 const ResponseType& response) const = 0;
71 };
72
73 template <typename RequestType, typename ResponseType>
74 class ScopedPtrCallback {
75 public:
76 virtual ~ScopedPtrCallback() {}
77
78 virtual void operator()(bool success,
79 const RequestType& request,
80 scoped_ptr<ResponseType> response) const = 0;
54 }; 81 };
55 82
56 namespace { 83 namespace {
57 84
58 template <typename BaseType, typename Param1, typename Param2> 85 template <typename BaseType, typename RequestType, typename ResponseType>
59 class CallbackImpl : public Callback<Param1, Param2> { 86 class CallbackImpl : public Callback<RequestType, ResponseType> {
60 public: 87 public:
61 typedef void (BaseType::*Method)(bool, const Param1&, const Param2&); 88 typedef void (BaseType::*Method)(
89 bool, const RequestType&, const ResponseType&);
62 90
63 CallbackImpl(BaseType* instance, Method method) 91 CallbackImpl(BaseType* instance, Method method)
64 : instance_(instance), 92 : instance_(instance),
65 method_(method) { 93 method_(method) {
66 assert(instance_ != NULL); 94 assert(instance_ != NULL);
67 assert(method_ != NULL); 95 assert(method_ != NULL);
68 } 96 }
69 97
70 virtual ~CallbackImpl() {} 98 virtual ~CallbackImpl() {}
71 99
100 // Callback implementation.
72 virtual void operator()(bool success, 101 virtual void operator()(bool success,
73 const Param1& param1, 102 const RequestType& request,
74 const Param2& param2) const { 103 const ResponseType& response) const {
75 (instance_->*method_)(success, param1, param2); 104 (instance_->*method_)(success, request, response);
76 } 105 }
77 106
78 private: 107 private:
108 BaseType* instance_;
109 Method method_;
110 };
111
112 template <typename BaseType, typename RequestType, typename ResponseType>
113 class ScopedPtrCallbackImpl :
114 public ScopedPtrCallback<RequestType, ResponseType> {
115 public:
116 typedef void (BaseType::*Method)(
117 bool, const RequestType&, scoped_ptr<ResponseType>);
118
119 ScopedPtrCallbackImpl(BaseType* instance, Method method)
120 : instance_(instance),
121 method_(method) {
122 assert(instance_ != NULL);
123 assert(method_ != NULL);
124 }
125
126 virtual ~ScopedPtrCallbackImpl() {}
127
128 // ScopedPtrCallback implementation.
129 virtual void operator()(bool success,
130 const RequestType& request,
131 scoped_ptr<ResponseType> response) const {
132 (instance_->*method_)(success, request, response.Pass());
133 }
134
135 private:
79 BaseType* instance_; 136 BaseType* instance_;
80 Method method_; 137 Method method_;
81 }; 138 };
82 139
83 } // namespace 140 } // namespace
84 141
85 // Returns a callback to |instance->method|. 142 // Returns a callback to |instance->method| with constant reference to data.
86 template <typename BaseType, typename Param1, typename Param2> 143 template <typename BaseType, typename RequestType, typename ResponseType>
87 scoped_ptr<Callback<Param1, Param2> > BuildCallback( 144 scoped_ptr<Callback<RequestType, ResponseType> > BuildCallback(
88 BaseType* instance, 145 BaseType* instance,
89 void (BaseType::*method)(bool, const Param1&, const Param2&)) { 146 void (BaseType::*method)(bool, const RequestType&, const ResponseType&)) {
90 return scoped_ptr<Callback<Param1, Param2> >( 147 return scoped_ptr<Callback<RequestType, ResponseType> >(
91 new CallbackImpl<BaseType, Param1, Param2>(instance, method)); 148 new CallbackImpl<BaseType, RequestType, ResponseType>(instance, method));
149 }
150
151 // Returns a callback to |instance->method| with scoped pointer to data.
152 template <typename BaseType, typename RequestType, typename ResponseType>
153 scoped_ptr<ScopedPtrCallback<RequestType, ResponseType> >
154 BuildScopedPtrCallback(
155 BaseType* instance,
156 void (BaseType::*method)(
157 bool, const RequestType&, scoped_ptr<ResponseType>)) {
158 return scoped_ptr<ScopedPtrCallback<RequestType, ResponseType> >(
159 new ScopedPtrCallbackImpl<BaseType, RequestType, ResponseType>(
160 instance, method));
92 } 161 }
93 162
94 } // namespace addressinput 163 } // namespace addressinput
95 } // namespace i18n 164 } // namespace i18n
96 165
97 #endif // I18N_ADDRESSINPUT_CALLBACK_H_ 166 #endif // I18N_ADDRESSINPUT_CALLBACK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698