diff options
Diffstat (limited to 'mojo/public/cpp/bindings/lib/serialization_forward.h')
-rw-r--r-- | mojo/public/cpp/bindings/lib/serialization_forward.h | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/mojo/public/cpp/bindings/lib/serialization_forward.h b/mojo/public/cpp/bindings/lib/serialization_forward.h deleted file mode 100644 index 55c9982..0000000 --- a/mojo/public/cpp/bindings/lib/serialization_forward.h +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2016 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_SERIALIZATION_FORWARD_H_ -#define MOJO_PUBLIC_CPP_BINDINGS_LIB_SERIALIZATION_FORWARD_H_ - -#include "base/optional.h" -#include "mojo/public/cpp/bindings/array_traits.h" -#include "mojo/public/cpp/bindings/enum_traits.h" -#include "mojo/public/cpp/bindings/lib/template_util.h" -#include "mojo/public/cpp/bindings/map_traits.h" -#include "mojo/public/cpp/bindings/string_traits.h" -#include "mojo/public/cpp/bindings/struct_traits.h" -#include "mojo/public/cpp/bindings/union_traits.h" - -// This file is included by serialization implementation files to avoid circular -// includes. -// Users of the serialization funtions should include serialization.h (and also -// wtf_serialization.h if necessary). - -namespace mojo { -namespace internal { - -template <typename MojomType, typename MaybeConstUserType> -struct Serializer; - -template <typename T> -struct IsOptionalWrapper { - static const bool value = IsSpecializationOf< - base::Optional, - typename std::remove_const< - typename std::remove_reference<T>::type>::type>::value; -}; - -// PrepareToSerialize() must be matched by a Serialize() for the same input -// later. Moreover, within the same SerializationContext if PrepareToSerialize() -// is called for |input_1|, ..., |input_n|, Serialize() must be called for -// those objects in the exact same order. -template <typename MojomType, - typename InputUserType, - typename... Args, - typename std::enable_if< - !IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -size_t PrepareToSerialize(InputUserType&& input, Args&&... args) { - return Serializer<MojomType, - typename std::remove_reference<InputUserType>::type>:: - PrepareToSerialize(std::forward<InputUserType>(input), - std::forward<Args>(args)...); -} - -template <typename MojomType, - typename InputUserType, - typename... Args, - typename std::enable_if< - !IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -void Serialize(InputUserType&& input, Args&&... args) { - Serializer<MojomType, typename std::remove_reference<InputUserType>::type>:: - Serialize(std::forward<InputUserType>(input), - std::forward<Args>(args)...); -} - -template <typename MojomType, - typename DataType, - typename InputUserType, - typename... Args, - typename std::enable_if< - !IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -bool Deserialize(DataType&& input, InputUserType* output, Args&&... args) { - return Serializer<MojomType, InputUserType>::Deserialize( - std::forward<DataType>(input), output, std::forward<Args>(args)...); -} - -// Specialization that unwraps base::Optional<>. -template <typename MojomType, - typename InputUserType, - typename... Args, - typename std::enable_if< - IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -size_t PrepareToSerialize(InputUserType&& input, Args&&... args) { - if (!input) - return 0; - return PrepareToSerialize<MojomType>(*input, std::forward<Args>(args)...); -} - -template <typename MojomType, - typename InputUserType, - typename DataType, - typename... Args, - typename std::enable_if< - IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -void Serialize(InputUserType&& input, - Buffer* buffer, - DataType** output, - Args&&... args) { - if (!input) { - *output = nullptr; - return; - } - Serialize<MojomType>(*input, buffer, output, std::forward<Args>(args)...); -} - -template <typename MojomType, - typename DataType, - typename InputUserType, - typename... Args, - typename std::enable_if< - IsOptionalWrapper<InputUserType>::value>::type* = nullptr> -bool Deserialize(DataType&& input, InputUserType* output, Args&&... args) { - if (!input) { - *output = base::nullopt; - return true; - } - if (!*output) - output->emplace(); - return Deserialize<MojomType>(std::forward<DataType>(input), &output->value(), - std::forward<Args>(args)...); -} - -} // namespace internal -} // namespace mojo - -#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_SERIALIZATION_FORWARD_H_ |