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

Side by Side Diff: mojo/public/bindings/lib/bindings_internal.h

Issue 220243007: Mojo: Move mojo/public/bindings/lib to mojo/public/cpp/bindings/lib. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_INTERNAL_H_
6 #define MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_INTERNAL_H_
7
8 #include "mojo/public/cpp/system/core.h"
9
10 namespace mojo {
11 namespace internal {
12 template <typename T> class Array_Data;
13
14 #pragma pack(push, 1)
15
16 struct StructHeader {
17 uint32_t num_bytes;
18 uint32_t num_fields;
19 };
20 MOJO_COMPILE_ASSERT(sizeof(StructHeader) == 8, bad_sizeof_StructHeader);
21
22 struct ArrayHeader {
23 uint32_t num_bytes;
24 uint32_t num_elements;
25 };
26 MOJO_COMPILE_ASSERT(sizeof(ArrayHeader) == 8, bad_sizeof_ArrayHeader);
27
28 template <typename T>
29 union StructPointer {
30 uint64_t offset;
31 T* ptr;
32 };
33 MOJO_COMPILE_ASSERT(sizeof(StructPointer<char>) == 8, bad_sizeof_StructPointer);
34
35 template <typename T>
36 union ArrayPointer {
37 uint64_t offset;
38 Array_Data<T>* ptr;
39 };
40 MOJO_COMPILE_ASSERT(sizeof(ArrayPointer<char>) == 8, bad_sizeof_ArrayPointer);
41
42 union StringPointer {
43 uint64_t offset;
44 Array_Data<char>* ptr;
45 };
46 MOJO_COMPILE_ASSERT(sizeof(StringPointer) == 8, bad_sizeof_StringPointer);
47
48 #pragma pack(pop)
49
50 template <typename T>
51 void ResetIfNonNull(T* ptr) {
52 if (ptr)
53 *ptr = T();
54 }
55
56 template <typename T>
57 T FetchAndReset(T* ptr) {
58 T temp = *ptr;
59 *ptr = T();
60 return temp;
61 }
62
63 template <typename T>
64 class WrapperHelper {
65 public:
66 static const T Wrap(const typename T::Data* data) {
67 return T(typename T::Wrap(), const_cast<typename T::Data*>(data));
68 }
69 static typename T::Data* Unwrap(const T& object) {
70 return const_cast<typename T::Data*>(object.data_);
71 }
72 };
73
74 template <typename Data>
75 inline const typename Data::Wrapper Wrap(const Data* data) {
76 return WrapperHelper<typename Data::Wrapper>::Wrap(data);
77 }
78
79 template <typename T>
80 inline typename T::Data* Unwrap(const T& object) {
81 return WrapperHelper<T>::Unwrap(object);
82 }
83
84 template <typename T> struct TypeTraits {
85 static const bool kIsObject = true;
86 };
87 template <> struct TypeTraits<bool> {
88 static const bool kIsObject = false;
89 };
90 template <> struct TypeTraits<char> {
91 static const bool kIsObject = false;
92 };
93 template <> struct TypeTraits<int8_t> {
94 static const bool kIsObject = false;
95 };
96 template <> struct TypeTraits<int16_t> {
97 static const bool kIsObject = false;
98 };
99 template <> struct TypeTraits<int32_t> {
100 static const bool kIsObject = false;
101 };
102 template <> struct TypeTraits<int64_t> {
103 static const bool kIsObject = false;
104 };
105 template <> struct TypeTraits<uint8_t> {
106 static const bool kIsObject = false;
107 };
108 template <> struct TypeTraits<uint16_t> {
109 static const bool kIsObject = false;
110 };
111 template <> struct TypeTraits<uint32_t> {
112 static const bool kIsObject = false;
113 };
114 template <> struct TypeTraits<uint64_t> {
115 static const bool kIsObject = false;
116 };
117 template <> struct TypeTraits<float> {
118 static const bool kIsObject = false;
119 };
120 template <> struct TypeTraits<double> {
121 static const bool kIsObject = false;
122 };
123 template <> struct TypeTraits<Handle> {
124 static const bool kIsObject = false;
125 };
126 template <> struct TypeTraits<DataPipeConsumerHandle> {
127 static const bool kIsObject = false;
128 };
129 template <> struct TypeTraits<DataPipeProducerHandle> {
130 static const bool kIsObject = false;
131 };
132 template <> struct TypeTraits<MessagePipeHandle> {
133 static const bool kIsObject = false;
134 };
135
136 template <typename T> class ObjectTraits {};
137
138 } // namespace internal
139 } // namespace mojo
140
141 #endif // MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_INTERNAL_H_
OLDNEW
« no previous file with comments | « mojo/public/bindings/lib/array_internal.cc ('k') | mojo/public/bindings/lib/bindings_serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698