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

Side by Side Diff: mojo/public/cpp/bindings/lib/native_struct_serialization.h

Issue 1955123003: Mojo C++ bindings: switch the remaining callsites of the old serialization interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@24_union_and_others
Patch Set: Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include <limits> 11 #include <limits>
12 12
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/pickle.h" 14 #include "base/pickle.h"
15 #include "ipc/ipc_param_traits.h" 15 #include "ipc/ipc_param_traits.h"
16 #include "mojo/public/cpp/bindings/lib/array_internal.h" 16 #include "mojo/public/cpp/bindings/lib/array_internal.h"
17 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 17 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
18 #include "mojo/public/cpp/bindings/lib/native_struct_data.h" 18 #include "mojo/public/cpp/bindings/lib/native_struct_data.h"
19 #include "mojo/public/cpp/bindings/lib/serialization_forward.h" 19 #include "mojo/public/cpp/bindings/lib/serialization_forward.h"
20 #include "mojo/public/cpp/bindings/lib/serialization_util.h" 20 #include "mojo/public/cpp/bindings/lib/serialization_util.h"
21 #include "mojo/public/cpp/bindings/native_struct.h"
21 22
22 namespace mojo { 23 namespace mojo {
23 namespace internal { 24 namespace internal {
24 25
25 template <typename MaybeConstUserType,
26 bool unmapped = std::is_same<
27 NativeStructPtr,
28 typename std::remove_const<MaybeConstUserType>::type>::value>
29 struct NativeStructSerializerImpl;
30
31 template <typename MaybeConstUserType> 26 template <typename MaybeConstUserType>
32 struct NativeStructSerializerImpl<MaybeConstUserType, true> { 27 struct NativeStructSerializerImpl {
33 static size_t PrepareToSerialize(const NativeStructPtr& input,
34 SerializationContext* context) {
35 if (!input)
36 return 0;
37 return internal::PrepareToSerialize<Array<uint8_t>>(input->data, context);
38 }
39
40 static void Serialize(NativeStructPtr& input,
41 Buffer* buffer,
42 NativeStruct_Data** output,
43 SerializationContext* context) {
44 if (!input) {
45 *output = nullptr;
46 return;
47 }
48
49 Array_Data<uint8_t>* data = nullptr;
50 const ArrayValidateParams params(0, false, nullptr);
51 internal::Serialize<Array<uint8_t>>(input->data, buffer, &data, &params,
52 context);
53 *output = reinterpret_cast<NativeStruct_Data*>(data);
54 }
55
56 static bool Deserialize(NativeStruct_Data* input,
57 NativeStructPtr* output,
58 SerializationContext* context) {
59 Array_Data<uint8_t>* data = reinterpret_cast<Array_Data<uint8_t>*>(input);
60
61 NativeStructPtr result(NativeStruct::New());
62 if (!internal::Deserialize<Array<uint8_t>>(data, &result->data, context)) {
63 output = nullptr;
64 return false;
65 }
66 if (!result->data)
67 *output = nullptr;
68 else
69 result.Swap(output);
70 return true;
71 }
72 };
73
74 template <typename MaybeConstUserType>
75 struct NativeStructSerializerImpl<MaybeConstUserType, false> {
76 using UserType = typename std::remove_const<MaybeConstUserType>::type; 28 using UserType = typename std::remove_const<MaybeConstUserType>::type;
77 using Traits = IPC::ParamTraits<UserType>; 29 using Traits = IPC::ParamTraits<UserType>;
78 30
79 static size_t PrepareToSerialize(MaybeConstUserType& value, 31 static size_t PrepareToSerialize(MaybeConstUserType& value,
80 SerializationContext* context) { 32 SerializationContext* context) {
81 base::PickleSizer sizer; 33 base::PickleSizer sizer;
82 Traits::GetSize(&sizer, value); 34 Traits::GetSize(&sizer, value);
83 return Align(sizer.payload_size() + sizeof(ArrayHeader)); 35 return Align(sizer.payload_size() + sizeof(ArrayHeader));
84 } 36 }
85 37
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 return false; 89 return false;
138 } 90 }
139 91
140 // Return the header to its original state. 92 // Return the header to its original state.
141 header->num_bytes += sizeof(ArrayHeader); 93 header->num_bytes += sizeof(ArrayHeader);
142 94
143 return true; 95 return true;
144 } 96 }
145 }; 97 };
146 98
99 struct UnmappedNativeStructSerializerImpl {
100 static size_t PrepareToSerialize(const NativeStructPtr& input,
101 SerializationContext* context);
102 static void Serialize(const NativeStructPtr& input,
103 Buffer* buffer,
104 NativeStruct_Data** output,
105 SerializationContext* context);
106 static bool Deserialize(NativeStruct_Data* input,
107 NativeStructPtr* output,
108 SerializationContext* context);
109 };
110
111 template <>
112 struct NativeStructSerializerImpl<NativeStructPtr>
113 : public UnmappedNativeStructSerializerImpl {};
114
115 template <>
116 struct NativeStructSerializerImpl<const NativeStructPtr>
117 : public UnmappedNativeStructSerializerImpl {};
118
147 template <typename MaybeConstUserType> 119 template <typename MaybeConstUserType>
148 struct Serializer<NativeStructPtr, MaybeConstUserType> 120 struct Serializer<NativeStructPtr, MaybeConstUserType>
149 : public NativeStructSerializerImpl<MaybeConstUserType> {}; 121 : public NativeStructSerializerImpl<MaybeConstUserType> {};
150 122
151 } // namespace internal 123 } // namespace internal
152 } // namespace mojo 124 } // namespace mojo
153 125
154 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_ 126 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_NATIVE_STRUCT_SERIALIZATION_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_proxy.cc ('k') | mojo/public/cpp/bindings/lib/native_struct_serialization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698