| OLD | NEW |
| 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 Loading... |
| 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_ |
| OLD | NEW |