OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__ | 5 #ifndef TOOLS_JSON_SCHEMA_COMPILER_UTIL_H_ |
6 #define TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__ | 6 #define TOOLS_JSON_SCHEMA_COMPILER_UTIL_H_ |
7 | 7 |
| 8 #include <memory> |
8 #include <string> | 9 #include <string> |
| 10 #include <utility> |
9 #include <vector> | 11 #include <vector> |
10 | 12 |
11 #include "base/memory/scoped_ptr.h" | |
12 #include "base/values.h" | 13 #include "base/values.h" |
13 | 14 |
14 namespace json_schema_compiler { | 15 namespace json_schema_compiler { |
15 | 16 |
16 namespace util { | 17 namespace util { |
17 | 18 |
18 // Populates the item |out| from the value |from|. These are used by template | 19 // Populates the item |out| from the value |from|. These are used by template |
19 // specializations of |Get(Optional)ArrayFromList|. | 20 // specializations of |Get(Optional)ArrayFromList|. |
20 bool PopulateItem(const base::Value& from, scoped_ptr<base::Value>* out); | 21 bool PopulateItem(const base::Value& from, std::unique_ptr<base::Value>* out); |
21 | 22 |
22 bool PopulateItem(const base::Value& from, int* out); | 23 bool PopulateItem(const base::Value& from, int* out); |
23 bool PopulateItem(const base::Value& from, int* out, base::string16* error); | 24 bool PopulateItem(const base::Value& from, int* out, base::string16* error); |
24 bool PopulateItem(const base::Value& from, bool* out); | 25 bool PopulateItem(const base::Value& from, bool* out); |
25 bool PopulateItem(const base::Value& from, bool* out, base::string16* error); | 26 bool PopulateItem(const base::Value& from, bool* out, base::string16* error); |
26 bool PopulateItem(const base::Value& from, double* out); | 27 bool PopulateItem(const base::Value& from, double* out); |
27 bool PopulateItem(const base::Value& from, double* out, base::string16* error); | 28 bool PopulateItem(const base::Value& from, double* out, base::string16* error); |
28 bool PopulateItem(const base::Value& from, std::string* out); | 29 bool PopulateItem(const base::Value& from, std::string* out); |
29 bool PopulateItem(const base::Value& from, | 30 bool PopulateItem(const base::Value& from, |
30 std::string* out, | 31 std::string* out, |
31 base::string16* error); | 32 base::string16* error); |
32 bool PopulateItem(const base::Value& from, std::vector<char>* out); | 33 bool PopulateItem(const base::Value& from, std::vector<char>* out); |
33 bool PopulateItem(const base::Value& from, | 34 bool PopulateItem(const base::Value& from, |
34 std::vector<char>* out, | 35 std::vector<char>* out, |
35 base::string16* error); | 36 base::string16* error); |
36 bool PopulateItem(const base::Value& from, | 37 bool PopulateItem(const base::Value& from, |
37 scoped_ptr<base::Value>* out, | 38 std::unique_ptr<base::Value>* out, |
38 base::string16* error); | 39 base::string16* error); |
39 bool PopulateItem(const base::Value& from, scoped_ptr<base::Value>* out); | 40 bool PopulateItem(const base::Value& from, std::unique_ptr<base::Value>* out); |
40 | 41 |
41 // This template is used for types generated by tools/json_schema_compiler. | 42 // This template is used for types generated by tools/json_schema_compiler. |
42 template <class T> | 43 template <class T> |
43 bool PopulateItem(const base::Value& from, scoped_ptr<T>* out) { | 44 bool PopulateItem(const base::Value& from, std::unique_ptr<T>* out) { |
44 const base::DictionaryValue* dict = nullptr; | 45 const base::DictionaryValue* dict = nullptr; |
45 if (!from.GetAsDictionary(&dict)) | 46 if (!from.GetAsDictionary(&dict)) |
46 return false; | 47 return false; |
47 scoped_ptr<T> obj(new T()); | 48 std::unique_ptr<T> obj(new T()); |
48 if (!T::Populate(*dict, obj.get())) | 49 if (!T::Populate(*dict, obj.get())) |
49 return false; | 50 return false; |
50 *out = scoped_ptr<T>(obj.release()); | 51 *out = std::move(obj); |
51 return true; | 52 return true; |
52 } | 53 } |
53 | 54 |
54 // This template is used for types generated by tools/json_schema_compiler. | 55 // This template is used for types generated by tools/json_schema_compiler. |
55 template <class T> | 56 template <class T> |
56 bool PopulateItem(const base::Value& from, T* out) { | 57 bool PopulateItem(const base::Value& from, T* out) { |
57 const base::DictionaryValue* dict = nullptr; | 58 const base::DictionaryValue* dict = nullptr; |
58 if (!from.GetAsDictionary(&dict)) | 59 if (!from.GetAsDictionary(&dict)) |
59 return false; | 60 return false; |
60 T obj; | 61 T obj; |
61 if (!T::Populate(*dict, &obj)) | 62 if (!T::Populate(*dict, &obj)) |
62 return false; | 63 return false; |
63 *out = std::move(obj); | 64 *out = std::move(obj); |
64 return true; | 65 return true; |
65 } | 66 } |
66 | 67 |
67 // This template is used for types generated by tools/json_schema_compiler with | 68 // This template is used for types generated by tools/json_schema_compiler with |
68 // error generation enabled. | 69 // error generation enabled. |
69 template <class T> | 70 template <class T> |
70 bool PopulateItem(const base::Value& from, | 71 bool PopulateItem(const base::Value& from, |
71 scoped_ptr<T>* out, | 72 std::unique_ptr<T>* out, |
72 base::string16* error) { | 73 base::string16* error) { |
73 const base::DictionaryValue* dict = nullptr; | 74 const base::DictionaryValue* dict = nullptr; |
74 if (!from.GetAsDictionary(&dict)) | 75 if (!from.GetAsDictionary(&dict)) |
75 return false; | 76 return false; |
76 scoped_ptr<T> obj(new T()); | 77 std::unique_ptr<T> obj(new T()); |
77 if (!T::Populate(*dict, obj.get(), error)) | 78 if (!T::Populate(*dict, obj.get(), error)) |
78 return false; | 79 return false; |
79 *out = scoped_ptr<T>(obj.release()); | 80 *out = std::move(obj); |
80 return true; | 81 return true; |
81 } | 82 } |
82 | 83 |
83 // This template is used for types generated by tools/json_schema_compiler with | 84 // This template is used for types generated by tools/json_schema_compiler with |
84 // error generation enabled. | 85 // error generation enabled. |
85 template <class T> | 86 template <class T> |
86 bool PopulateItem(const base::Value& from, T* out, base::string16* error) { | 87 bool PopulateItem(const base::Value& from, T* out, base::string16* error) { |
87 const base::DictionaryValue* dict = nullptr; | 88 const base::DictionaryValue* dict = nullptr; |
88 if (!from.GetAsDictionary(&dict)) | 89 if (!from.GetAsDictionary(&dict)) |
89 return false; | 90 return false; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 } | 127 } |
127 | 128 |
128 return true; | 129 return true; |
129 } | 130 } |
130 | 131 |
131 // Creates a new vector containing |list| at |out|. Returns | 132 // Creates a new vector containing |list| at |out|. Returns |
132 // true on success or if there is nothing at the specified key. Returns false | 133 // true on success or if there is nothing at the specified key. Returns false |
133 // if anything other than a list of |T| is at the specified key. | 134 // if anything other than a list of |T| is at the specified key. |
134 template <class T> | 135 template <class T> |
135 bool PopulateOptionalArrayFromList(const base::ListValue& list, | 136 bool PopulateOptionalArrayFromList(const base::ListValue& list, |
136 scoped_ptr<std::vector<T>>* out) { | 137 std::unique_ptr<std::vector<T>>* out) { |
137 out->reset(new std::vector<T>()); | 138 out->reset(new std::vector<T>()); |
138 if (!PopulateArrayFromList(list, out->get())) { | 139 if (!PopulateArrayFromList(list, out->get())) { |
139 out->reset(); | 140 out->reset(); |
140 return false; | 141 return false; |
141 } | 142 } |
142 return true; | 143 return true; |
143 } | 144 } |
144 | 145 |
145 template <class T> | 146 template <class T> |
146 bool PopulateOptionalArrayFromList(const base::ListValue& list, | 147 bool PopulateOptionalArrayFromList(const base::ListValue& list, |
147 scoped_ptr<std::vector<T>>* out, | 148 std::unique_ptr<std::vector<T>>* out, |
148 base::string16* error) { | 149 base::string16* error) { |
149 out->reset(new std::vector<T>()); | 150 out->reset(new std::vector<T>()); |
150 if (!PopulateArrayFromList(list, out->get(), error)) { | 151 if (!PopulateArrayFromList(list, out->get(), error)) { |
151 out->reset(); | 152 out->reset(); |
152 return false; | 153 return false; |
153 } | 154 } |
154 return true; | 155 return true; |
155 } | 156 } |
156 | 157 |
157 // Appends a Value newly created from |from| to |out|. These used by template | 158 // Appends a Value newly created from |from| to |out|. These used by template |
158 // specializations of |Set(Optional)ArrayToList|. | 159 // specializations of |Set(Optional)ArrayToList|. |
159 void AddItemToList(const int from, base::ListValue* out); | 160 void AddItemToList(const int from, base::ListValue* out); |
160 void AddItemToList(const bool from, base::ListValue* out); | 161 void AddItemToList(const bool from, base::ListValue* out); |
161 void AddItemToList(const double from, base::ListValue* out); | 162 void AddItemToList(const double from, base::ListValue* out); |
162 void AddItemToList(const std::string& from, base::ListValue* out); | 163 void AddItemToList(const std::string& from, base::ListValue* out); |
163 void AddItemToList(const std::vector<char>& from, base::ListValue* out); | 164 void AddItemToList(const std::vector<char>& from, base::ListValue* out); |
164 void AddItemToList(const scoped_ptr<base::Value>& from, base::ListValue* out); | 165 void AddItemToList(const std::unique_ptr<base::Value>& from, |
165 void AddItemToList(const scoped_ptr<base::DictionaryValue>& from, | 166 base::ListValue* out); |
| 167 void AddItemToList(const std::unique_ptr<base::DictionaryValue>& from, |
166 base::ListValue* out); | 168 base::ListValue* out); |
167 | 169 |
168 // This template is used for types generated by tools/json_schema_compiler. | 170 // This template is used for types generated by tools/json_schema_compiler. |
169 template <class T> | 171 template <class T> |
170 void AddItemToList(const scoped_ptr<T>& from, base::ListValue* out) { | 172 void AddItemToList(const std::unique_ptr<T>& from, base::ListValue* out) { |
171 out->Append(from->ToValue()); | 173 out->Append(from->ToValue()); |
172 } | 174 } |
173 | 175 |
174 // This template is used for types generated by tools/json_schema_compiler. | 176 // This template is used for types generated by tools/json_schema_compiler. |
175 template <class T> | 177 template <class T> |
176 void AddItemToList(const T& from, base::ListValue* out) { | 178 void AddItemToList(const T& from, base::ListValue* out) { |
177 out->Append(from.ToValue()); | 179 out->Append(from.ToValue()); |
178 } | 180 } |
179 | 181 |
180 // Set |out| to the the contents of |from|. Requires PopulateItem to be | 182 // Set |out| to the the contents of |from|. Requires PopulateItem to be |
181 // implemented for |T|. | 183 // implemented for |T|. |
182 template <class T> | 184 template <class T> |
183 void PopulateListFromArray(const std::vector<T>& from, base::ListValue* out) { | 185 void PopulateListFromArray(const std::vector<T>& from, base::ListValue* out) { |
184 out->Clear(); | 186 out->Clear(); |
185 for (const T& item : from) | 187 for (const T& item : from) |
186 AddItemToList(item, out); | 188 AddItemToList(item, out); |
187 } | 189 } |
188 | 190 |
189 // Set |out| to the the contents of |from| if |from| is not null. Requires | 191 // Set |out| to the the contents of |from| if |from| is not null. Requires |
190 // PopulateItem to be implemented for |T|. | 192 // PopulateItem to be implemented for |T|. |
191 template <class T> | 193 template <class T> |
192 void PopulateListFromOptionalArray(const scoped_ptr<std::vector<T>>& from, | 194 void PopulateListFromOptionalArray(const std::unique_ptr<std::vector<T>>& from, |
193 base::ListValue* out) { | 195 base::ListValue* out) { |
194 if (from.get()) | 196 if (from) |
195 PopulateListFromArray(*from, out); | 197 PopulateListFromArray(*from, out); |
196 } | 198 } |
197 | 199 |
198 template <class T> | 200 template <class T> |
199 scoped_ptr<base::Value> CreateValueFromArray(const std::vector<T>& from) { | 201 std::unique_ptr<base::Value> CreateValueFromArray(const std::vector<T>& from) { |
200 base::ListValue* list = new base::ListValue(); | 202 std::unique_ptr<base::ListValue> list(new base::ListValue()); |
201 PopulateListFromArray(from, list); | 203 PopulateListFromArray(from, list.get()); |
202 return scoped_ptr<base::Value>(list); | 204 return std::move(list); |
203 } | 205 } |
204 | 206 |
205 template <class T> | 207 template <class T> |
206 scoped_ptr<base::Value> CreateValueFromOptionalArray( | 208 std::unique_ptr<base::Value> CreateValueFromOptionalArray( |
207 const scoped_ptr<std::vector<T>>& from) { | 209 const std::unique_ptr<std::vector<T>>& from) { |
208 if (from.get()) | 210 if (from) |
209 return CreateValueFromArray(*from); | 211 return CreateValueFromArray(*from); |
210 return scoped_ptr<base::Value>(); | 212 return nullptr; |
211 } | 213 } |
212 | 214 |
213 std::string ValueTypeToString(base::Value::Type type); | 215 std::string ValueTypeToString(base::Value::Type type); |
214 | 216 |
215 } // namespace util | 217 } // namespace util |
216 } // namespace json_schema_compiler | 218 } // namespace json_schema_compiler |
217 | 219 |
218 #endif // TOOLS_JSON_SCHEMA_COMPILER_UTIL_H__ | 220 #endif // TOOLS_JSON_SCHEMA_COMPILER_UTIL_H_ |
OLD | NEW |