+ if (found_index == index) {
+ ret = a.unatomize(i->value);
+ return true;
+ }
+ found_index++;
+ }
+ i++;
+ }
+ return false;
+}
+
+void archive_node::find_ex_by_loc(archive_node_cit loc, ex &ret, lst &sym_lst)
+ const
+{
+ ret = a.get_node(loc->value).unarchive(sym_lst);
+}
+
+bool archive_node::find_ex(const std::string &name, ex &ret, lst &sym_lst, unsigned index) const
+{
+ archive_atom name_atom = a.atomize(name);
+ archive_node_cit i = props.begin(), iend = props.end();
+ unsigned found_index = 0;
+ while (i != iend) {
+ if (i->type == PTYPE_NODE && i->name == name_atom) {
+ if (found_index == index) {
+ ret = a.get_node(i->value).unarchive(sym_lst);
+ return true;
+ }
+ found_index++;