X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fextensible.h;h=2e7b83a28b3d90324577b68b151e0db75add6016;hb=a30a0074edac353cb60e134b43fa8ff0ffb67f8b;hp=0efb1db5f133ab7fe782db983da7f4a74c2cd396;hpb=703ba72071b970caaa7554b1e58a13def57694dc;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/extensible.h b/include/extensible.h index 0efb1db5f..2e7b83a28 100644 --- a/include/extensible.h +++ b/include/extensible.h @@ -1,6 +1,9 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2013, 2017-2020 Sadie Powell + * Copyright (C) 2012, 2014-2015 Attila Molnar + * Copyright (C) 2012 Robby * Copyright (C) 2009 Daniel De Graaf * * This file is part of InspIRCd. InspIRCd is free software: you can @@ -51,7 +54,7 @@ class CoreExport ExtensionItem : public ServiceProvider, public usecountbase /** Initializes an instance of the ExtensionItem class. * @param key The name of the extension item (e.g. ssl_cert). * @param exttype The type of Extensible that this ExtensionItem applies to. - * @param owner The module which created this ExtensionItem + * @param owner The module which created this ExtensionItem. */ ExtensionItem(const std::string& key, ExtensibleType exttype, Module* owner); @@ -131,9 +134,11 @@ class CoreExport ExtensionItem : public ServiceProvider, public usecountbase * a map associated with the object. In this way modules can store their own custom information within user * objects, channel objects and server objects, without breaking other modules (this is more sensible than using * a flags variable, and each module defining bits within the flag as 'theirs' as it is less prone to conflict and - * supports arbitary data storage). + * supports arbitrary data storage). */ -class CoreExport Extensible : public classbase +class CoreExport Extensible + : public classbase + , public Serializable { public: typedef insp::flat_map, void*> ExtensibleStore; @@ -165,6 +170,12 @@ class CoreExport Extensible : public classbase * Free all extension items attached to this Extensible */ void FreeAllExtItems(); + + /** @copydoc Serializable::Deserialize */ + bool Deserialize(Data& data) CXX11_OVERRIDE; + + /** @copydoc Serializable::Deserialize */ + bool Serialize(Serializable::Data& data) CXX11_OVERRIDE; }; class CoreExport ExtensionManager @@ -210,22 +221,19 @@ class SimpleExtItem : public ExtensionItem { T* ptr = new T(value); T* old = static_cast(set_raw(container, ptr)); - Del del; - del(old); + free(container, old); } inline void set(Extensible* container, T* value) { T* old = static_cast(set_raw(container, value)); - Del del; - del(old); + free(container, old); } inline void unset(Extensible* container) { T* old = static_cast(unset_raw(container)); - Del del; - del(old); + free(container, old); } void free(Extensible* container, void* item) CXX11_OVERRIDE