OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ | 5 #ifndef PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ |
6 #define PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ | 6 #define PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "ppapi/c/pp_var.h" | 10 #include "ppapi/c/pp_var.h" |
11 #include "ppapi/cpp/dev/var_array_dev.h" | 11 #include "ppapi/cpp/dev/var_array_dev.h" |
12 #include "ppapi/cpp/dev/var_dictionary_dev.h" | 12 #include "ppapi/cpp/dev/var_dictionary_dev.h" |
13 #include "ppapi/cpp/extensions/optional.h" | 13 #include "ppapi/cpp/extensions/optional.h" |
14 #include "ppapi/cpp/logging.h" | 14 #include "ppapi/cpp/logging.h" |
15 #include "ppapi/cpp/var.h" | 15 #include "ppapi/cpp/var.h" |
| 16 #include "ppapi/cpp/var_array_buffer.h" |
16 | 17 |
17 namespace pp { | 18 namespace pp { |
18 namespace ext { | 19 namespace ext { |
19 namespace internal { | 20 namespace internal { |
20 | 21 |
21 template <class T> | 22 template <class T> |
22 class FromVarConverterBase { | 23 class FromVarConverterBase { |
23 public: | 24 public: |
24 T& value() { return value_; } | 25 T& value() { return value_; } |
25 | 26 |
26 protected: | 27 protected: |
27 FromVarConverterBase() : value_() { | 28 FromVarConverterBase() : value_() { |
28 } | 29 } |
29 | 30 |
30 explicit FromVarConverterBase(const T& value) : value_(value) { | 31 explicit FromVarConverterBase(const T& value) : value_(value) { |
31 } | 32 } |
32 | 33 |
33 ~FromVarConverterBase() { | 34 ~FromVarConverterBase() { |
34 } | 35 } |
35 | 36 |
36 T value_; | 37 T value_; |
37 }; | 38 }; |
38 | 39 |
39 template <class T> | 40 template <class T> |
40 class FromVarConverter : public FromVarConverterBase<T> { | 41 class FromVarConverter : public FromVarConverterBase<T> { |
41 public: | 42 public: |
42 FromVarConverter() { | 43 FromVarConverter() { |
43 } | 44 } |
44 | 45 |
45 FromVarConverter(const PP_Var& var) { | 46 explicit FromVarConverter(const PP_Var& var) { |
46 Set(var); | 47 Set(var); |
47 } | 48 } |
48 | 49 |
49 ~FromVarConverter() { | 50 ~FromVarConverter() { |
50 } | 51 } |
51 | 52 |
52 void Set(const PP_Var& var) { | 53 void Set(const PP_Var& var) { |
53 bool succeeded = FromVarConverterBase<T>::value_.Populate(var); | 54 bool succeeded = FromVarConverterBase<T>::value_.Populate(var); |
54 // Suppress unused variable warnings. | 55 // Suppress unused variable warnings. |
55 static_cast<void>(succeeded); | 56 static_cast<void>(succeeded); |
56 PP_DCHECK(succeeded); | 57 PP_DCHECK(succeeded); |
57 } | 58 } |
58 }; | 59 }; |
59 | 60 |
60 template <class T> | 61 template <class T> |
61 class FromVarConverter<Optional<T> > | 62 class FromVarConverter<Optional<T> > |
62 : public FromVarConverterBase<Optional<T> > { | 63 : public FromVarConverterBase<Optional<T> > { |
63 public: | 64 public: |
64 FromVarConverter() { | 65 FromVarConverter() { |
65 } | 66 } |
66 | 67 |
67 FromVarConverter(const PP_Var& var) { | 68 explicit FromVarConverter(const PP_Var& var) { |
68 Set(var); | 69 Set(var); |
69 } | 70 } |
70 | 71 |
71 ~FromVarConverter() { | 72 ~FromVarConverter() { |
72 } | 73 } |
73 | 74 |
74 void Set(const PP_Var& var) { | 75 void Set(const PP_Var& var) { |
75 if (var.type == PP_VARTYPE_UNDEFINED) { | 76 if (var.type == PP_VARTYPE_UNDEFINED) { |
76 FromVarConverterBase<Optional<T> >::value_.Reset(); | 77 FromVarConverterBase<Optional<T> >::value_.Reset(); |
77 } else { | 78 } else { |
78 FromVarConverter<T> converter(var); | 79 FromVarConverter<T> converter(var); |
79 FromVarConverterBase<Optional<T> >::value_ = converter.value(); | 80 FromVarConverterBase<Optional<T> >::value_ = converter.value(); |
80 } | 81 } |
81 } | 82 } |
82 }; | 83 }; |
83 | 84 |
84 template <> | 85 template <> |
85 class FromVarConverter<bool> : public FromVarConverterBase<bool> { | 86 class FromVarConverter<bool> : public FromVarConverterBase<bool> { |
86 public: | 87 public: |
87 FromVarConverter() { | 88 FromVarConverter() { |
88 } | 89 } |
89 | 90 |
90 FromVarConverter(const PP_Var& var) { | 91 explicit FromVarConverter(const PP_Var& var) { |
91 Set(var); | 92 Set(var); |
92 } | 93 } |
93 | 94 |
94 ~FromVarConverter() { | 95 ~FromVarConverter() { |
95 } | 96 } |
96 | 97 |
97 void Set(const PP_Var& var) { | 98 void Set(const PP_Var& var) { |
98 FromVarConverterBase<bool>::value_ = Var(var).AsBool(); | 99 FromVarConverterBase<bool>::value_ = Var(var).AsBool(); |
99 } | 100 } |
100 }; | 101 }; |
101 | 102 |
102 template <> | 103 template <> |
103 class FromVarConverter<int32_t> : public FromVarConverterBase<int32_t> { | 104 class FromVarConverter<int32_t> : public FromVarConverterBase<int32_t> { |
104 public: | 105 public: |
105 FromVarConverter() { | 106 FromVarConverter() { |
106 } | 107 } |
107 | 108 |
108 FromVarConverter(const PP_Var& var) { | 109 explicit FromVarConverter(const PP_Var& var) { |
109 Set(var); | 110 Set(var); |
110 } | 111 } |
111 | 112 |
112 ~FromVarConverter() { | 113 ~FromVarConverter() { |
113 } | 114 } |
114 | 115 |
115 void Set(const PP_Var& var) { | 116 void Set(const PP_Var& var) { |
116 FromVarConverterBase<int32_t>::value_ = Var(var).AsInt(); | 117 FromVarConverterBase<int32_t>::value_ = Var(var).AsInt(); |
117 } | 118 } |
118 }; | 119 }; |
119 | 120 |
120 template <> | 121 template <> |
121 class FromVarConverter<double> : public FromVarConverterBase<double> { | 122 class FromVarConverter<double> : public FromVarConverterBase<double> { |
122 public: | 123 public: |
123 FromVarConverter() { | 124 FromVarConverter() { |
124 } | 125 } |
125 | 126 |
126 FromVarConverter(const PP_Var& var) { | 127 explicit FromVarConverter(const PP_Var& var) { |
127 Set(var); | 128 Set(var); |
128 } | 129 } |
129 | 130 |
130 ~FromVarConverter() { | 131 ~FromVarConverter() { |
131 } | 132 } |
132 | 133 |
133 void Set(const PP_Var& var) { | 134 void Set(const PP_Var& var) { |
134 FromVarConverterBase<double>::value_ = Var(var).AsDouble(); | 135 FromVarConverterBase<double>::value_ = Var(var).AsDouble(); |
135 } | 136 } |
136 }; | 137 }; |
137 | 138 |
138 template <> | 139 template <> |
139 class FromVarConverter<std::string> : public FromVarConverterBase<std::string> { | 140 class FromVarConverter<std::string> : public FromVarConverterBase<std::string> { |
140 public: | 141 public: |
141 FromVarConverter() { | 142 FromVarConverter() { |
142 } | 143 } |
143 | 144 |
144 FromVarConverter(const PP_Var& var) { | 145 explicit FromVarConverter(const PP_Var& var) { |
145 Set(var); | 146 Set(var); |
146 } | 147 } |
147 | 148 |
148 ~FromVarConverter() { | 149 ~FromVarConverter() { |
149 } | 150 } |
150 | 151 |
151 void Set(const PP_Var& var) { | 152 void Set(const PP_Var& var) { |
152 FromVarConverterBase<std::string>::value_ = Var(var).AsString(); | 153 FromVarConverterBase<std::string>::value_ = Var(var).AsString(); |
153 } | 154 } |
154 }; | 155 }; |
155 | 156 |
156 template <> | 157 template <> |
157 class FromVarConverter<Var> : public FromVarConverterBase<Var> { | 158 class FromVarConverter<Var> : public FromVarConverterBase<Var> { |
158 public: | 159 public: |
159 FromVarConverter() { | 160 FromVarConverter() { |
160 } | 161 } |
161 | 162 |
162 FromVarConverter(const PP_Var& var) { | 163 explicit FromVarConverter(const PP_Var& var) { |
163 Set(var); | 164 Set(var); |
164 } | 165 } |
165 | 166 |
166 ~FromVarConverter() { | 167 ~FromVarConverter() { |
167 } | 168 } |
168 | 169 |
169 void Set(const PP_Var& var) { | 170 void Set(const PP_Var& var) { |
170 FromVarConverterBase<Var>::value_ = Var(var); | 171 FromVarConverterBase<Var>::value_ = Var(var); |
171 } | 172 } |
172 }; | 173 }; |
173 | 174 |
174 template <> | 175 template <> |
175 class FromVarConverter<VarArray_Dev> | 176 class FromVarConverter<VarArray_Dev> |
176 : public FromVarConverterBase<VarArray_Dev> { | 177 : public FromVarConverterBase<VarArray_Dev> { |
177 public: | 178 public: |
178 FromVarConverter() { | 179 FromVarConverter() { |
179 } | 180 } |
180 | 181 |
181 FromVarConverter(const PP_Var& var) { | 182 explicit FromVarConverter(const PP_Var& var) { |
182 Set(var); | 183 Set(var); |
183 } | 184 } |
184 | 185 |
185 ~FromVarConverter() { | 186 ~FromVarConverter() { |
186 } | 187 } |
187 | 188 |
188 void Set(const PP_Var& var) { | 189 void Set(const PP_Var& var) { |
189 FromVarConverterBase<VarArray_Dev>::value_ = Var(var); | 190 FromVarConverterBase<VarArray_Dev>::value_ = Var(var); |
190 } | 191 } |
191 }; | 192 }; |
192 | 193 |
193 template <> | 194 template <> |
194 class FromVarConverter<VarDictionary_Dev> | 195 class FromVarConverter<VarDictionary_Dev> |
195 : public FromVarConverterBase<VarDictionary_Dev> { | 196 : public FromVarConverterBase<VarDictionary_Dev> { |
196 public: | 197 public: |
197 FromVarConverter() { | 198 FromVarConverter() { |
198 } | 199 } |
199 | 200 |
200 FromVarConverter(const PP_Var& var) { | 201 explicit FromVarConverter(const PP_Var& var) { |
201 Set(var); | 202 Set(var); |
202 } | 203 } |
203 | 204 |
204 ~FromVarConverter() { | 205 ~FromVarConverter() { |
205 } | 206 } |
206 | 207 |
207 void Set(const PP_Var& var) { | 208 void Set(const PP_Var& var) { |
208 FromVarConverterBase<VarDictionary_Dev>::value_ = Var(var); | 209 FromVarConverterBase<VarDictionary_Dev>::value_ = Var(var); |
209 } | 210 } |
210 }; | 211 }; |
211 | 212 |
| 213 template <> |
| 214 class FromVarConverter<VarArrayBuffer> |
| 215 : public FromVarConverterBase<VarArrayBuffer> { |
| 216 public: |
| 217 FromVarConverter() { |
| 218 } |
| 219 |
| 220 explicit FromVarConverter(const PP_Var& var) { |
| 221 Set(var); |
| 222 } |
| 223 |
| 224 ~FromVarConverter() { |
| 225 } |
| 226 |
| 227 void Set(const PP_Var& var) { |
| 228 FromVarConverterBase<VarArrayBuffer>::value_ = Var(var); |
| 229 } |
| 230 }; |
| 231 |
212 } // namespace internal | 232 } // namespace internal |
213 } // namespace ext | 233 } // namespace ext |
214 } // namespace pp | 234 } // namespace pp |
215 | 235 |
216 #endif // PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ | 236 #endif // PPAPI_CPP_EXTENSIONS_FROM_VAR_CONVERTOR_H_ |
OLD | NEW |