1#ifndef _BBM_STRING_LITERAL_H_
2#define _BBM_STRING_LITERAL_H_
26 std::copy_n(str, N,
value);
30 static constexpr size_t size = N;
33 static constexpr bool empty = (N==1);
36 inline constexpr const char*
begin(
void)
const {
return value; }
37 inline constexpr const char*
end(
void)
const {
return value + N - 1; }
48 inline constexpr bool operator==(
const char (&str)[M])
const
68 inline constexpr bool operator<(
const char (&str)[M])
const
70 return operator<(string_literal<M>(str));
85 std::copy_n(
value, N-1, temp);
86 std::copy_n(str.
value, M, temp + N -1);
91 inline constexpr auto operator+(
const char (&str)[M])
const
104 template<
size_t S,
size_t LEN=N-1>
requires (S+LEN < N)
108 std::copy_n(
begin()+S, LEN, temp);
114 inline constexpr operator const char*(void)
const {
return value; }
129 template<
string_literal LIT>
130 constexpr decltype(LIT)
operator""_sl(
void)
139 template<
typename T>
struct is_string_literal_impl : std::false_type {};
140 template<
size_t N>
struct is_string_literal_impl<string_literal<N>> : std::true_type {};
Definition: aggregatebsdf.h:29
bbm::detail::is_string_literal_impl< std::decay_t< T > > is_string_literal
Definition: string_literal.h:148
constexpr bool is_string_literal_v
Definition: string_literal.h:151
Definition: string_literal.h:16
constexpr auto operator+(const char(&str)[M]) const
Definition: string_literal.h:91
constexpr bool operator<(string_literal< M > str) const
Definition: string_literal.h:62
static constexpr bool empty
true is empty (i.e., == '\0')
Definition: string_literal.h:33
friend std::ostream & operator<<(std::ostream &s, const string_literal< N > &str)
forward 'value' to stream
Definition: string_literal.h:117
constexpr bool operator<(const char(&str)[M]) const
Definition: string_literal.h:68
constexpr string_literal< N+M-1 > operator+(string_literal< M > str) const
Definition: string_literal.h:82
friend constexpr bool operator==(const char(&str)[M], string_literal< N > lit)
Definition: string_literal.h:54
friend constexpr bool operator<(const char(&str)[M], string_literal< N > lit)
Definition: string_literal.h:74
friend constexpr auto operator+(const char(&str)[M], string_literal< N > lit)
Definition: string_literal.h:97
constexpr auto substr(void) const
get substring
Definition: string_literal.h:105
char value[N]
Definition: string_literal.h:123
constexpr bool operator==(const char(&str)[M]) const
Definition: string_literal.h:48
constexpr string_literal(const char(&str)[N])
constructor
Definition: string_literal.h:24
constexpr string_literal(void)
Empty string.
Definition: string_literal.h:18
static constexpr size_t size
Number of chars in the string_literal.
Definition: string_literal.h:30
constexpr const char * end(void) const
Definition: string_literal.h:37
constexpr bool operator==(string_literal< M > str) const
Definition: string_literal.h:42
constexpr const char * begin(void) const
Definition: string_literal.h:36