15 template <
template <
class>
class t_Pointer,
class t_Base,
class t_Instantiator>
18 #define ARILES2_ENTRIES(v) \
19 ARILES2_TYPED_ENTRY_(v, id, std::string) \
20 ARILES2_TYPED_ENTRY_(v, value, t_Pointer<t_Base>)
21 #include ARILES2_INITIALIZE
26 if ((
"" != id_) && (
nullptr != value_.get()))
31 if ((
"" == id_) && (
nullptr == value_.get()))
43 ariles2::apply<ariles2::Defaults>(*
this);
47 explicit Any(
const std::string &
id)
53 void build(
const std::string &
id)
56 value_ = t_Instantiator::instantiate(id_);
57 CPPUT_ASSERT(
nullptr != value_.get(),
"Could not instantiate class.");
63 return (
"" != id_ &&
nullptr != value_.get());
73 template <
class t_Derived>
76 return (
dynamic_cast<t_Derived *
>(value_.get()));
80 template <
class t_Derived>
81 const t_Derived *
cast()
const
83 return (
dynamic_cast<const t_Derived *
>(value_.get()));
93 template <
class t_Derived>
94 t_Derived *
cast(
const std::string &config_section_id)
98 if (config_section_id == value_->arilesDefaultID())
100 return (
dynamic_cast<t_Derived *
>(value_.get()));
107 template <
class t_Derived>
108 const t_Derived *
cast(
const std::string &config_section_id)
const
112 if (config_section_id == value_->arilesDefaultID())
114 return (
dynamic_cast<t_Derived *
>(value_.get()));
125 return (value_.get());
132 return (value_.get());
157 "Could not write config: entry is in an inconsistent (partially initialized) state.");
175 CPPUT_ASSERT(parameters.allow_missing_entries_,
"Id is empty, value cannot be read.");
191 value_->arilesVirtualVisit(visitor, param);
201 value_->arilesVirtualVisit(visitor, param);
211 value_->arilesVirtualVisit(visitor, param);
220 template <
template <
class>
class t_Pointer,
class t_Base,
class t_Instantiator>
223 #define ARILES2_ENTRIES(v) \
224 ARILES2_TYPED_ENTRY_(v, id, std::string) \
225 ARILES2_TYPED_ENTRY_(v, value, t_Pointer<t_Base>)
226 #include ARILES2_INITIALIZE
231 if ((
"" != id_) && (
nullptr != value_.get()))
236 if ((
"" == id_) && (
nullptr == value_.get()))
248 ariles2::apply<ariles2::Defaults>(*
this);
252 explicit Any2(
const std::string &
id)
261 value_ = t_Instantiator::instantiate(id_);
262 CPPUT_ASSERT(
nullptr != value_.get(),
"Could not instantiate class.");
268 return (
"" != id_ &&
nullptr != value_.get());
278 template <
class t_Derived>
281 return (
dynamic_cast<t_Derived *
>(value_.get()));
285 template <
class t_Derived>
288 return (
dynamic_cast<const t_Derived *
>(value_.get()));
298 template <
class t_Derived>
299 t_Derived *
cast(
const std::string &config_section_id)
303 if (config_section_id == value_->arilesDefaultID())
305 return (
dynamic_cast<t_Derived *
>(value_.get()));
312 template <
class t_Derived>
313 const t_Derived *
cast(
const std::string &config_section_id)
const
317 if (config_section_id == value_->arilesDefaultID())
319 return (
dynamic_cast<t_Derived *
>(value_.get()));
330 return (value_.get());
337 return (value_.get());
362 "Could not write config: entry is in an inconsistent (partially initialized) state.");
367 value_->arilesVirtualVisit(visitor, param);
380 CPPUT_ASSERT(param.allow_missing_entries_,
"Id is empty, value cannot be read.");
388 value_->arilesVirtualVisit(visitor, param);
390 catch (
const std::exception &e)
392 CPPUT_THROW(
"Failed to parse entry <", id_,
"> || ", e.what());
404 value_->arilesVirtualVisit(visitor, param);
414 value_->arilesVirtualVisit(visitor, param);
424 value_->arilesVirtualVisit(visitor, param);
433 return (this->value_->arilesVirtualVisit(visitor, param) + 1);
444 return (this->value_->arilesVirtualVisit(visitor, param));
452 template <
class t_Po
inter>
476 Handler::allocate(
value_);
517 const typename Handler::Value *
get()
const
522 typename Handler::Value *
get()
533 value_->arilesVirtualVisit(visitor, param);
540 return (Handler::isNull(
value_));
544 #ifdef ARILES2_METHODS_compare
545 template <
class t_Other>
550 if (
value_.get() != other.value_.get())
552 if (
nullptr !=
value_ and
nullptr != other.value_)
554 value_->arilesVisit(visitor, *other.value_, param);
564 #ifdef ARILES2_METHODS_copyto
565 template <
class t_Other>
573 #ifdef ARILES2_METHODS_copyfrom
574 template <
class t_Other>
585 template <
class t_Po
inter>
588 #include ARILES2_INITIALIZE
594 ariles2::apply<ariles2::Defaults>(*
this);
606 this->value_->arilesVirtualVisit(writer, parameters);
614 this->value_->arilesVirtualVisit(reader, parameters);
622 this->value_->arilesVirtualVisit(visitor, param);
630 return (this->value_->arilesVirtualVisit(visitor, param));
639 return (this->value_->arilesVirtualVisit(visitor, param));
647 this->value_->arilesVirtualVisit(visitor, param);
652 #ifdef ARILES2_METHODS_graphviz
657 this->value_->arilesVirtualVisit(writer, parameters);
664 template <
class t_Po
inter>
667 #include ARILES2_INITIALIZE
673 ariles2::apply<ariles2::Defaults>(*
this);
685 parameters.allow_missing_entries_,
"Missing entries must be allowed when using OptionalPointer");
688 this->value_->arilesVirtualVisit(writer, parameters);
698 ariles2::apply<ariles2::Defaults>(*this->value_);
700 this->value_->arilesVirtualVisit(reader, parameters);
709 this->value_->arilesVirtualVisit(visitor, param);
719 return (this->value_->arilesVirtualVisit(visitor, param));
731 return (this->value_->arilesVirtualVisit(visitor, param));
742 this->value_->arilesVirtualVisit(visitor, param);
748 #ifdef ARILES2_METHODS_graphviz
754 this->value_->arilesVirtualVisit(writer, parameters);
761 template <
class t_Entry>
const t_Derived * cast() const
t_Derived * cast(const std::string &config_section_id)
These casts succeed if the Ariles config section id matches the given string.
const t_Base * operator->() const
std::size_t arilesVisit(const ariles2::Count &visitor, const ariles2::Count::Parameters ¶m) const
void arilesVisit(const ariles2::PreWrite &visitor, const ariles2::PreWrite::Parameters ¶m)
t_Derived * cast()
Cast methods are potentially dangerous, no id checks are performed. If value is not initialized the r...
std::size_t arilesVisit(const ariles2::CountMissing &visitor, const ariles2::CountMissing::Parameters ¶m) const
void arilesVisit(const ariles2::Finalize &visitor, const ariles2::Finalize::Parameters ¶m)
void arilesVisit(ariles2::Read &visitor, const ariles2::Read::Parameters ¶m)
void arilesVisit(ariles2::Write &visitor, const ariles2::Write::Parameters ¶m) const
const t_Derived * cast(const std::string &config_section_id) const
void build(const std::string &id)
Any2(const std::string &id)
const t_Base & operator*() const
void arilesVisit(const ariles2::Defaults &visitor, const ariles2::Defaults::Parameters ¶m)
bool isConsistent() const
bool isInitialized() const
const t_Derived * cast() const
void arilesVisit(ariles2::Write &visitor, const ariles2::Write::Parameters ¶m) const
t_Derived * cast()
Cast methods are potentially dangerous, no id checks are performed. If value is not initialized the r...
void arilesVisit(const ariles2::Defaults &visitor, const ariles2::Defaults::Parameters ¶m)
bool isConsistent() const
const t_Derived * cast(const std::string &config_section_id) const
t_Derived * cast(const std::string &config_section_id)
These casts succeed if the Ariles config section id matches the given string.
void arilesVisit(const ariles2::PreWrite &visitor, const ariles2::PreWrite::Parameters ¶m)
bool isInitialized() const
const t_Base * operator->() const
const t_Base & operator*() const
void arilesVisit(const ariles2::Finalize &visitor, const ariles2::Finalize::Parameters ¶m)
void arilesVisit(ariles2::Read &visitor, const ariles2::Read::Parameters ¶meters)
Any(const std::string &id)
void build(const std::string &id)
Handler::Value * operator->() const
CustomPointerBase & operator=(const t_Pointer &value)
CustomPointerBase(const t_Pointer &value)
CustomPointerBase(const typename Handler::Value &value)
const Handler::Value * get() const
void arilesVisit(const ariles2::PreWrite &visitor, const ariles2::PreWrite::Parameters ¶m)
virtual ~CustomPointerBase()
Handler::Value & operator*() const
void arilesVisit(ariles2::Read &reader, const ariles2::Read::Parameters ¶meters)
std::size_t arilesVisit(const ariles2::Count &visitor, const ariles2::Count::Parameters ¶m) const
void arilesVisit(const ariles2::Finalize &visitor, const ariles2::Finalize::Parameters ¶m)
std::size_t arilesVisit(const ariles2::CountMissing &visitor, const ariles2::CountMissing::Parameters ¶m) const
void arilesVisit(ariles2::Write &writer, const ariles2::Write::Parameters ¶meters) const
void arilesVisit(const ariles2::Defaults &visitor, const ariles2::Defaults::Parameters ¶m)
std::size_t arilesVisit(const ariles2::Count &visitor, const ariles2::Count::Parameters ¶m) const
void arilesVisit(ariles2::Read &reader, const ariles2::Read::Parameters ¶meters)
void arilesVisit(const ariles2::Finalize &visitor, const ariles2::Finalize::Parameters ¶m)
void arilesVisit(ariles2::Write &writer, const ariles2::Write::Parameters ¶meters) const
std::size_t arilesVisit(const ariles2::CountMissing &visitor, const ariles2::CountMissing::Parameters ¶m) const
void arilesVisit(const ariles2::Defaults &visitor, const ariles2::Defaults::Parameters ¶m)
bool visitMapEntry(t_Entry &entry, const std::string &name, const Parameters ¶m, const bool override_missing_entries_locally=false)
void visitMapEntry(const t_Entry &entry, const std::string &entry_name, const t_Parameters ¶m)
#define CPPUT_ASSERT(condition,...)
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters ¶m)
bool isMissing(const ARILES2_POINTER_TYPE< t_Entry > &entry)
#define CPPUT_TRACE_FUNCTION