bool instantiator::is_instantiable(const field_definition& fd) const { return fd.definition_type() == field_definition_types::global_template || fd.definition_type() == field_definition_types::model_template || fd.definition_type() == field_definition_types::facet_template || fd.definition_type() == field_definition_types::formatter_template; }
std::size_t field_definition_hasher::hash(const field_definition& v) { std::size_t seed(0); combine(seed, v.name()); combine(seed, v.value_type()); combine(seed, v.scope()); combine(seed, v.ownership_hierarchy()); combine(seed, hash_boost_shared_ptr_dogen_dynamic_value(v.default_value())); combine(seed, v.definition_type()); return seed; }
std::list<field_definition> instantiator::instantiate(const field_definition& fd) const { validate(fd); BOOST_LOG_SEV(lg, debug) << "Instantiating template: " << fd; std::list<field_definition> r; const auto dt(fd.definition_type()); if (dt == field_definition_types::global_template) r = instantiate_global_template(fd); else if (dt == field_definition_types::facet_template) r = instantiate_facet_template(fd); else if (dt == field_definition_types::formatter_template) r = instantiate_formatter_template(fd); else { BOOST_LOG_SEV(lg, error) << unsupported_definition_type << dt; BOOST_THROW_EXCEPTION(instantiation_error(unsupported_definition_type + boost::lexical_cast<std::string>(dt))); } BOOST_LOG_SEV(lg, debug) << "Instantiation result: " << r; return r; }
void instantiator::validate(const field_definition& fd) const { const auto sn(fd.name().simple()); if (fd.name().simple().empty()) { BOOST_LOG_SEV(lg, error) << empty_simple_name; BOOST_THROW_EXCEPTION(instantiation_error(empty_simple_name)); } if (!is_instantiable(fd)) { BOOST_LOG_SEV(lg, error) << field_not_instantiable << sn; BOOST_THROW_EXCEPTION(instantiation_error(field_not_instantiable + sn)); } if (!fd.name().qualified().empty()) { BOOST_LOG_SEV(lg, error) << qualified_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(qualified_name_not_empty + sn)); } if (fd.definition_type() == field_definition_types::global_template) { if (!fd.ownership_hierarchy().facet_name().empty()) { BOOST_LOG_SEV(lg, error) << facet_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(facet_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_group_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_group_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_group_not_empty + sn)); } } if (fd.definition_type() == field_definition_types::facet_template) { if (!fd.ownership_hierarchy().facet_name().empty()) { BOOST_LOG_SEV(lg, error) << facet_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(facet_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_group_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_group_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_group_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } } if (fd.definition_type() == field_definition_types::formatter_template) { if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } } }