/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012, 2014-2015 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
/** 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);
* 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<reference<ExtensionItem>, void*> ExtensibleStore;
* 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
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 <typename T, typename Del = stdalgo::defaultdeleter<T> >
-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)
{
}
{
T* ptr = new T(value);
T* old = static_cast<T*>(set_raw(container, ptr));
- Del del;
- del(old);
+ free(container, old);
}
inline void set(Extensible* container, T* value)
{
T* old = static_cast<T*>(set_raw(container, value));
- Del del;
- del(old);
+ free(container, old);
}
inline void unset(Extensible* container)
{
T* old = static_cast<T*>(unset_raw(container));
- Del del;
- del(old);
+ free(container, old);
}
void free(Extensible* container, void* item) CXX11_OVERRIDE
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); }
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;