21 namespace json_details {
22 template<
typename OutputIterator>
24 inline constexpr OutputIterator
get( )
const {
30 inline constexpr void set( OutputIterator
it ) {
31 *
static_cast<OutputIterator *
>( this ) =
it;
35 inline constexpr OutputIterator &
raw_it( ) {
40 template<
typename CharT>
51 static constexpr bool is_pointer =
true;
59 inline constexpr CharT *
get( )
const {
63 inline constexpr void set( CharT *p ) {
125 explicit inline constexpr operator bool( )
const {
126 return static_cast<bool>( ptr );
131 return lhs.ptr == rhs.ptr;
136 return lhs.ptr != rhs.ptr;
141 return lhs.ptr < rhs.ptr;
146 return lhs.ptr <= rhs.ptr;
151 return lhs.ptr > rhs.ptr;
156 return lhs.ptr >= rhs.ptr;
162 namespace json_details::serialization {
168 template<
typename Policy,
typename Policies>
171 std::make_index_sequence<pack_size_v<Policies>>{ } );
173 template<
typename Policy>
175 basic_policy_bits_start<Policy, policy_list>;
177 template<
typename Policy>
179 static_assert( is_option_flag<Policy>,
180 "Only registered policy types are allowed" );
181 auto new_bits =
static_cast<unsigned>( e );
182 constexpr unsigned mask = (1U << json_option_bits_width<Policy>)-1U;
184 new_bits <<= policy_bits_start<Policy>;
189 template<
typename Policy,
typename... Policies>
192 static_assert( ( is_option_flag<Policies> and ... ),
193 "Only registered policy types are allowed" );
195 auto new_bits =
static_cast<unsigned>( pol );
196 constexpr unsigned mask = ( (1U << json_option_bits_width<Policy>)-1U );
198 new_bits <<= policy_bits_start<Policy>;
199 value &= ~( mask << policy_bits_start<Policy> );
201 if constexpr(
sizeof...( Policies ) > 0 ) {
202 if constexpr(
sizeof...( pols ) > 0 ) {
212 template<
typename Policy>
214 static_assert( is_option_flag<Policy>,
215 "Only registered policy types are allowed" );
217 new_bits <<= policy_bits_start<Policy>;
224 template<
typename... Policies>
227 ( set_bits_for<Policies>( default_json_option_value<Policies> ) |
237 template<
typename Policy,
typename Result = Policy>
239 static_assert( is_option_flag<Policy>,
240 "Only registered policy types are allowed" );
241 constexpr unsigned mask = ( 1U << (policy_bits_start<Policy> +
242 json_option_bits_width<Policy>)) -
245 value >>= policy_bits_start<Policy>;
246 return static_cast<Result
>( Policy{ value } );
249 template<SerializationFormat, IndentationType>
253 inline constexpr std::string_view
254 generate_indent<SerializationFormat::Pretty, IndentationType::Tab> =
258 inline constexpr std::string_view
259 generate_indent<SerializationFormat::Pretty, IndentationType::Space1> =
263 inline constexpr std::string_view
264 generate_indent<SerializationFormat::Pretty, IndentationType::Space2> =
268 inline constexpr std::string_view
269 generate_indent<SerializationFormat::Pretty, IndentationType::Space3> =
273 inline constexpr std::string_view
274 generate_indent<SerializationFormat::Pretty, IndentationType::Space4> =
278 inline constexpr std::string_view
279 generate_indent<SerializationFormat::Pretty, IndentationType::Space5> =
283 inline constexpr std::string_view
284 generate_indent<SerializationFormat::Pretty, IndentationType::Space8> =
Iterator & it
Definition: daw_json_traits.h:251
static constexpr json_options_t default_policy_flag
Definition: daw_json_serialize_policy_details.h:234
constexpr json_options_t set_bits_for(Policy e)
Definition: daw_json_serialize_policy_details.h:213
constexpr unsigned policy_bits_start
Definition: daw_json_serialize_policy_details.h:174
constexpr Result get_bits_for(json_options_t value)
Definition: daw_json_serialize_policy_details.h:238
constexpr unsigned basic_policy_bits_start
Definition: daw_json_serialize_policy_details.h:169
constexpr std::string_view generate_indent
Definition: daw_json_serialize_policy_details.h:250
constexpr json_options_t set_bits(json_options_t value, Policy pol, Policies... pols)
Definition: daw_json_serialize_policy_details.h:190
constexpr void set_bits_in(json_options_t &value, Policy e)
Definition: daw_json_serialize_policy_details.h:178
typename option_list_impl< SerializationFormat, IndentationType, RestrictedStringOutput, NewLineDelimiter, OutputTrailingComma >::type policy_list
Definition: daw_json_serialize_policy_details.h:166
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
SerializationFormat
Definition: daw_json_serialize_policy_options.h:19
NewLineDelimiter
Definition: daw_json_serialize_policy_options.h:90
OutputTrailingComma
Definition: daw_json_serialize_policy_options.h:101
IndentationType
Definition: daw_json_serialize_policy_options.h:39
RestrictedStringOutput
Definition: daw_json_serialize_policy_options.h:70
Definition: daw_from_json.h:22
std::size_t size_type
Definition: daw_json_serialize_policy_details.h:43
constexpr iterator_wrapper & operator-=(difference_type n)
Definition: daw_json_serialize_policy_details.h:102
constexpr pointer operator->()
Definition: daw_json_serialize_policy_details.h:71
constexpr CharT * raw_it()
Definition: daw_json_serialize_policy_details.h:54
std::ptrdiff_t difference_type
Definition: daw_json_serialize_policy_details.h:42
CharT * pointer
Definition: daw_json_serialize_policy_details.h:45
constexpr friend bool operator>=(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:154
constexpr friend bool operator!=(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:134
constexpr reference operator*()
Definition: daw_json_serialize_policy_details.h:67
CharT value_type
Definition: daw_json_serialize_policy_details.h:44
constexpr void set(CharT *p)
Definition: daw_json_serialize_policy_details.h:63
constexpr reference operator[](size_type n) noexcept
Definition: daw_json_serialize_policy_details.h:121
constexpr friend bool operator<=(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:144
constexpr friend bool operator==(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:129
constexpr iterator_wrapper operator++(int)
Definition: daw_json_serialize_policy_details.h:80
std::random_access_iterator_tag iterator_category
Definition: daw_json_serialize_policy_details.h:47
constexpr friend bool operator>(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:149
constexpr friend bool operator<(iterator_wrapper const &lhs, iterator_wrapper const &rhs)
Definition: daw_json_serialize_policy_details.h:139
constexpr iterator_wrapper operator--(int)
Definition: daw_json_serialize_policy_details.h:91
CharT * ptr
Definition: daw_json_serialize_policy_details.h:49
constexpr iterator_wrapper & operator+=(difference_type n)
Definition: daw_json_serialize_policy_details.h:97
constexpr iterator_wrapper operator-(difference_type n) const noexcept
Definition: daw_json_serialize_policy_details.h:115
constexpr iterator_wrapper & operator--()
Definition: daw_json_serialize_policy_details.h:86
CharT & reference
Definition: daw_json_serialize_policy_details.h:46
constexpr iterator_wrapper & operator++()
Definition: daw_json_serialize_policy_details.h:75
constexpr CharT * get() const
Definition: daw_json_serialize_policy_details.h:59
constexpr iterator_wrapper operator+(difference_type n) const noexcept
Definition: daw_json_serialize_policy_details.h:108
Definition: daw_json_serialize_policy_details.h:23
static constexpr bool is_pointer
Definition: daw_json_serialize_policy_details.h:28
constexpr void set(OutputIterator it)
Definition: daw_json_serialize_policy_details.h:30
constexpr OutputIterator & raw_it()
Definition: daw_json_serialize_policy_details.h:35
constexpr OutputIterator get() const
Definition: daw_json_serialize_policy_details.h:24
Definition: daw_json_option_bits.h:35
Definition: daw_json_option_bits.h:58
Definition: daw_json_serialize_policy_details.h:222
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16