utility.h 1.3 KB

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