]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/std/utility.h
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / api / include / opentelemetry / std / utility.h
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
3
4 #pragma once
5
6 #include "opentelemetry/version.h"
7
8 #include <cstddef>
9 #include <utility>
10
11 OPENTELEMETRY_BEGIN_NAMESPACE
12 // Standard Type aliases in nostd namespace
13 namespace nostd
14 {
15
16 //
17 // Backport of std::data
18 //
19 // See https://en.cppreference.com/w/cpp/iterator/data
20 //
21 template <class C>
22 auto data(C &c) noexcept(noexcept(c.data())) -> decltype(c.data())
23 {
24 return c.data();
25 }
26
27 template <class C>
28 auto data(const C &c) noexcept(noexcept(c.data())) -> decltype(c.data())
29 {
30 return c.data();
31 }
32
33 template <class T, std::size_t N>
34 T *data(T (&array)[N]) noexcept
35 {
36 return array;
37 }
38
39 template <class E>
40 const E *data(std::initializer_list<E> list) noexcept
41 {
42 return list.begin();
43 }
44
45 //
46 // Backport of std::size
47 //
48 // See https://en.cppreference.com/w/cpp/iterator/size
49 //
50 template <class C>
51 auto size(const C &c) noexcept(noexcept(c.size())) -> decltype(c.size())
52 {
53 return c.size();
54 }
55
56 template <class T, std::size_t N>
57 std::size_t size(T (&array)[N]) noexcept
58 {
59 return N;
60 }
61
62 template <std::size_t N>
63 using make_index_sequence = std::make_index_sequence<N>;
64
65 template <std::size_t... Ints>
66 using index_sequence = std::index_sequence<Ints...>;
67
68 } // namespace nostd
69 OPENTELEMETRY_END_NAMESPACE