diff options
author | Hidehiko Abe <hidehiko@google.com> | 2018-04-23 20:01:13 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-04-23 20:01:13 -0700 |
commit | ed7128dca79cff94e99465e3c1bc31d91d83c76d (patch) | |
tree | bd2d04362f66c36d4279f7a9735ba21ea3a2a021 /mojo/public/cpp/bindings/array_traits.h | |
parent | d6187ab7d79d95d101c2ecb83aa98c05bcdcccd1 (diff) | |
parent | 0ab20ac2283987e63b0e7c1318db2a5cf7c668d2 (diff) | |
download | libchrome-ed7128dca79cff94e99465e3c1bc31d91d83c76d.tar.gz |
Migrate libmojo repository into libchrome, part 2. am: b268b43ac6
am: 0ab20ac228
Change-Id: I1b1afe0c902f1d122b100f5bf56d1df4a94eb090
Diffstat (limited to 'mojo/public/cpp/bindings/array_traits.h')
-rw-r--r-- | mojo/public/cpp/bindings/array_traits.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/mojo/public/cpp/bindings/array_traits.h b/mojo/public/cpp/bindings/array_traits.h new file mode 100644 index 0000000000..594b2e0789 --- /dev/null +++ b/mojo/public/cpp/bindings/array_traits.h @@ -0,0 +1,71 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_H_ +#define MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_H_ + +namespace mojo { + +// This must be specialized for any type |T| to be serialized/deserialized as +// a mojom array. +// +// Usually you would like to do a partial specialization for a container (e.g. +// vector) template. Imagine you want to specialize it for Container<>, you need +// to implement: +// +// template <typename T> +// struct ArrayTraits<Container<T>> { +// using Element = T; +// // These two statements are optional. Use them if you'd like to serialize +// // a container that supports iterators but does not support O(1) random +// // access and so GetAt(...) would be expensive. +// // using Iterator = T::iterator; +// // using ConstIterator = T::const_iterator; +// +// // These two methods are optional. Please see comments in struct_traits.h +// static bool IsNull(const Container<T>& input); +// static void SetToNull(Container<T>* output); +// +// static size_t GetSize(const Container<T>& input); +// +// // These two methods are optional. They are used to access the +// // underlying storage of the array to speed up copy of POD types. +// static T* GetData(Container<T>& input); +// static const T* GetData(const Container<T>& input); +// +// // The following six methods are optional if the GetAt(...) methods are +// // implemented. These methods specify how to read the elements of +// // Container in some sequential order specified by the iterator. +// // +// // Acquires an iterator positioned at the first element in the container. +// static ConstIterator GetBegin(const Container<T>& input); +// static Iterator GetBegin(Container<T>& input); +// +// // Advances |iterator| to the next position within the container. +// static void AdvanceIterator(ConstIterator& iterator); +// static void AdvanceIterator(Iterator& iterator); +// +// // Returns a reference to the value at the current position of +// // |iterator|. Optionally, the ConstIterator version of GetValue can +// // return by value instead of by reference if it makes sense for the +// // type. +// static const T& GetValue(ConstIterator& iterator); +// static T& GetValue(Iterator& iterator); +// +// // These two methods are optional if the iterator methods are +// // implemented. +// static T& GetAt(Container<T>& input, size_t index); +// static const T& GetAt(const Container<T>& input, size_t index); +// +// // Returning false results in deserialization failure and causes the +// // message pipe receiving it to be disconnected. +// static bool Resize(Container<T>& input, size_t size); +// }; +// +template <typename T> +struct ArrayTraits; + +} // namespace mojo + +#endif // MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_H_ |