13 #include <daw/daw_cpp_feature_check.h>
14 #include <daw/daw_likely.h>
17 #include <string_view>
26 #if defined( __cpp_nontype_template_parameter_class ) and \
27 not defined( DAW_USE_CPP17_ABI )
34 template<std::
size_t N>
36 static_assert( N > 0 );
37 char const m_data[N]{ };
40 template<std::size_t... Is>
41 constexpr json_name(
char const ( &ptr )[N], std::index_sequence<Is...> )
42 : m_data{ ptr[Is]... } {}
45 constexpr json_name(
char const ( &ptr )[N] )
46 : json_name( ptr, std::make_index_sequence<N>{ } ) {}
48 constexpr
operator daw::string_view( )
const {
49 return { m_data, N - 1 };
53 [[nodiscard]] constexpr
char const *begin( )
const {
58 [[nodiscard]] constexpr
char const *end( )
const {
59 return m_data +
static_cast<ptrdiff_t
>( size( ) );
62 [[nodiscard]]
static constexpr std::size_t size( ) {
66 template<std::
size_t M>
67 constexpr
bool operator==( json_name<M>
const &rhs )
const {
71 for( std::size_t n = 0; n < N; ++n ) {
72 if( m_data[n] != rhs.m_data[n] ) {
79 constexpr
bool operator==( daw::string_view rhs )
const {
80 return daw::string_view( m_data, N - 1 ) == rhs;
83 constexpr
bool operator==( std::string_view rhs )
const {
84 return std::string_view( m_data, N - 1 ) == rhs;
87 constexpr
operator std::string_view( )
const {
88 return std::string_view( m_data, N - 1 );
91 template<
typename... Chars>
92 json_name( Chars... ) -> json_name<
sizeof...( Chars )>;
94 template<std::
size_t N>
95 json_name(
char const ( & )[N] ) -> json_name<N>;
97 #define JSONNAMETYPE ::daw::json::json_name
101 namespace json_details {
107 #define JSONNAMETYPE char const *
110 namespace json_details {
117 namespace json_details {
118 template<
typename JsonMember>
119 using is_no_name = std::bool_constant<JsonMember::name == no_name>;
121 template<
typename JsonMember>
#define JSONNAMETYPE
Definition: daw_json_name.h:107
constexpr char const default_value_name[]
Definition: daw_json_name.h:113
std::bool_constant< JsonMember::name==no_name > is_no_name
Definition: daw_json_name.h:119
constexpr char const default_key_name[]
Definition: daw_json_name.h:112
constexpr bool is_no_name_v
Definition: daw_json_name.h:122
constexpr char const no_name[]
Definition: daw_json_name.h:109
Definition: daw_from_json.h:22
#define DAW_JSON_VER
Definition: version.h:11