Index: mojo/public/cpp/bindings/lib/native_struct_serialization.h |
diff --git a/mojo/public/cpp/bindings/lib/native_struct_serialization.h b/mojo/public/cpp/bindings/lib/native_struct_serialization.h |
index 90927a9e720f47f2dec3c5c61944301b050fd883..d8881844b657d41e3923d1acf281bc429ea504af 100644 |
--- a/mojo/public/cpp/bindings/lib/native_struct_serialization.h |
+++ b/mojo/public/cpp/bindings/lib/native_struct_serialization.h |
@@ -18,61 +18,13 @@ |
#include "mojo/public/cpp/bindings/lib/native_struct_data.h" |
#include "mojo/public/cpp/bindings/lib/serialization_forward.h" |
#include "mojo/public/cpp/bindings/lib/serialization_util.h" |
+#include "mojo/public/cpp/bindings/native_struct.h" |
namespace mojo { |
namespace internal { |
-template <typename MaybeConstUserType, |
- bool unmapped = std::is_same< |
- NativeStructPtr, |
- typename std::remove_const<MaybeConstUserType>::type>::value> |
-struct NativeStructSerializerImpl; |
- |
template <typename MaybeConstUserType> |
-struct NativeStructSerializerImpl<MaybeConstUserType, true> { |
- static size_t PrepareToSerialize(const NativeStructPtr& input, |
- SerializationContext* context) { |
- if (!input) |
- return 0; |
- return internal::PrepareToSerialize<Array<uint8_t>>(input->data, context); |
- } |
- |
- static void Serialize(NativeStructPtr& input, |
- Buffer* buffer, |
- NativeStruct_Data** output, |
- SerializationContext* context) { |
- if (!input) { |
- *output = nullptr; |
- return; |
- } |
- |
- Array_Data<uint8_t>* data = nullptr; |
- const ArrayValidateParams params(0, false, nullptr); |
- internal::Serialize<Array<uint8_t>>(input->data, buffer, &data, ¶ms, |
- context); |
- *output = reinterpret_cast<NativeStruct_Data*>(data); |
- } |
- |
- static bool Deserialize(NativeStruct_Data* input, |
- NativeStructPtr* output, |
- SerializationContext* context) { |
- Array_Data<uint8_t>* data = reinterpret_cast<Array_Data<uint8_t>*>(input); |
- |
- NativeStructPtr result(NativeStruct::New()); |
- if (!internal::Deserialize<Array<uint8_t>>(data, &result->data, context)) { |
- output = nullptr; |
- return false; |
- } |
- if (!result->data) |
- *output = nullptr; |
- else |
- result.Swap(output); |
- return true; |
- } |
-}; |
- |
-template <typename MaybeConstUserType> |
-struct NativeStructSerializerImpl<MaybeConstUserType, false> { |
+struct NativeStructSerializerImpl { |
using UserType = typename std::remove_const<MaybeConstUserType>::type; |
using Traits = IPC::ParamTraits<UserType>; |
@@ -144,6 +96,26 @@ struct NativeStructSerializerImpl<MaybeConstUserType, false> { |
} |
}; |
+struct UnmappedNativeStructSerializerImpl { |
+ static size_t PrepareToSerialize(const NativeStructPtr& input, |
+ SerializationContext* context); |
+ static void Serialize(const NativeStructPtr& input, |
+ Buffer* buffer, |
+ NativeStruct_Data** output, |
+ SerializationContext* context); |
+ static bool Deserialize(NativeStruct_Data* input, |
+ NativeStructPtr* output, |
+ SerializationContext* context); |
+}; |
+ |
+template <> |
+struct NativeStructSerializerImpl<NativeStructPtr> |
+ : public UnmappedNativeStructSerializerImpl {}; |
+ |
+template <> |
+struct NativeStructSerializerImpl<const NativeStructPtr> |
+ : public UnmappedNativeStructSerializerImpl {}; |
+ |
template <typename MaybeConstUserType> |
struct Serializer<NativeStructPtr, MaybeConstUserType> |
: public NativeStructSerializerImpl<MaybeConstUserType> {}; |