X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fextensible.h;h=2e7b83a28b3d90324577b68b151e0db75add6016;hb=040b16dd6a9cab6ea1ec78eb2a402c7f29b1c09c;hp=588f882b468918aa213b83c538233f2ab565dc88;hpb=85182d727c0d549b9cf6659ad36dec70fcf02278;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/extensible.h b/include/extensible.h index 588f882b4..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,23 +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(); - std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE; - void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE; - 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) { } @@ -218,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 @@ -248,17 +248,17 @@ class CoreExport LocalStringExt : public SimpleExtItem public: LocalStringExt(const std::string& key, ExtensibleType exttype, Module* owner); virtual ~LocalStringExt(); - std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE; - void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE; + std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE; + 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); virtual ~LocalIntExt(); - std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE; - void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE; + std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE; + void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE; intptr_t get(const Extensible* container) const; intptr_t set(Extensible* container, intptr_t value); void unset(Extensible* container) { set(container, 0); } @@ -271,8 +271,8 @@ class CoreExport StringExtItem : public ExtensionItem StringExtItem(const std::string& key, ExtensibleType exttype, Module* owner); virtual ~StringExtItem(); std::string* get(const Extensible* container) const; - std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE; - void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE; + std::string ToNetwork(const Extensible* container, void* item) const CXX11_OVERRIDE; + void FromNetwork(Extensible* container, const std::string& value) CXX11_OVERRIDE; void set(Extensible* container, const std::string& value); void unset(Extensible* container); void free(Extensible* container, void* item) CXX11_OVERRIDE;