+archive_node::archive_node_cit
+archive_node::find_first(const std::string &name) const
+{
+ archive_atom name_atom = a.atomize(name);
+ for (auto i=props.begin(); i!=props.end(); ++i)
+ if (i->name == name_atom)
+ return i;
+ return props.end();
+}
+
+archive_node::archive_node_cit
+archive_node::find_last(const std::string &name) const
+{
+ archive_atom name_atom = a.atomize(name);
+ for (auto i=props.end(); i!=props.begin();) {
+ --i;
+ if (i->name == name_atom)
+ return i;
+ }
+ return props.end();
+}
+
+archive_node::archive_node_cit_range
+archive_node::find_property_range(const std::string &name1, const std::string &name2) const
+{
+ archive_atom name1_atom = a.atomize(name1),
+ name2_atom = a.atomize(name2);
+ archive_node_cit_range range = {props.end(), props.end()};
+ for (auto i=props.begin(); i!=props.end(); ++i) {
+ if (i->name == name1_atom && range.begin == props.end()) {
+ range.begin = i;
+ }
+ if (i->name == name2_atom && range.begin != props.end()) {
+ range.end = i + 1;
+ }
+ }
+ return range;
+}