X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fextensible.h;h=2e7b83a28b3d90324577b68b151e0db75add6016;hb=635cb9d65f6d7f6758ae8ed874da00c8d94b6e39;hp=9df6d3e187c9a38ea5f4f91d3ca5a0c1ae5c72c3;hpb=714284aa306f2912eaca0c28d779d227db62a96b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/extensible.h b/include/extensible.h index 9df6d3e18..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 @@ -185,21 +196,15 @@ class CoreExport ExtensionManager ExtMap types; }; -/** Base class for items that are NOT synchronized between servers */ -class CoreExport LocalExtItem : public ExtensionItem -{ - public: - LocalExtItem(const std::string& key, ExtensibleType exttype, Module* owner); - virtual ~LocalExtItem(); - void free(Extensible* container, void* item) CXX11_OVERRIDE = 0; -}; +/** DEPRECATED: use ExtensionItem instead. */ +typedef ExtensionItem LocalExtItem; template > -class SimpleExtItem : public LocalExtItem +class SimpleExtItem : public ExtensionItem { public: SimpleExtItem(const std::string& Key, ExtensibleType exttype, Module* parent) - : LocalExtItem(Key, exttype, parent) + : ExtensionItem(Key, exttype, parent) { } @@ -216,22 +221,19 @@ class SimpleExtItem : public LocalExtItem { 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 @@ -250,7 +252,7 @@ class CoreExport LocalStringExt : public SimpleExtItem void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE; }; -class CoreExport LocalIntExt : public LocalExtItem +class CoreExport LocalIntExt : public ExtensionItem { public: LocalIntExt(const std::string& key, ExtensibleType exttype, Module* owner);