X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fbase.cpp;h=2b022688df8ebf2960973a4d58add9e43b8eda15;hb=d7ee3683a4d6d76113161be9754c007dee37d288;hp=4d0c170776d9c7b4d1bfe47fd7878c669b71214c;hpb=6d57bbe05c31c79eaad02fe81cfb9c1ed6b79c58;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/base.cpp b/src/base.cpp index 4d0c17077..2b022688d 100644 --- a/src/base.cpp +++ b/src/base.cpp @@ -26,6 +26,14 @@ classbase::classbase() { } +void classbase::cull() +{ +} + +classbase::~classbase() +{ +} + void BoolSet::Set(int number) { this->bits |= bitfields[number]; @@ -122,14 +130,32 @@ bool Extensible::Register(ExtensionItem* item) return Extensible::extension_types.insert(std::make_pair(item->key, item)).second; } -void Extensible::UnRegister(Module* module) +std::vector Extensible::BeginUnregister(Module* module) { + std::vector rv; ExtensibleTypes::iterator i = extension_types.begin(); while (i != extension_types.end()) { ExtensibleTypes::iterator c = i++; if (c->second->owner == module) + { + rv.push_back(c->second); extension_types.erase(c); + } + } + return rv; +} + +void Extensible::doUnhookExtensions(const std::vector& toRemove) +{ + for(std::vector::const_iterator i = toRemove.begin(); i != toRemove.end(); i++) + { + ExtensibleStore::iterator e = extensions.find((**i).key); + if (e != extensions.end()) + { + (**i).free(e->second); + extensions.erase(e); + } } } @@ -137,9 +163,11 @@ Extensible::~Extensible() { for(ExtensibleStore::iterator i = extensions.begin(); i != extensions.end(); ++i) { - ExtensionItem* type = extension_types[i->first]; + ExtensionItem* type = GetItem(i->first); if (type) type->free(i->second); + else if (ServerInstance && ServerInstance->Logs) + ServerInstance->Logs->Log("BASE", ERROR, "Extension type %s is not registered", i->first.c_str()); } } @@ -147,19 +175,36 @@ LocalExtItem::LocalExtItem(const std::string& Key, Module* mod) : ExtensionItem( { } -std::string LocalExtItem::serialize(Module* requestor, const Extensible* container, void* item) +std::string LocalExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) { return ""; } -void LocalExtItem::unserialize(Module* requestor, Extensible* container, const std::string& value) +void LocalExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value) +{ +} + +LocalStringExt::LocalStringExt(const std::string& Key, Module* Owner) + : SimpleExtItem(Key, Owner) { } + +std::string LocalStringExt::serialize(SerializeFormat format, const Extensible* container, void* item) { + if (item && format == FORMAT_USER) + return *static_cast(item); + return ""; } LocalIntExt::LocalIntExt(const std::string& Key, Module* mod) : LocalExtItem(Key, mod) { } +std::string LocalIntExt::serialize(SerializeFormat format, const Extensible* container, void* item) +{ + if (format != FORMAT_USER) + return ""; + return ConvToStr(reinterpret_cast(item)); +} + intptr_t LocalIntExt::get(const Extensible* container) { return reinterpret_cast(get_raw(container)); @@ -186,12 +231,12 @@ std::string* StringExtItem::get(const Extensible* container) return static_cast(get_raw(container)); } -std::string StringExtItem::serialize(Module* requestor, const Extensible* container, void* item) +std::string StringExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) { return item ? *static_cast(item) : ""; } -void StringExtItem::unserialize(Module* requestor, Extensible* container, const std::string& value) +void StringExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value) { if (value.empty()) unset(container);