#include "atheme.h" #include #include #include #include #include #include /******************* * M E T A D A T A * *******************/ has_metadata::callbacks has_metadata::callback; metadata * has_metadata::add_metadata (char *name, char const * const value) { bool is_private = false; metadata_map::iterator it = mdmap.find (name); callback.metadata_change (*this, name, value); if (it != mdmap.end ()) { metadata *md = it->second; free (md->key); free (md->value); md->key = sstrdup (name); md->value = sstrdup (value); return mdmap[name]; } if (!strncmp ("private:", name, 8)) is_private = true; return mdmap[sstrdup (name)] = new metadata (name, value, is_private); } bool has_metadata::del_metadata (char *name) { metadata_map::iterator it = mdmap.find (name); callback.metadata_change (*this, name, NULL); if (it != mdmap.end ()) { mdmap.erase (it); delete it->second; free (it->first); return true; } return false; } metadata * has_metadata::find_metadata (char *name) { metadata_map::iterator it = mdmap.find (name); if (it != mdmap.end ()) return it->second; return NULL; } void has_metadata::clear_metadata (void) { metadata_map::iterator it, it_end = mdmap.end (); for (it = mdmap.begin (); it != it_end; ++it) { callback.metadata_change (*this, it->second->key, NULL); delete it->second; } mdmap.clear (); }