31#if defined( DAW_JSON_CNTTP_JSON_NAME )
38#if defined( DAW_JSON_HAS_REFLECTION )
40 char const *m_data{ };
41 std::size_t m_size{ };
43 template<std::
size_t N>
44 consteval json_name(
char const ( &ptr )[N] ) noexcept
45 : json_name( daw::string_view( ptr, N - 1 ) ) {}
47 consteval json_name( daw::string_view sv ) noexcept
48 : m_data( std::define_static_string( sv ) )
49 , m_size( sv.size( ) ) {}
51 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr
52 operator daw::string_view( )
const noexcept {
53 return { m_data, m_size };
57 [[nodiscard]] DAW_ATTRIB_RET_NONNULL
58 DAW_ATTRIB_INLINE
constexpr char const *
59 begin( )
const noexcept {
64 [[nodiscard]] DAW_ATTRIB_RET_NONNULL
65 DAW_ATTRIB_INLINE
constexpr char const *
66 end( )
const noexcept {
67 return m_data + m_size;
70 [[nodiscard]]
constexpr std::size_t size( )
const {
74 [[nodiscard]]
constexpr bool empty( )
const {
78 [[nodiscard]]
constexpr bool
79 operator==( json_name
const &rhs )
const noexcept {
80 return daw::string_view( m_data, m_size ) ==
81 daw::string_view( rhs.m_data, rhs.m_size );
84 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr bool
85 operator==( daw::string_view rhs )
const noexcept {
86 return daw::string_view( m_data, m_size ) == rhs;
89 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr
90 operator std::string_view( )
const noexcept {
91 return std::string_view( m_data, m_size );
95 template<std::
size_t N>
97 static_assert( N > 0 );
98 char const m_data[N]{ };
100 template<std::size_t... Is>
101 DAW_ATTRIB_INLINE DAW_CONSTEVAL json_name(
102 daw::not_null<char const *> ptr, std::index_sequence<Is...> ) noexcept
103 : m_data{ ptr[Is]... } {}
105 DAW_ATTRIB_INLINE DAW_CONSTEVAL
106 json_name(
char const ( &ptr )[N] ) noexcept
107 : json_name( ptr, std::make_index_sequence<N>{ } ) {}
109 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr
110 operator daw::string_view( )
const noexcept {
111 return { m_data, N - 1 };
115 [[nodiscard]] DAW_ATTRIB_RET_NONNULL
116 DAW_ATTRIB_INLINE
constexpr char const *
117 begin( )
const noexcept {
122 [[nodiscard]] DAW_ATTRIB_RET_NONNULL
123 DAW_ATTRIB_INLINE
constexpr char const *
124 end( )
const noexcept {
125 return m_data +
static_cast<ptrdiff_t
>( size( ) );
128 [[nodiscard]]
static DAW_CONSTEVAL std::size_t size( ) {
132 [[nodiscard]]
static DAW_CONSTEVAL
bool empty( ) {
136 template<std::
size_t M>
137 [[nodiscard]]
constexpr bool
138 operator==( json_name<M>
const &rhs )
const noexcept {
142 for( std::size_t n = 0; n < N; ++n ) {
143 if( m_data[n] != rhs.m_data[n] ) {
150 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr bool
151 operator==( daw::string_view rhs )
const noexcept {
152 return daw::string_view( m_data, N - 1 ) == rhs;
155 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr bool
156 operator==( std::string_view rhs )
const noexcept {
157 return std::string_view( m_data, N - 1 ) == rhs;
160 [[nodiscard]] DAW_ATTRIB_INLINE
constexpr
161 operator std::string_view( )
const noexcept {
162 return std::string_view( m_data, N - 1 );
165 template<
typename... Chars>
166 json_name( Chars... ) -> json_name<
sizeof...( Chars )>;
168 template<std::
size_t N>
169 json_name(
char const ( & )[N] ) -> json_name<N>;
171#define JSONNAMETYPE ::daw::json::json_name
176#define JSONNAMETYPE char const *
180 namespace json_details {
183 template<
typename... Ts>
184 DAW_CPP20_CONCEPT all_have_name_v = ( has_name_v<Ts> and ... );
187 DAW_CPP20_CONCEPT is_no_name_v = not has_name_v<T>;
189 template<
typename... Ts>
190 DAW_CPP20_CONCEPT are_no_name_v = ( is_no_name_v<Ts> and ... );