| 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 |