Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1007)

Unified Diff: mojo/public/cpp/bindings/lib/map_serialization.h

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « mojo/public/cpp/bindings/lib/map_internal.h ('k') | mojo/public/cpp/bindings/lib/map_serialization_forward.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698