| Index: mojo/public/cpp/bindings/array_traits.h
|
| diff --git a/mojo/public/cpp/bindings/array_traits.h b/mojo/public/cpp/bindings/array_traits.h
|
| index da94b975319702f2929d75fcb197e4aa19a51168..366573db280a4311e54bbd3f4ec43c3f666ecb61 100644
|
| --- a/mojo/public/cpp/bindings/array_traits.h
|
| +++ b/mojo/public/cpp/bindings/array_traits.h
|
| @@ -10,31 +10,55 @@ 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 an array/vector
|
| -// template. Imagine you want to specialize it for CustomArray<>, you need to
|
| -// implement:
|
| +// 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<CustomArray<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 CustomArray<T>& input);
|
| -// static void SetToNull(CustomArray<T>* output);
|
| +// static bool IsNull(const Container<T>& input);
|
| +// static void SetToNull(Container<T>* output);
|
| //
|
| -// static size_t GetSize(const CustomArray<T>& input);
|
| +// 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(CustomArray<T>& input);
|
| -// static const T* GetData(const CustomArray<T>& input);
|
| +// static T* GetData(Container<T>& input);
|
| +// static const T* GetData(const Container<T>& input);
|
| //
|
| -// static T& GetAt(CustomArray<T>& input, size_t index);
|
| -// static const T& GetAt(const CustomArray<T>& input, size_t index);
|
| +// // 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|.
|
| +// 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(CustomArray<T>& input, size_t size);
|
| +// static bool Resize(Container<T>& input, size_t size);
|
| // };
|
| //
|
| template <typename T>
|
|
|