/** * Returns a child of *this whose key is @a key. * If no such child exists, returns an unconstructed vconfig (use null() to test * for this). */ vconfig vconfig::child(const std::string& key) const { if (const config &natural = cfg_->child(key)) { return vconfig(natural, cache_); } BOOST_FOREACH(const config &ins, cfg_->child_range("insert_tag")) { vconfig insert_cfg(ins); if(insert_cfg["name"] == key) { variable_info vinfo(insert_cfg["variable"], false, variable_info::TYPE_CONTAINER); if(!vinfo.is_valid) { return empty_vconfig(); } return vconfig(vinfo.as_container(), true); } } return unconstructed_vconfig(); }
/** * Returns a child of *this whose key is @a key. * If no such child exists, returns an unconstructed vconfig (use null() to test * for this). */ vconfig vconfig::child(const std::string& key) const { if (const config &natural = cfg_->child(key)) { return vconfig(natural, cache_); } for (const config &ins : cfg_->child_range("insert_tag")) { vconfig insert_cfg(ins); if(insert_cfg["name"] == key) { try { config::const_child_itors range = as_nonempty_range(insert_cfg["variable"]); return vconfig(*range.first, true); } catch(const invalid_variablename_exception&) { return empty_vconfig(); } } } return unconstructed_vconfig(); }