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
185 namespace json_details {
200 namespace json_details {
202 inline constexpr unsigned
214 namespace json_details {
226 namespace json_details {
234 template<
typename Policy,
typename Policies>
237 std::make_index_sequence<pack_size_v<Policies>>{ } );
239 template<
typename Policy>
241 basic_policy_bits_start<Policy, policy_list>;
243 template<
typename Policy>
245 static_assert( is_option_flag<Policy>,
246 "Only registered policy types are allowed" );
247 auto new_bits =
static_cast<unsigned>( e );
248 constexpr unsigned mask = (1U << json_option_bits_width<Policy>)-1U;
250 new_bits <<= policy_bits_start<Policy>;
255 template<
typename Policy,
typename... Policies>
258 static_assert( ( is_option_flag<Policies> and ... ),
259 "Only registered policy types are allowed" );
261 auto new_bits =
static_cast<unsigned>( pol );
262 constexpr unsigned mask = ( (1U << json_option_bits_width<Policy>)-1U );
264 new_bits <<= policy_bits_start<Policy>;
265 value &= ~( mask << policy_bits_start<Policy> );
267 if constexpr(
sizeof...( Policies ) > 0 ) {
268 if constexpr(
sizeof...( pols ) > 0 ) {
278 template<
typename Policy>
280 static_assert( is_option_flag<Policy>,
281 "Only registered policy types are allowed" );
283 new_bits <<= policy_bits_start<Policy>;
290 template<
typename... Policies>
293 ( set_bits_for<Policies>( default_json_option_value<Policies> ) |
303 template<
typename Policy,
typename Result = Policy>
305 static_assert( is_option_flag<Policy>,
306 "Only registered policy types are allowed" );
307 constexpr unsigned mask = ( 1U << (policy_bits_start<Policy> +
308 json_option_bits_width<Policy>)) -
311 value >>= policy_bits_start<Policy>;
312 return static_cast<Result
>( Policy{ value } );
323 template<
typename... Policies>
326 static_assert( ( json_details::is_option_flag<Policies> and ... ),
327 "Only registered policy types are allowed" );
329 if constexpr(
sizeof...( Policies ) > 0 ) {
constexpr auto default_json_option_value< PolicyCommentTypes >
Definition: daw_json_parse_options.h:76
constexpr unsigned basic_policy_bits_start
Definition: daw_json_parse_options.h:235
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:216
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
typename option_list_impl< ExecModeTypes, ZeroTerminatedString, PolicyCommentTypes, CheckedParseMode, AllowEscapedNames, IEEE754Precise, ForceFullNameCheck, MinifiedDocument, UseExactMappingsByDefault, TemporarilyMutateBuffer, MustVerifyEndOfDataIsValid, ExcludeSpecialEscapes, ExpectLongStrings >::type policy_list
Definition: daw_json_parse_options.h:232
constexpr auto default_json_option_value< TemporarilyMutateBuffer >
Definition: daw_json_parse_options.h:206
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:300
constexpr auto default_json_option_value< ExpectLongStrings >
Definition: daw_json_parse_options.h:190
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:203
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:240
constexpr auto default_json_option_value< ExcludeSpecialEscapes >
Definition: daw_json_parse_options.h:220
constexpr unsigned json_option_bits_width< ExpectLongStrings >
Definition: daw_json_parse_options.h:187
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:325
ForceFullNameCheck
Definition: daw_json_parse_options.h:142
IEEE754Precise
Definition: daw_json_parse_options.h:127
CheckedParseMode
Definition: daw_json_parse_options.h:83
ExpectLongStrings
Definition: daw_json_parse_options.h:184
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:213
ZeroTerminatedString
Definition: daw_json_parse_options.h:54
TemporarilyMutateBuffer
Definition: daw_json_parse_options.h:199
Definition: daw_from_json.h:22
Definition: daw_json_parse_options.h:288
Definition: daw_json_option_bits.h:35
Definition: daw_json_option_bits.h:58
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16