+ unarchive_map_t::const_iterator i = unarch_map->find(classname);
+ if (i != unarch_map->end())
+ return i->second;
+ throw std::runtime_error(std::string("no unarchiving function for \"")
+ + classname + "\" class");
+}
+
+void unarchive_table_t::insert(const std::string& classname, synthesize_func f)
+{
+ if (unarch_map->find(classname) != unarch_map->end())
+ throw std::runtime_error(std::string("Class \"" + classname
+ + "\" is already registered"));
+ unarch_map->operator[](classname) = f;
+}
+
+unarchive_table_t::~unarchive_table_t()
+{
+ if (--usecount == 0)
+ delete unarch_map;