18 #ifndef ACCESSORS_IMPL_HH_
19 #define ACCESSORS_IMPL_HH_
35 ASSERT(key_it->default_.is_obligatory() || key_it->default_.has_value_at_declaration())(key)
36 .error(
"You have to use Record::find instead.");
42 catch (Type::Record::ExcRecordKeyNotFound & e) {
45 catch (ExcTypeMismatch & e) {
46 e << EI_CPPRequiredType(
typeid(Ret).name()) << EI_KeyName(key);
49 catch (ExcStorageTypeMismatch &e) {
52 catch (ExcAccessorForNullStorage &e) {
60 inline const Ret
Record::val(
const string &key,
const Ret default_val )
const {
64 ASSERT(key_it->default_.has_value_at_read_time())(key).error(
"You have to use Record::val or Record::find instead.");
73 catch (Type::Record::ExcRecordKeyNotFound & e) {
76 catch (ExcTypeMismatch & e) {
77 e << EI_CPPRequiredType(
typeid(Ret).name()) << EI_KeyName(key);
80 catch (ExcStorageTypeMismatch &e) {
83 catch (ExcAccessorForNullStorage &e) {
97 catch (Type::Record::ExcRecordKeyNotFound & e) {
100 catch (ExcTypeMismatch & e) {
101 e << EI_CPPRequiredType(
typeid(Ret).name()) << EI_KeyName(key);
118 catch (Type::Record::ExcRecordKeyNotFound & e) {
121 catch (ExcTypeMismatch & e) {
122 e << EI_CPPRequiredType(
typeid(Ret).name()) << EI_KeyName(key);
134 template<
class Type,
class... Arguments>
144 template <
class ValueType>
149 catch (ExcTypeMismatch & e) {
150 e << EI_CPPRequiredType(
typeid(ValueType).name()) << EI_KeyName(
"begin()");
169 template <
class Container>
190 {
return ! ( *
this == that ); }
194 inline IteratorBase::operator bool()
const {
196 return ( s && ! s->
is_null() );
230 auto new_address =address_.down(index_);
232 ASSERT_PTR(new_address->storage_head()).error();
246 return &(temporary_value_);
254 return static_cast<const InputType &
>(type);
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR) only for debug mode.
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
static constexpr bool value
UnitSI operator*(const UnitSI &a, const UnitSI &b)
Product of two units.