libcopp 2.3.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
utility_data_size.h
Go to the documentation of this file.
1// Copyright 2025 owent
2// Created by owent on 2025-03-03
3
4#pragma once
5
7#include "libcopp/utils/config/libcopp_build_features.h"
8
9#include <string>
10
11LIBCOPP_COPP_NAMESPACE_BEGIN
12namespace nostd {
13
14#if ((defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L))
15
16using ::std::data;
17using ::std::size;
18
19#else
20
21template <class TCONTAINER>
22LIBCOPP_COPP_API_HEAD_ONLY constexpr inline auto size(const TCONTAINER& container) -> decltype(container.size()) {
23 return container.size();
24}
25
26template <class T, size_t SIZE>
27LIBCOPP_COPP_API_HEAD_ONLY constexpr inline size_t size(const T (&)[SIZE]) noexcept {
28 return SIZE;
29}
30
31template <class TCONTAINER>
32LIBCOPP_COPP_API_HEAD_ONLY constexpr inline auto data(TCONTAINER& container) -> decltype(container.data()) {
33 return container.data();
34}
35
36template <class TCONTAINER>
37LIBCOPP_COPP_API_HEAD_ONLY constexpr inline auto data(const TCONTAINER& container) -> decltype(container.data()) {
38 return container.data();
39}
40
41template <class T, size_t SIZE>
42LIBCOPP_COPP_API_HEAD_ONLY constexpr inline T* data(T (&array_value)[SIZE]) noexcept {
43 return array_value;
44}
45
46template <class TELEMENT>
47LIBCOPP_COPP_API_HEAD_ONLY constexpr inline const TELEMENT* data(std::initializer_list<TELEMENT> l) noexcept {
48 return l.begin();
49}
50
51#endif
52} // namespace nostd
53LIBCOPP_COPP_NAMESPACE_END
LIBCOPP_COPP_API_HEAD_ONLY constexpr auto size(const TCONTAINER &container) -> decltype(container.size())
LIBCOPP_COPP_API_HEAD_ONLY constexpr auto data(TCONTAINER &container) -> decltype(container.data())