• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 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_CPP_BINDINGS_ARRAY_TRAITS_STL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_STL_H_
7 
8 #include <vector>
9 
10 #include "mojo/public/cpp/bindings/array_traits.h"
11 
12 namespace mojo {
13 
14 template <typename T>
15 struct ArrayTraits<std::vector<T>> {
16   using Element = T;
17 
18   static bool IsNull(const std::vector<T>& input) {
19     // std::vector<> is always converted to non-null mojom array.
20     return false;
21   }
22 
23   static void SetToNull(std::vector<T>* output) {
24     // std::vector<> doesn't support null state. Set it to empty instead.
25     output->clear();
26   }
27 
28   static size_t GetSize(const std::vector<T>& input) { return input.size(); }
29 
30   static T* GetData(std::vector<T>& input) { return input.data(); }
31 
32   static const T* GetData(const std::vector<T>& input) { return input.data(); }
33 
34   static typename std::vector<T>::reference GetAt(std::vector<T>& input,
35                                                   size_t index) {
36     return input[index];
37   }
38 
39   static typename std::vector<T>::const_reference GetAt(
40       const std::vector<T>& input,
41       size_t index) {
42     return input[index];
43   }
44 
45   static bool Resize(std::vector<T>& input, size_t size) {
46     if (input.size() != size) {
47       // This is a hack to make compilers for Mac and Android happy. They
48       // currently don't allow resizing types like
49       // std::vector<std::vector<MoveOnlyType>>.
50       // Because the deserialization code doesn't care about the original
51       // contents of |input|, we discard them directly.
52       std::vector<T> temp(size);
53       input.swap(temp);
54     }
55 
56     return true;
57   }
58 };
59 
60 }  // namespace mojo
61 
62 #endif  // MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_STL_H_
63