Publishing R3
[platform/upstream/dldt.git] / inference-engine / thirdparty / ade / common / include / util / container_helper.hpp
1 // Copyright (C) 2018 Intel Corporation
2 //
3 // SPDX-License-Identifier: Apache-2.0
4 //
5
6 #ifndef UTIL_CONTAINER_HELPER_HPP
7 #define UTIL_CONTAINER_HELPER_HPP
8
9 #include <vector>
10 #include <array>
11
12 #include "util/memory_range.hpp"
13
14 namespace util
15 {
16
17 template<typename T>
18 inline auto data(const std::vector<T>& vector) -> decltype(vector.data())
19 {
20     return vector.data();
21 }
22
23 template<typename T>
24 inline std::size_t size(const std::vector<T>& vector)
25 {
26     return vector.size();
27 }
28
29 template<typename T>
30 inline auto slice(const std::vector<T>& vector, const std::size_t start, const std::size_t newSize)
31 ->decltype(memory_range(data(vector), size(vector)).Slice(start, newSize))
32 {
33     return memory_range(data(vector), size(vector)).Slice(start, newSize);
34 }
35
36 template<typename T, std::size_t Size>
37 inline auto data(const std::array<T, Size>& arr) -> decltype(arr.data())
38 {
39     return arr.data();
40 }
41
42 template<typename T, std::size_t Size>
43 inline std::size_t size(const std::array<T, Size>& arr)
44 {
45     return arr.size();
46 }
47
48 template<typename T, std::size_t Size>
49 inline auto slice(const std::array<T, Size>& arr, const std::size_t start, const std::size_t newSize)
50 ->decltype(memory_range(data(arr), size(arr)).Slice(start, newSize))
51 {
52     return memory_range(data(arr), size(arr)).Slice(start, newSize);
53 }
54
55 }
56
57 #endif