void demoMyEnumOk(const Configurator& configurator) { MyEnum value = MyEnum::value1; // // Enum coniguration is only possible thruogh free functions and specializations so far. // This example uses free functions which is preffered way. // Free functions can be of three types. Each dype differs from others by first argument. // It could be any of: string, IConfiguratorPtr, IConfigurationRepositoryPtr // Type of argument (and obviously function prototype) can be set as second template parameter. // If parameter is not set, configurator uses following prototype by default: // void configure(const string&, MyEnum& obj) // configurator.configure("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnum, string>("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnum, IConfigurator>("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnum, IConfigurationRepository>("object.fake", value).required(); cout << value << endl; }
void PatternLoggingLayout::configure(Configurator& conf) { if (conf.getMode() == Configurator::FROM_CONF) { std::string sPattern; conf.configure("pattern", sPattern, ""); if (!sPattern.empty()) { setPattern(sPattern); } } }
void FieldDefinition::configure(Configurator& conf) { if (conf.getMode() == Configurator::TO_CONF) { Configurator ftRootConf; for (TypeVector::iterator it = m_types.begin(); it != m_types.end(); ++it) { Configurator ftConf; (*it)->configure(ftConf); ftRootConf.configure(_T("field_type"), ftConf.getMap()); } conf.configure(_T("type_define"), ftRootConf.getMap()); } else { Configurator::Iterator it = conf.findConf(_T("type_define")); if (it.hasNext()) { Configurator::ConfMap rootConfMap = AnyCast<Configurator::ConfMap>(it.next().second); Configurator rootConf(rootConfMap); Configurator::Iterator it2 = rootConf.iterator(); while (it2.hasNext()) { Configurator::KeyValuePair kv = it2.next(); if (kv.first == _T("field_type")) { FieldType* pType = new FieldType; Configurator::ConfMap ftMap = AnyCast<Configurator::ConfMap>( kv.second); Configurator ftConf(ftMap); pType->configure(ftConf); addFieldType(*pType); } } } } }
void demoMyType1(const Configurator& configurator) { MyType1 value; // // Configuration of struct/class types is possible with both free and member functions. // Member functions are preffered. // Following mechanism will be used: // If no argument type is specified, either of defined member functions will be selected in following order // 1. void configure(const IConfiguratorPtr&) // 2. void configure(const IConfigurationRepositoryPtr&) // 3. void configure(const string&) // // If there is no member functions that match, configurator will select following prototype of free function by default: // void configure(const IConfiguratorPtr&, MyType1& obj) // configurator.configure("object.MyType1", value).required(); cout << value << endl; }
void demoMyEnumClass(const Configurator& configurator) { MyEnumClass value = MyEnumClass::value4; // // Uses specializations for configuration // configurator.configure("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnumClass, string>("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnumClass, IConfigurator>("object.fake", value).required(); cout << value << endl; configurator.configure<MyEnumClass, IConfigurationRepository>("object.fake", value).required(); cout << value << endl; }
void DocumentTemplate::Meta::configure(Configurator& conf) { conf.configure("name", m_sMetaName, ""); conf.configure("field_name", m_sFieldName, ""); }
void DocumentTemplate::Tag::configure(Configurator& conf) { conf.configure("name", m_sTagName, ""); conf.configure("field_name", m_sFieldName, ""); conf.configure("alias", m_sAlias, ""); }
void DocumentTemplate::configure(Configurator& conf) { if (conf.getMode() == Configurator::TO_CONF) { Configurator rootConf; rootConf.configure("doc_tag", m_sDocTag, ""); rootConf.configure("embedded_field", m_sEmbeddedField, ""); Configurator metadataConf; for (Metadata::iterator it = m_metadata.begin(); it != m_metadata.end(); ++it) { Configurator tagConf; (*it).configure(tagConf); metadataConf.configure("meta", tagConf.getMap()); } rootConf.configure("metadata", metadataConf.getMap()); Configurator tagsConf; for (TagVector::iterator it = m_tags.begin(); it != m_tags.end(); ++it) { Configurator tagConf; (*it).configure(tagConf); tagsConf.configure("tag", tagConf.getMap()); } rootConf.configure("tags", tagsConf.getMap()); conf.configure("template", rootConf.getMap()); } else { m_sDocTag.clear(); m_tags.clear(); Configurator::Iterator it = conf.findConf("template"); if (it.hasNext()) { Configurator rootConf(AnyCast<Configurator::ConfMap>(it.next().second)); rootConf.configure("doc_tag", m_sDocTag, ""); rootConf.configure("embedded_field", m_sEmbeddedField, ""); Configurator::Iterator it1 = rootConf.findConf("metadata"); if (it1.hasNext()) { Configurator metadataConf(AnyCast<Configurator::ConfMap>(it1.next().second)); Configurator::Iterator it3 = metadataConf.iterator(); while (it3.hasNext()) { Configurator::KeyValuePair kv = it3.next(); if (kv.first == "meta") { Configurator tagConf(AnyCast<Configurator::ConfMap>(kv.second)); DocumentTemplate::Meta meta; meta.configure(tagConf); m_metadata.push_back(meta); } } } Configurator::Iterator it2 = rootConf.findConf("tags"); if (it2.hasNext()) { Configurator tagsConf(AnyCast<Configurator::ConfMap>(it2.next().second)); Configurator::Iterator it3 = tagsConf.iterator(); while (it3.hasNext()) { Configurator::KeyValuePair kv = it3.next(); if (kv.first == "tag") { Configurator tagConf(AnyCast<Configurator::ConfMap>(kv.second)); DocumentTemplate::Tag tag; tag.configure(tagConf); m_tags.push_back(tag); } } } } } }