LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 24 matching lines...) Expand all Loading... |
35 { | 35 { |
36 typedef void* TYPEID; | 36 typedef void* TYPEID; |
37 | 37 |
38 enum class TypeCategory | 38 enum class TypeCategory |
39 { | 39 { |
40 UNKNOWN, | 40 UNKNOWN, |
41 VOID, | 41 VOID, |
42 INT, | 42 INT, |
43 INT64, | 43 INT64, |
44 FLOAT, | 44 FLOAT, |
| 45 DOUBLE, |
45 DEPENDENT_STRING, | 46 DEPENDENT_STRING, |
46 OWNED_STRING, | 47 OWNED_STRING, |
47 STRING_REF, | 48 STRING_REF, |
48 CLASS_PTR | 49 CLASS_PTR |
49 }; | 50 }; |
50 | 51 |
51 template<typename T> | 52 template<typename T> |
52 struct TypeInfo | 53 struct TypeInfo |
53 { | 54 { |
54 /* | 55 /* |
(...skipping 14 matching lines...) Expand all Loading... |
69 { | 70 { |
70 if (std::is_void<T>()) | 71 if (std::is_void<T>()) |
71 return TypeCategory::VOID; | 72 return TypeCategory::VOID; |
72 | 73 |
73 if (std::is_same<T, uint64_t>()) | 74 if (std::is_same<T, uint64_t>()) |
74 return TypeCategory::INT64; | 75 return TypeCategory::INT64; |
75 | 76 |
76 if (std::is_integral<T>() || std::is_enum<T>()) | 77 if (std::is_integral<T>() || std::is_enum<T>()) |
77 return TypeCategory::INT; | 78 return TypeCategory::INT; |
78 | 79 |
79 if (std::is_floating_point<T>()) | 80 if (std::is_same<T, float>()) |
80 return TypeCategory::FLOAT; | 81 return TypeCategory::FLOAT; |
| 82 |
| 83 if (std::is_same<T, double>()) |
| 84 return TypeCategory::DOUBLE; |
81 | 85 |
82 if (std::is_same<DependentString, T>() || std::is_same<const DependentStri
ng, T>()) | 86 if (std::is_same<DependentString, T>() || std::is_same<const DependentStri
ng, T>()) |
83 return TypeCategory::DEPENDENT_STRING; | 87 return TypeCategory::DEPENDENT_STRING; |
84 | 88 |
85 if (std::is_same<OwnedString, T>() || std::is_same<const OwnedString, T>()
) | 89 if (std::is_same<OwnedString, T>() || std::is_same<const OwnedString, T>()
) |
86 return TypeCategory::OWNED_STRING; | 90 return TypeCategory::OWNED_STRING; |
87 | 91 |
88 if (std::is_same<String&, T>() || std::is_same<const String&, T>() || | 92 if (std::is_same<String&, T>() || std::is_same<const String&, T>() || |
89 std::is_same<DependentString&, T>()) | 93 std::is_same<DependentString&, T>()) |
90 { | 94 { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 struct ClassInfo | 185 struct ClassInfo |
182 { | 186 { |
183 TYPEID id; | 187 TYPEID id; |
184 TYPEID baseClass; | 188 TYPEID baseClass; |
185 std::string name; | 189 std::string name; |
186 std::vector<PropertyInfo> properties; | 190 std::vector<PropertyInfo> properties; |
187 std::vector<MethodInfo> methods; | 191 std::vector<MethodInfo> methods; |
188 DifferentiatorInfo subclass_differentiator; | 192 DifferentiatorInfo subclass_differentiator; |
189 ptrdiff_t ref_counted_offset; | 193 ptrdiff_t ref_counted_offset; |
190 }; | 194 }; |
191 | |
192 typedef std::function<void()> CustomGenerator; | |
193 | 195 |
194 void register_class(const char* name, TYPEID classID, TYPEID baseClassID, | 196 void register_class(const char* name, TYPEID classID, TYPEID baseClassID, |
195 ptrdiff_t ref_counted_offset); | 197 ptrdiff_t ref_counted_offset); |
196 | 198 |
197 void register_property(TYPEID classID, const char* name, | 199 void register_property(TYPEID classID, const char* name, |
198 const FunctionInfo& getter, const FunctionInfo& setter, | 200 const FunctionInfo& getter, const FunctionInfo& setter, |
199 const char* jsValue = ""); | 201 const char* jsValue = ""); |
200 | 202 |
201 void register_method(TYPEID classID, const char* name, | 203 void register_method(TYPEID classID, const char* name, |
202 const FunctionInfo& call); | 204 const FunctionInfo& call); |
(...skipping 12 matching lines...) Expand all Loading... |
215 | 217 |
216 void printClass(const ClassInfo& cls); | 218 void printClass(const ClassInfo& cls); |
217 } | 219 } |
218 | 220 |
219 template<typename ClassType, | 221 template<typename ClassType, |
220 typename BaseClass = bindings_internal::NoBaseClass, | 222 typename BaseClass = bindings_internal::NoBaseClass, |
221 typename std::enable_if<std::is_base_of<ref_counted, ClassType>::value>::typ
e* = nullptr> | 223 typename std::enable_if<std::is_base_of<ref_counted, ClassType>::value>::typ
e* = nullptr> |
222 class class_ | 224 class class_ |
223 { | 225 { |
224 public: | 226 public: |
225 class_(const char* name) | 227 class_(const char* name) |
226 { | 228 { |
227 ClassType* ptr = reinterpret_cast<ClassType*>(0x10000000); | 229 ClassType* ptr = reinterpret_cast<ClassType*>(0x10000000); |
228 ptrdiff_t ref_counted_offset = | 230 ptrdiff_t ref_counted_offset = |
229 reinterpret_cast<char*>(static_cast<ref_counted*>(ptr)) - | 231 reinterpret_cast<char*>(static_cast<ref_counted*>(ptr)) - |
230 reinterpret_cast<char*>(ptr); | 232 reinterpret_cast<char*>(ptr); |
231 bindings_internal::register_class(name, | 233 bindings_internal::register_class(name, |
232 bindings_internal::TypeInfo<ClassType>(), | 234 bindings_internal::TypeInfo<ClassType>(), |
233 bindings_internal::TypeInfo<BaseClass>(), | 235 bindings_internal::TypeInfo<BaseClass>(), |
234 ref_counted_offset | 236 ref_counted_offset |
235 ); | 237 ); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 std::vector<std::pair<int, std::string>> mapping; | 292 std::vector<std::pair<int, std::string>> mapping; |
291 for (const auto& item : list) | 293 for (const auto& item : list) |
292 mapping.emplace_back(item.first, item.second); | 294 mapping.emplace_back(item.first, item.second); |
293 | 295 |
294 bindings_internal::register_differentiator( | 296 bindings_internal::register_differentiator( |
295 bindings_internal::TypeInfo<ClassType>(), offset, mapping); | 297 bindings_internal::TypeInfo<ClassType>(), offset, mapping); |
296 return *this; | 298 return *this; |
297 } | 299 } |
298 }; | 300 }; |
299 | 301 |
300 void custom_generator(bindings_internal::CustomGenerator generator); | |
301 | |
302 void printBindings(); | 302 void printBindings(); |
LEFT | RIGHT |