| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ | 5 #ifndef MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ |
| 6 #define MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ | 6 #define MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ |
| 7 | 7 |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "mojo/common/values.mojom.h" | 9 #include "mojo/common/values.mojom.h" |
| 10 #include "mojo/public/cpp/bindings/array_traits.h" | 10 #include "mojo/public/cpp/bindings/array_traits.h" |
| 11 #include "mojo/public/cpp/bindings/clone_traits.h" | 11 #include "mojo/public/cpp/bindings/clone_traits.h" |
| 12 #include "mojo/public/cpp/bindings/map_traits.h" | 12 #include "mojo/public/cpp/bindings/map_traits.h" |
| 13 #include "mojo/public/cpp/bindings/struct_traits.h" | 13 #include "mojo/public/cpp/bindings/struct_traits.h" |
| 14 #include "mojo/public/cpp/bindings/union_traits.h" | 14 #include "mojo/public/cpp/bindings/union_traits.h" |
| 15 | 15 |
| 16 namespace mojo { | 16 namespace mojo { |
| 17 | 17 |
| 18 template <> | 18 template <> |
| 19 struct ArrayTraits<base::ListValue> { | 19 struct ArrayTraits<base::ListValue> { |
| 20 using Element = std::unique_ptr<base::Value>; | 20 using Element = base::Value; |
| 21 using ConstIterator = base::ListValue::const_iterator; | 21 using ConstIterator = base::ListValue::const_iterator; |
| 22 | 22 |
| 23 static size_t GetSize(const base::ListValue& input) { | 23 static size_t GetSize(const base::ListValue& input) { |
| 24 return input.GetSize(); | 24 return input.GetSize(); |
| 25 } | 25 } |
| 26 | 26 |
| 27 static ConstIterator GetBegin(const base::ListValue& input) { | 27 static ConstIterator GetBegin(const base::ListValue& input) { |
| 28 return input.begin(); | 28 return input.begin(); |
| 29 } | 29 } |
| 30 | 30 |
| 31 static void AdvanceIterator(ConstIterator& iterator) { ++iterator; } | 31 static void AdvanceIterator(ConstIterator& iterator) { ++iterator; } |
| 32 | 32 |
| 33 static const Element& GetValue(ConstIterator& iterator) { return *iterator; } | 33 static const Element& GetValue(ConstIterator& iterator) { return **iterator; } |
| 34 }; | 34 }; |
| 35 | 35 |
| 36 template <> | 36 template <> |
| 37 struct StructTraits<common::mojom::ListValueDataView, base::ListValue> { | 37 struct StructTraits<common::mojom::ListValueDataView, base::ListValue> { |
| 38 static bool Read(common::mojom::ListValueDataView data, |
| 39 base::ListValue* value); |
| 40 |
| 38 static const base::ListValue& values(const base::ListValue& value) { | 41 static const base::ListValue& values(const base::ListValue& value) { |
| 39 return value; | 42 return value; |
| 40 } | 43 } |
| 41 }; | 44 }; |
| 42 | 45 |
| 43 template <> | 46 template <> |
| 44 struct StructTraits<common::mojom::ListValueDataView, | |
| 45 std::unique_ptr<base::ListValue>> { | |
| 46 static bool IsNull(const std::unique_ptr<base::ListValue>& value) { | |
| 47 return !value; | |
| 48 } | |
| 49 | |
| 50 static void SetToNull(std::unique_ptr<base::ListValue>* value) { | |
| 51 value->reset(); | |
| 52 } | |
| 53 | |
| 54 static const base::ListValue& values( | |
| 55 const std::unique_ptr<base::ListValue>& value) { | |
| 56 return *value; | |
| 57 } | |
| 58 | |
| 59 static bool Read(common::mojom::ListValueDataView data, | |
| 60 std::unique_ptr<base::ListValue>* value); | |
| 61 }; | |
| 62 | |
| 63 template <> | |
| 64 struct MapTraits<base::DictionaryValue> { | 47 struct MapTraits<base::DictionaryValue> { |
| 65 using Key = std::string; | 48 using Key = std::string; |
| 66 using Value = base::Value; | 49 using Value = base::Value; |
| 67 using Iterator = base::DictionaryValue::Iterator; | 50 using Iterator = base::DictionaryValue::Iterator; |
| 68 | 51 |
| 69 static size_t GetSize(const base::DictionaryValue& input) { | 52 static size_t GetSize(const base::DictionaryValue& input) { |
| 70 return input.size(); | 53 return input.size(); |
| 71 } | 54 } |
| 72 | 55 |
| 73 static Iterator GetBegin(const base::DictionaryValue& input) { | 56 static Iterator GetBegin(const base::DictionaryValue& input) { |
| 74 return Iterator(input); | 57 return Iterator(input); |
| 75 } | 58 } |
| 76 | 59 |
| 77 static void AdvanceIterator(Iterator& iterator) { iterator.Advance(); } | 60 static void AdvanceIterator(Iterator& iterator) { iterator.Advance(); } |
| 78 | 61 |
| 79 static const Key& GetKey(Iterator& iterator) { return iterator.key(); } | 62 static const Key& GetKey(Iterator& iterator) { return iterator.key(); } |
| 80 | 63 |
| 81 static const Value& GetValue(Iterator& iterator) { return iterator.value(); } | 64 static const Value& GetValue(Iterator& iterator) { return iterator.value(); } |
| 82 }; | 65 }; |
| 83 | 66 |
| 84 template <> | 67 template <> |
| 85 struct StructTraits<common::mojom::DictionaryValueDataView, | 68 struct StructTraits<common::mojom::DictionaryValueDataView, |
| 86 base::DictionaryValue> { | 69 base::DictionaryValue> { |
| 70 static bool Read(common::mojom::DictionaryValueDataView data, |
| 71 base::DictionaryValue* value); |
| 72 |
| 87 static const base::DictionaryValue& values( | 73 static const base::DictionaryValue& values( |
| 88 const base::DictionaryValue& value) { | 74 const base::DictionaryValue& value) { |
| 89 return value; | 75 return value; |
| 90 } | 76 } |
| 91 }; | 77 }; |
| 92 | 78 |
| 93 template <> | 79 template <> |
| 94 struct StructTraits<common::mojom::DictionaryValueDataView, | |
| 95 std::unique_ptr<base::DictionaryValue>> { | |
| 96 static bool IsNull(const std::unique_ptr<base::DictionaryValue>& value) { | |
| 97 return !value; | |
| 98 } | |
| 99 | |
| 100 static void SetToNull(std::unique_ptr<base::DictionaryValue>* value) { | |
| 101 value->reset(); | |
| 102 } | |
| 103 | |
| 104 static const base::DictionaryValue& values( | |
| 105 const std::unique_ptr<base::DictionaryValue>& value) { | |
| 106 return *value; | |
| 107 } | |
| 108 static bool Read(common::mojom::DictionaryValueDataView data, | |
| 109 std::unique_ptr<base::DictionaryValue>* value); | |
| 110 }; | |
| 111 | |
| 112 template <> | |
| 113 struct CloneTraits<std::unique_ptr<base::DictionaryValue>, false> { | |
| 114 static std::unique_ptr<base::DictionaryValue> Clone( | |
| 115 const std::unique_ptr<base::DictionaryValue>& input); | |
| 116 }; | |
| 117 | |
| 118 template <> | |
| 119 struct UnionTraits<common::mojom::ValueDataView, base::Value> { | 80 struct UnionTraits<common::mojom::ValueDataView, base::Value> { |
| 81 static bool Read(common::mojom::ValueDataView data, base::Value* value); |
| 82 |
| 120 static common::mojom::ValueDataView::Tag GetTag(const base::Value& data) { | 83 static common::mojom::ValueDataView::Tag GetTag(const base::Value& data) { |
| 121 switch (data.GetType()) { | 84 switch (data.GetType()) { |
| 122 case base::Value::Type::NONE: | 85 case base::Value::Type::NONE: |
| 123 return common::mojom::ValueDataView::Tag::NULL_VALUE; | 86 return common::mojom::ValueDataView::Tag::NULL_VALUE; |
| 124 case base::Value::Type::BOOLEAN: | 87 case base::Value::Type::BOOLEAN: |
| 125 return common::mojom::ValueDataView::Tag::BOOL_VALUE; | 88 return common::mojom::ValueDataView::Tag::BOOL_VALUE; |
| 126 case base::Value::Type::INTEGER: | 89 case base::Value::Type::INTEGER: |
| 127 return common::mojom::ValueDataView::Tag::INT_VALUE; | 90 return common::mojom::ValueDataView::Tag::INT_VALUE; |
| 128 case base::Value::Type::DOUBLE: | 91 case base::Value::Type::DOUBLE: |
| 129 return common::mojom::ValueDataView::Tag::DOUBLE_VALUE; | 92 return common::mojom::ValueDataView::Tag::DOUBLE_VALUE; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 } | 152 } |
| 190 static const base::DictionaryValue& dictionary_value( | 153 static const base::DictionaryValue& dictionary_value( |
| 191 const base::Value& value) { | 154 const base::Value& value) { |
| 192 const base::DictionaryValue* dictionary_value = nullptr; | 155 const base::DictionaryValue* dictionary_value = nullptr; |
| 193 if (!value.GetAsDictionary(&dictionary_value)) | 156 if (!value.GetAsDictionary(&dictionary_value)) |
| 194 NOTREACHED(); | 157 NOTREACHED(); |
| 195 return *dictionary_value; | 158 return *dictionary_value; |
| 196 } | 159 } |
| 197 }; | 160 }; |
| 198 | 161 |
| 199 template <> | |
| 200 struct UnionTraits<common::mojom::ValueDataView, std::unique_ptr<base::Value>> { | |
| 201 static bool IsNull(const std::unique_ptr<base::Value>& value) { | |
| 202 return !value; | |
| 203 } | |
| 204 | |
| 205 static void SetToNull(std::unique_ptr<base::Value>* value) { value->reset(); } | |
| 206 | |
| 207 static common::mojom::ValueDataView::Tag GetTag( | |
| 208 const std::unique_ptr<base::Value>& value) { | |
| 209 return UnionTraits<common::mojom::ValueDataView, base::Value>::GetTag( | |
| 210 *value); | |
| 211 } | |
| 212 | |
| 213 static common::mojom::NullValuePtr null_value( | |
| 214 const std::unique_ptr<base::Value>& value) { | |
| 215 return UnionTraits<common::mojom::ValueDataView, base::Value>::null_value( | |
| 216 *value); | |
| 217 } | |
| 218 static bool bool_value(const std::unique_ptr<base::Value>& value) { | |
| 219 return UnionTraits<common::mojom::ValueDataView, base::Value>::bool_value( | |
| 220 *value); | |
| 221 } | |
| 222 static int32_t int_value(const std::unique_ptr<base::Value>& value) { | |
| 223 return UnionTraits<common::mojom::ValueDataView, base::Value>::int_value( | |
| 224 *value); | |
| 225 } | |
| 226 static double double_value(const std::unique_ptr<base::Value>& value) { | |
| 227 return UnionTraits<common::mojom::ValueDataView, base::Value>::double_value( | |
| 228 *value); | |
| 229 } | |
| 230 static base::StringPiece string_value( | |
| 231 const std::unique_ptr<base::Value>& value) { | |
| 232 return UnionTraits<common::mojom::ValueDataView, base::Value>::string_value( | |
| 233 *value); | |
| 234 } | |
| 235 static mojo::ConstCArray<uint8_t> binary_value( | |
| 236 const std::unique_ptr<base::Value>& value) { | |
| 237 return UnionTraits<common::mojom::ValueDataView, base::Value>::binary_value( | |
| 238 *value); | |
| 239 } | |
| 240 static const base::ListValue& list_value( | |
| 241 const std::unique_ptr<base::Value>& value) { | |
| 242 return UnionTraits<common::mojom::ValueDataView, base::Value>::list_value( | |
| 243 *value); | |
| 244 } | |
| 245 static const base::DictionaryValue& dictionary_value( | |
| 246 const std::unique_ptr<base::Value>& value) { | |
| 247 return UnionTraits<common::mojom::ValueDataView, | |
| 248 base::Value>::dictionary_value(*value); | |
| 249 } | |
| 250 | |
| 251 static bool Read(common::mojom::ValueDataView data, | |
| 252 std::unique_ptr<base::Value>* value); | |
| 253 }; | |
| 254 | |
| 255 } // namespace mojo | 162 } // namespace mojo |
| 256 | 163 |
| 257 #endif // MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ | 164 #endif // MOJO_COMMON_VALUES_STRUCT_TRAITS_H_ |
| OLD | NEW |