+ if (usecount == 0)
+ unarch_map = new unarchive_map_t();
+ ++usecount;
+}
+
+synthesize_func unarchive_table_t::find(const std::string& classname) const
+{
+ 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;