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