15 #include <daw/cpp_17.h>
16 #include <daw/daw_attributes.h>
17 #include <daw/daw_traits.h>
39 namespace json_details {
55 namespace json_details {
71 namespace json_details {
84 namespace json_details {
98 namespace json_details {
113 namespace json_details {
128 namespace json_details {
143 namespace json_details {
157 namespace json_details {
159 inline constexpr
unsigned
163 inline constexpr
auto
173 namespace json_details {
175 inline constexpr
unsigned
179 inline constexpr
auto
190 namespace json_details {
192 inline constexpr
unsigned
204 namespace json_details {
216 namespace json_details {
223 template<
typename Policy,
typename Policies>
226 std::make_index_sequence<pack_size_v<Policies>>{ } );
228 template<
typename Policy>
230 basic_policy_bits_start<Policy, policy_list>;
232 template<
typename Policy>
234 static_assert( is_option_flag<Policy>,
235 "Only registered policy types are allowed" );
236 auto new_bits =
static_cast<unsigned>( e );
237 constexpr
unsigned mask = (1U << json_option_bits_width<Policy>)-1U;
239 new_bits <<= policy_bits_start<Policy>;
244 template<
typename Policy,
typename... Policies>
247 static_assert( ( is_option_flag<Policies> and ... ),
248 "Only registered policy types are allowed" );
250 auto new_bits =
static_cast<unsigned>( pol );
251 constexpr
unsigned mask = ( (1U << json_option_bits_width<Policy>)-1U );
253 new_bits <<= policy_bits_start<Policy>;
254 value &= ~( mask << policy_bits_start<Policy> );
256 if constexpr(
sizeof...( Policies ) > 0 ) {
257 if constexpr(
sizeof...( pols ) > 0 ) {
267 template<
typename Policy>
269 static_assert( is_option_flag<Policy>,
270 "Only registered policy types are allowed" );
272 new_bits <<= policy_bits_start<Policy>;
279 template<
typename... Policies>
282 ( set_bits_for<Policies>( default_json_option_value<Policies> ) |
292 template<
typename Policy,
typename Result = Policy>
294 static_assert( is_option_flag<Policy>,
295 "Only registered policy types are allowed" );
296 constexpr
unsigned mask = ( 1U << (policy_bits_start<Policy> +
297 json_option_bits_width<Policy>)) -
300 value >>= policy_bits_start<Policy>;
301 return static_cast<Result
>( Policy{ value } );
312 template<
typename... Policies>
315 static_assert( ( json_details::is_option_flag<Policies> and ... ),
316 "Only registered policy types are allowed" );
318 if constexpr(
sizeof...( Policies ) > 0 ) {
constexpr auto default_json_option_value< PolicyCommentTypes >
Definition: daw_json_parse_options.h:76
typename option_list_impl< ExecModeTypes, ZeroTerminatedString, PolicyCommentTypes, CheckedParseMode, AllowEscapedNames, IEEE754Precise, ForceFullNameCheck, MinifiedDocument, UseExactMappingsByDefault, TemporarilyMutateBuffer, MustVerifyEndOfDataIsValid, ExcludeSpecialEscapes >::type policy_list
Definition: daw_json_parse_options.h:221
constexpr unsigned basic_policy_bits_start
Definition: daw_json_parse_options.h:224
static constexpr json_options_t set_bits_for(JsonOptionList< OptionList... >, Option e)
Definition: daw_json_option_bits.h:161
constexpr auto default_json_option_value< UseExactMappingsByDefault >
Definition: daw_json_parse_options.h:164
constexpr auto default_json_option_value< MinifiedDocument >
Definition: daw_json_parse_options.h:103
constexpr auto default_json_option_value< ExecModeTypes >
Definition: daw_json_parse_options.h:44
constexpr auto default_json_option_value< IEEE754Precise >
Definition: daw_json_parse_options.h:133
constexpr auto default_json_option_value< MustVerifyEndOfDataIsValid >
Definition: daw_json_parse_options.h:180
constexpr unsigned json_option_bits_width< ExcludeSpecialEscapes >
Definition: daw_json_parse_options.h:206
constexpr json_options_t set_bits(JsonOptionList< OptionList... >, json_options_t value, Option pol, Options... pols)
Definition: daw_json_option_bits.h:138
constexpr unsigned json_option_bits_width< UseExactMappingsByDefault >
Definition: daw_json_parse_options.h:160
constexpr auto default_json_option_value< CheckedParseMode >
Definition: daw_json_parse_options.h:89
constexpr auto default_json_option_value< TemporarilyMutateBuffer >
Definition: daw_json_parse_options.h:196
constexpr auto default_json_option_value< ForceFullNameCheck >
Definition: daw_json_parse_options.h:148
constexpr unsigned json_option_bits_width< CheckedParseMode >
Definition: daw_json_parse_options.h:86
constexpr unsigned json_option_bits_width< ExecModeTypes >
Definition: daw_json_parse_options.h:41
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
constexpr unsigned json_option_bits_width< MinifiedDocument >
Definition: daw_json_parse_options.h:100
static constexpr json_options_t default_policy_flag
Definition: daw_json_parse_options.h:289
constexpr unsigned json_option_bits_width< IEEE754Precise >
Definition: daw_json_parse_options.h:130
constexpr unsigned json_option_bits_width< TemporarilyMutateBuffer >
Definition: daw_json_parse_options.h:193
constexpr unsigned json_option_bits_width< ForceFullNameCheck >
Definition: daw_json_parse_options.h:145
constexpr unsigned json_option_bits_width< PolicyCommentTypes >
Definition: daw_json_parse_options.h:73
constexpr auto default_json_option_value< AllowEscapedNames >
Definition: daw_json_parse_options.h:118
constexpr void set_bits_in(JsonOptionList< OptionList... >, json_options_t &value, Option e)
Definition: daw_json_option_bits.h:124
constexpr auto default_json_option_value< ZeroTerminatedString >
Definition: daw_json_parse_options.h:61
constexpr Result get_bits_for(JsonOptionList< OptionList... >, json_options_t value)
Definition: daw_json_option_bits.h:167
constexpr unsigned json_option_bits_width< ZeroTerminatedString >
Definition: daw_json_parse_options.h:57
constexpr unsigned json_option_bits_width< MustVerifyEndOfDataIsValid >
Definition: daw_json_parse_options.h:176
constexpr unsigned policy_bits_start
Definition: daw_json_parse_options.h:229
constexpr auto default_json_option_value< ExcludeSpecialEscapes >
Definition: daw_json_parse_options.h:210
constexpr unsigned json_option_bits_width< AllowEscapedNames >
Definition: daw_json_parse_options.h:115
UseExactMappingsByDefault
Definition: daw_json_parse_options.h:156
constexpr json_details::json_options_t parse_options(Policies... policies)
Definition: daw_json_parse_options.h:314
ForceFullNameCheck
Definition: daw_json_parse_options.h:142
IEEE754Precise
Definition: daw_json_parse_options.h:127
CheckedParseMode
Definition: daw_json_parse_options.h:83
ExecModeTypes
Definition: daw_json_parse_options.h:33
MustVerifyEndOfDataIsValid
Definition: daw_json_parse_options.h:172
PolicyCommentTypes
Definition: daw_json_parse_options.h:70
AllowEscapedNames
Definition: daw_json_parse_options.h:112
MinifiedDocument
Definition: daw_json_parse_options.h:97
ExcludeSpecialEscapes
Definition: daw_json_parse_options.h:203
ZeroTerminatedString
Definition: daw_json_parse_options.h:54
TemporarilyMutateBuffer
Definition: daw_json_parse_options.h:189
Definition: daw_from_json.h:22
Definition: daw_json_parse_options.h:277
Definition: daw_json_option_bits.h:35
Definition: daw_json_option_bits.h:58
#define DAW_JSON_VER
Definition: version.h:11