replicate code changes into re2c file
This commit is contained in:
parent
e1645a09e9
commit
4d079d135e
1 changed files with 59 additions and 0 deletions
|
@ -2416,6 +2416,19 @@ class basic_json
|
||||||
return is_number_float() ? &m_value.number_float : nullptr;
|
return is_number_float() ? &m_value.number_float : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// helper function to implement get_ref without code duplication
|
||||||
|
/// for const and non-const overloads
|
||||||
|
/// ThisType will be deduced as 'basic_jason' or 'const basic_json'
|
||||||
|
template<typename ReferenceType, typename ThisType>
|
||||||
|
static ReferenceType get_ref_impl(ThisType& obj)
|
||||||
|
{
|
||||||
|
using PointerType = std::add_pointer<ReferenceType>::type;
|
||||||
|
// delegate the call to get_ptr<>()
|
||||||
|
auto ptr = obj.get_ptr<PointerType>();
|
||||||
|
if (ptr) return *ptr;
|
||||||
|
throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + obj.type_name());
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// @name value access
|
/// @name value access
|
||||||
|
@ -2563,6 +2576,52 @@ class basic_json
|
||||||
return get_impl_ptr(static_cast<const PointerType>(nullptr));
|
return get_impl_ptr(static_cast<const PointerType>(nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief get a reference value (implicit)
|
||||||
|
|
||||||
|
Implict reference access to the internally stored JSON value. No copies are
|
||||||
|
made.
|
||||||
|
|
||||||
|
@warning Writing data to the referee of the result yields an undefined
|
||||||
|
state.
|
||||||
|
|
||||||
|
@tparam ReferenceType reference type; must be a reference to @ref array_t, @ref
|
||||||
|
object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or @ref
|
||||||
|
number_float_t.
|
||||||
|
|
||||||
|
@return reference to the internally stored JSON value if the requested reference
|
||||||
|
type @a ReferenceType fits to the JSON value; throws std::domain_error otherwise
|
||||||
|
|
||||||
|
@throw std::domain_error in case passed type @a ReferenceType is incompatible
|
||||||
|
with the stored JSON value
|
||||||
|
|
||||||
|
@complexity Constant.
|
||||||
|
*/
|
||||||
|
template<typename ReferenceType, typename
|
||||||
|
std::enable_if<
|
||||||
|
std::is_reference<ReferenceType>::value
|
||||||
|
, int>::type = 0>
|
||||||
|
ReferenceType get_ref()
|
||||||
|
{
|
||||||
|
// delegate call to get_ref_impl
|
||||||
|
return get_ref_impl<ReferenceType>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief get a reference value (implicit)
|
||||||
|
@copydoc get_ref()
|
||||||
|
*/
|
||||||
|
template<typename ReferenceType, typename
|
||||||
|
std::enable_if<
|
||||||
|
std::is_reference<ReferenceType>::value
|
||||||
|
and std::is_const< typename std::remove_reference<ReferenceType>::type >::value
|
||||||
|
, int>::type = 0>
|
||||||
|
ReferenceType get_ref() const
|
||||||
|
{
|
||||||
|
// delegate call to get_ref_impl
|
||||||
|
return get_ref_impl<ReferenceType>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@brief get a value (implicit)
|
@brief get a value (implicit)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue