blob: d8364030f33278d8210a99a1d5edd85f67959a4c [file] [log] [blame]
Daniel Cheng02908b602017-08-11 08:13:291// 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_CARRAY_H_
6#define MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_CARRAY_H_
7
8#include <cstddef>
9
10#include "base/containers/span.h"
11#include "mojo/public/cpp/bindings/array_traits.h"
12
13namespace mojo {
14
Daniel Cheng02908b602017-08-11 08:13:2915template <typename T>
Daniel Chengd5b7fa62017-08-20 19:27:2716struct ArrayTraits<base::span<T>> {
Daniel Cheng02908b602017-08-11 08:13:2917 using Element = T;
18
Daniel Cheng180e3c92018-02-02 23:16:0819 // There is no concept of a null span, as it is indistinguishable from the
20 // empty span.
21 static bool IsNull(const base::span<T>& input) { return false; }
Daniel Cheng02908b602017-08-11 08:13:2922
Daniel Chengd5b7fa62017-08-20 19:27:2723 static size_t GetSize(const base::span<T>& input) { return input.size(); }
Daniel Cheng02908b602017-08-11 08:13:2924
Daniel Chengd5b7fa62017-08-20 19:27:2725 static T* GetData(base::span<T>& input) { return input.data(); }
Daniel Cheng02908b602017-08-11 08:13:2926
Daniel Chengd5b7fa62017-08-20 19:27:2727 static const T* GetData(const base::span<T>& input) { return input.data(); }
Daniel Cheng02908b602017-08-11 08:13:2928
Daniel Chengd5b7fa62017-08-20 19:27:2729 static T& GetAt(base::span<T>& input, size_t index) {
Daniel Cheng02908b602017-08-11 08:13:2930 return input.data()[index];
31 }
32
Daniel Chengd5b7fa62017-08-20 19:27:2733 static const T& GetAt(const base::span<T>& input, size_t index) {
Daniel Cheng02908b602017-08-11 08:13:2934 return input.data()[index];
35 }
36
Daniel Chengd5b7fa62017-08-20 19:27:2737 static bool Resize(base::span<T>& input, size_t size) {
Daniel Cheng02908b602017-08-11 08:13:2938 if (size > input.size())
39 return false;
40 input = input.subspan(0, size);
41 return true;
42 }
43};
44
45} // namespace mojo
46
47#endif // MOJO_PUBLIC_CPP_BINDINGS_ARRAY_TRAITS_CARRAY_H_