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

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

Issue 632603002: Mojo C++ bindings: support Arrays that contain Maps. Base URL: https://chromium.googlesource.com/chromium/src.git@4_mojo_map
Patch Set: Created 6 years, 2 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 2013 The Chromium Authors. All rights reserved. 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 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_BINDINGS_INTERNAL_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_INTERNAL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_INTERNAL_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_INTERNAL_H_
7 7
8 #include "mojo/public/cpp/bindings/lib/template_util.h" 8 #include "mojo/public/cpp/bindings/lib/template_util.h"
9 #include "mojo/public/cpp/system/core.h" 9 #include "mojo/public/cpp/system/core.h"
10 10
11 namespace mojo { 11 namespace mojo {
12 class String; 12 class String;
13 template <typename Key, typename Value> class Map;
13 14
14 namespace internal { 15 namespace internal {
15 template <typename T> class Array_Data; 16 template <typename T> class Array_Data;
16 17
17 #pragma pack(push, 1) 18 #pragma pack(push, 1)
18 19
19 struct StructHeader { 20 struct StructHeader {
20 uint32_t num_bytes; 21 uint32_t num_bytes;
21 uint32_t num_fields; 22 uint32_t num_fields;
22 }; 23 };
(...skipping 18 matching lines...) Expand all
41 Array_Data<T>* ptr; 42 Array_Data<T>* ptr;
42 }; 43 };
43 MOJO_COMPILE_ASSERT(sizeof(ArrayPointer<char>) == 8, bad_sizeof_ArrayPointer); 44 MOJO_COMPILE_ASSERT(sizeof(ArrayPointer<char>) == 8, bad_sizeof_ArrayPointer);
44 45
45 union StringPointer { 46 union StringPointer {
46 uint64_t offset; 47 uint64_t offset;
47 Array_Data<char>* ptr; 48 Array_Data<char>* ptr;
48 }; 49 };
49 MOJO_COMPILE_ASSERT(sizeof(StringPointer) == 8, bad_sizeof_StringPointer); 50 MOJO_COMPILE_ASSERT(sizeof(StringPointer) == 8, bad_sizeof_StringPointer);
50 51
52 template <typename Key, typename Value>
53 struct MapPointerPair {
54 ArrayPointer<Key> keys;
55 ArrayPointer<Value> values;
56 };
57 MOJO_COMPILE_ASSERT(sizeof(MapPointerPair<char, char>) == 16,
58 bad_sizeof_MapPointerPair);
59
51 #pragma pack(pop) 60 #pragma pack(pop)
52 61
53 template <typename T> 62 template <typename T>
54 void ResetIfNonNull(T* ptr) { 63 void ResetIfNonNull(T* ptr) {
55 if (ptr) 64 if (ptr)
56 *ptr = T(); 65 *ptr = T();
57 } 66 }
58 67
59 template <typename T> 68 template <typename T>
60 T FetchAndReset(T* ptr) { 69 T FetchAndReset(T* ptr) {
61 T temp = *ptr; 70 T temp = *ptr;
62 *ptr = T(); 71 *ptr = T();
63 return temp; 72 return temp;
64 } 73 }
65 74
66 template <typename H> struct IsHandle { 75 template <typename H> struct IsHandle {
67 enum { value = IsBaseOf<Handle, H>::value }; 76 enum { value = IsBaseOf<Handle, H>::value };
68 }; 77 };
69 78
70 template <typename T, bool move_only = IsMoveOnlyType<T>::value> 79 template <typename T, bool move_only = IsMoveOnlyType<T>::value>
71 struct WrapperTraits; 80 struct WrapperTraits;
72 81
73 template <typename T> struct WrapperTraits<T, false> { 82 template <typename T> struct WrapperTraits<T, false> {
74 typedef T DataType; 83 typedef T DataType;
75 }; 84 };
76 template <typename H> struct WrapperTraits<ScopedHandleBase<H>, true> { 85 template <typename H> struct WrapperTraits<ScopedHandleBase<H>, true> {
77 typedef H DataType; 86 typedef H DataType;
78 }; 87 };
88 template <typename KeyWrapperType, typename ValueWrapperType>
89 struct WrapperTraits<Map<KeyWrapperType, ValueWrapperType>, true> {
90 typedef MapPointerPair<
91 typename WrapperTraits<KeyWrapperType>::DataType,
92 typename WrapperTraits<ValueWrapperType>::DataType> DataType;
93 };
79 template <typename S> struct WrapperTraits<S, true> { 94 template <typename S> struct WrapperTraits<S, true> {
80 typedef typename S::Data_* DataType; 95 typedef typename S::Data_* DataType;
81 }; 96 };
82 97
83 } // namespace internal 98 } // namespace internal
84 } // namespace mojo 99 } // namespace mojo
85 100
86 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_INTERNAL_H_ 101 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_INTERNAL_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/array_serialization.h ('k') | mojo/public/cpp/bindings/lib/map_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698