Index: mojo/public/cpp/bindings/lib/map_serialization.h |
diff --git a/mojo/public/cpp/bindings/lib/map_serialization.h b/mojo/public/cpp/bindings/lib/map_serialization.h |
deleted file mode 100644 |
index 8605cb75c9c1ae6ffb3e29d083bc6d08cdbf0881..0000000000000000000000000000000000000000 |
--- a/mojo/public/cpp/bindings/lib/map_serialization.h |
+++ /dev/null |
@@ -1,212 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_SERIALIZATION_H_ |
-#define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_SERIALIZATION_H_ |
- |
-#include <type_traits> |
- |
-#include "mojo/public/cpp/bindings/lib/array_internal.h" |
-#include "mojo/public/cpp/bindings/lib/array_serialization.h" |
-#include "mojo/public/cpp/bindings/lib/bindings_internal.h" |
-#include "mojo/public/cpp/bindings/lib/iterator_util.h" |
-#include "mojo/public/cpp/bindings/lib/map_data_internal.h" |
-#include "mojo/public/cpp/bindings/lib/map_internal.h" |
-#include "mojo/public/cpp/bindings/lib/string_serialization.h" |
-#include "mojo/public/cpp/bindings/lib/template_util.h" |
-#include "mojo/public/cpp/bindings/map.h" |
- |
-namespace mojo { |
-namespace internal { |
- |
-template <typename MapType, |
- typename DataType, |
- bool value_is_move_only_type = IsMoveOnlyType<MapType>::value, |
- bool is_union = IsUnionDataType< |
- typename std::remove_pointer<DataType>::type>::value> |
-struct MapSerializer; |
- |
-template <typename MapType, typename DataType> |
-struct MapSerializer<MapType, DataType, false, false> { |
- static size_t GetBaseArraySize(size_t count) { |
- return Align(count * sizeof(DataType)); |
- } |
- static size_t GetItemSize(const MapType& item) { return 0; } |
-}; |
- |
-template <> |
-struct MapSerializer<bool, bool, false, false> { |
- static size_t GetBaseArraySize(size_t count) { |
- return Align((count + 7) / 8); |
- } |
- static size_t GetItemSize(bool item) { return 0; } |
-}; |
- |
-template <typename H> |
-struct MapSerializer<ScopedHandleBase<H>, H, true, false> { |
- static size_t GetBaseArraySize(size_t count) { |
- return Align(count * sizeof(H)); |
- } |
- static size_t GetItemSize(const ScopedHandleBase<H>& item) { return 0; } |
-}; |
- |
-// This template must only apply to pointer mojo entity (structs and arrays). |
-// This is done by ensuring that WrapperTraits<S>::DataType is a pointer. |
-template <typename S> |
-struct MapSerializer< |
- S, |
- typename std::enable_if< |
- std::is_pointer<typename WrapperTraits<S>::DataType>::value, |
- typename WrapperTraits<S>::DataType>::type, |
- true, |
- false> { |
- typedef |
- typename std::remove_pointer<typename WrapperTraits<S>::DataType>::type |
- S_Data; |
- static size_t GetBaseArraySize(size_t count) { |
- return count * sizeof(StructPointer<S_Data>); |
- } |
- static size_t GetItemSize(const S& item) { |
- return item ? GetSerializedSize_(*UnwrapConstStructPtr<S>::value(item)) : 0; |
- } |
-}; |
- |
-template <typename U, typename U_Data> |
-struct MapSerializer<U, U_Data, true, true> { |
- static size_t GetBaseArraySize(size_t count) { |
- // GetSerializedSize_ (called in GetItemSize()) will account for |
- // sizeof(U_Data), so prevent double counting by having this count be 0. |
- return 0; |
- } |
- static size_t GetItemSize(const U& item) { return GetSerializedSize_(item); } |
-}; |
- |
-template <> |
-struct MapSerializer<String, String_Data*, false, false> { |
- static size_t GetBaseArraySize(size_t count) { |
- return count * sizeof(StringPointer); |
- } |
- static size_t GetItemSize(const String& item) { |
- return GetSerializedSize_(item); |
- } |
-}; |
- |
-} // namespace internal |
- |
-// TODO(erg): This can't go away yet. We still need to calculate out the size |
-// of a struct header, and two arrays. |
-template <typename MapKey, typename MapValue> |
-inline size_t GetSerializedSize_(const Map<MapKey, MapValue>& input) { |
- if (!input) |
- return 0; |
- typedef typename internal::WrapperTraits<MapKey>::DataType DataKey; |
- typedef typename internal::WrapperTraits<MapValue>::DataType DataValue; |
- |
- size_t count = input.size(); |
- size_t struct_overhead = sizeof(mojo::internal::Map_Data<DataKey, DataValue>); |
- size_t key_base_size = |
- sizeof(internal::ArrayHeader) + |
- internal::MapSerializer<MapKey, DataKey>::GetBaseArraySize(count); |
- size_t value_base_size = |
- sizeof(internal::ArrayHeader) + |
- internal::MapSerializer<MapValue, DataValue>::GetBaseArraySize(count); |
- |
- size_t key_data_size = 0; |
- size_t value_data_size = 0; |
- for (auto it = input.cbegin(); it != input.cend(); ++it) { |
- key_data_size += |
- internal::MapSerializer<MapKey, DataKey>::GetItemSize(it.GetKey()); |
- value_data_size += |
- internal::MapSerializer<MapValue, DataValue>::GetItemSize( |
- it.GetValue()); |
- } |
- |
- return struct_overhead + key_base_size + key_data_size + value_base_size + |
- value_data_size; |
-} |
- |
-// SerializeMap_ will return ValidationError::NONE on success and set |
-// |output| accordingly. On failure, |input| will be partially serialized into |
-// |output| up until an error occurs (which is propagated up and returned by |
-// SerializeMap_), in which case |buf| is also partially consumed. |
-// |
-// We don't need an ArrayValidateParams instance for key validation since |
-// we can deduce it from the Key type. (which can only be primitive types or |
-// non-nullable strings.) |
-template <typename MapKey, |
- typename MapValue, |
- typename DataKey, |
- typename DataValue> |
-inline internal::ValidationError SerializeMap_( |
- Map<MapKey, MapValue>* input, |
- internal::Buffer* buf, |
- internal::Map_Data<DataKey, DataValue>** output, |
- const internal::ArrayValidateParams* value_validate_params) { |
- if (input->is_null()) { |
- // |input| could be a nullable map, in which case |output| is serialized as |
- // null, which is valid. |
- *output = nullptr; |
- return internal::ValidationError::NONE; |
- } |
- |
- internal::Map_Data<DataKey, DataValue>* result = |
- internal::Map_Data<DataKey, DataValue>::New(buf); |
- |
- // We *must* serialize the keys before we allocate an Array_Data for the |
- // values. |
- internal::Array_Data<DataKey>* keys_data = |
- internal::Array_Data<DataKey>::New(input->size(), buf); |
- result->keys.ptr = keys_data; |
- |
- internal::MapKeyIterator<MapKey, MapValue> key_iter(input); |
- const internal::ArrayValidateParams* key_validate_params = |
- internal::MapKeyValidateParamsFactory<DataKey>::Get(); |
- |
- auto keys_retval = |
- internal::ArraySerializer<MapKey, DataKey>::SerializeElements( |
- key_iter.begin(), input->size(), buf, result->keys.ptr, |
- key_validate_params); |
- if (keys_retval != internal::ValidationError::NONE) |
- return keys_retval; |
- |
- // Now we try allocate an Array_Data for the values |
- internal::Array_Data<DataValue>* values_data = |
- internal::Array_Data<DataValue>::New(input->size(), buf); |
- result->values.ptr = values_data; |
- |
- internal::MapValueIterator<MapKey, MapValue> value_iter(input); |
- |
- auto values_retval = |
- internal::ArraySerializer<MapValue, DataValue>::SerializeElements( |
- value_iter.begin(), input->size(), buf, result->values.ptr, |
- value_validate_params); |
- if (values_retval != internal::ValidationError::NONE) |
- return values_retval; |
- |
- *output = result; |
- return internal::ValidationError::NONE; |
-} |
- |
-template <typename MapKey, |
- typename MapValue, |
- typename DataKey, |
- typename DataValue> |
-inline void Deserialize_(internal::Map_Data<DataKey, DataValue>* input, |
- Map<MapKey, MapValue>* output) { |
- if (input) { |
- Array<MapKey> keys; |
- Array<MapValue> values; |
- |
- Deserialize_(input->keys.ptr, &keys); |
- Deserialize_(input->values.ptr, &values); |
- |
- *output = Map<MapKey, MapValue>(keys.Pass(), values.Pass()); |
- } else { |
- output->reset(); |
- } |
-} |
- |
-} // namespace mojo |
- |
-#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_SERIALIZATION_H_ |