tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
string_constant.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2024 Tobias Hienzsch
3
4#ifndef TETL_STRING_STRING_CONSTANT_HPP
5#define TETL_STRING_STRING_CONSTANT_HPP
6
7#include <etl/_array/array.hpp>
8#include <etl/_cstddef/size_t.hpp>
9#include <etl/_iterator/size.hpp>
10#include <etl/_string_view/basic_string_view.hpp>
11#include <etl/_utility/index_sequence.hpp>
12
13namespace etl {
14
15template <typename CharT, CharT... Chars>
17 using value_type = CharT;
18 using string_view_type = etl::basic_string_view<CharT>;
19
20 static constexpr auto storage = etl::array<CharT, sizeof...(Chars)>{Chars...};
21
22 static constexpr auto size() noexcept
23 {
24 return storage.size();
25 }
26
27 static constexpr auto begin() noexcept
28 {
29 return storage.cbegin();
30 }
31
32 static constexpr auto end() noexcept
33 {
34 return storage.cend();
35 }
36
37 [[nodiscard]] constexpr operator string_view_type() const noexcept
38 {
39 return {storage.data(), storage.size()};
40 }
41};
42
43template <typename CharT, CharT... Chars>
44[[nodiscard]] constexpr auto
45operator==(string_constant<CharT, Chars...> /*lhs*/, string_constant<CharT, Chars...> /*rhs*/) noexcept -> bool
46{
47 return true;
48}
49
50template <typename CharT, CharT... CharsL, CharT... CharsR>
51[[nodiscard]] constexpr auto
52operator==(string_constant<CharT, CharsL...> /*lhs*/, string_constant<CharT, CharsR...> /*rhs*/) noexcept -> bool
53{
54 return false;
55}
56
57namespace detail {
58
59template <auto CharArray>
60 requires(etl::size(CharArray) > 0)
61consteval auto to_string_constant()
62{
63 return []<etl::size_t... Is>(etl::index_sequence<Is...> /*i*/) {
64 return etl::string_constant<char, etl::get<Is>(CharArray)...>{};
65 }(etl::make_index_sequence<etl::size(CharArray) - 1>{});
66}
67
68} // namespace detail
69
70} // namespace etl
71
72#define TETL_STRING_C(str) etl::detail::to_string_constant<etl::to_array(str)>()
73
74#endif // TETL_STRING_STRING_CONSTANT_HPP
Definition adjacent_find.hpp:9
constexpr auto operator==(string_constant< CharT, CharsL... >, string_constant< CharT, CharsR... >) noexcept -> bool
Definition string_constant.hpp:52
constexpr auto operator==(string_constant< CharT, Chars... >, string_constant< CharT, Chars... >) noexcept -> bool
Definition string_constant.hpp:45
A container that encapsulates fixed size arrays.
Definition array.hpp:49
The class template basic_string_view describes an object that can refer to a constant contiguous sequ...
Definition basic_string_view.hpp:35
Definition string_constant.hpp:16
static constexpr auto begin() noexcept
Definition string_constant.hpp:27
constexpr operator string_view_type() const noexcept
Definition string_constant.hpp:37
static constexpr auto end() noexcept
Definition string_constant.hpp:32
static constexpr auto storage
Definition string_constant.hpp:20
static constexpr auto size() noexcept
Definition string_constant.hpp:22