X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fextensible.h;h=1da45cee632ff4ff63bd104db927c6e603112e55;hb=60d92db9a1b71bbfd4230c5eb9f04cd6a87a41d8;hp=3453f3e15259195547978609282fc83262f031b4;hpb=f3667d995e439a1d75fd9b56b29b610f3d877d8b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/extensible.h b/include/extensible.h index 3453f3e15..1da45cee6 100644 --- a/include/extensible.h +++ b/include/extensible.h @@ -19,8 +19,6 @@ #pragma once -#include - enum SerializeFormat { /** Shown to a human (does not need to be unserializable) */ @@ -38,8 +36,8 @@ enum SerializeFormat class CoreExport ExtensionItem : public ServiceProvider, public usecountbase { public: - /** Extensible subclasses - */ + /** Extensible subclasses + */ enum ExtensibleType { EXT_USER, @@ -113,7 +111,7 @@ class CoreExport Extensible : public classbase inline const ExtensibleStore& GetExtList() const { return extensions; } Extensible(); - virtual CullResult cull(); + virtual CullResult cull() CXX11_OVERRIDE; virtual ~Extensible(); void doUnhookExtensions(const std::vector >& toRemove); @@ -125,11 +123,20 @@ class CoreExport Extensible : public classbase class CoreExport ExtensionManager { - std::map > types; public: + typedef std::map > ExtMap; + bool Register(ExtensionItem* item); void BeginUnregister(Module* module, std::vector >& list); ExtensionItem* GetItem(const std::string& name); + + /** Get all registered extensions keyed by their names + * @return Const map of ExtensionItem pointers keyed by their names + */ + const ExtMap& GetExts() const { return types; } + + private: + ExtMap types; }; /** Base class for items that are NOT synchronized between servers */ @@ -196,6 +203,7 @@ class CoreExport LocalStringExt : public SimpleExtItem LocalStringExt(const std::string& key, ExtensibleType exttype, Module* owner); virtual ~LocalStringExt(); std::string serialize(SerializeFormat format, const Extensible* container, void* item) const; + void unserialize(SerializeFormat format, Extensible* container, const std::string& value); }; class CoreExport LocalIntExt : public LocalExtItem @@ -204,6 +212,7 @@ class CoreExport LocalIntExt : public LocalExtItem LocalIntExt(const std::string& key, ExtensibleType exttype, Module* owner); virtual ~LocalIntExt(); std::string serialize(SerializeFormat format, const Extensible* container, void* item) const; + void unserialize(SerializeFormat format, Extensible* container, const std::string& value); intptr_t get(const Extensible* container) const; intptr_t set(Extensible* container, intptr_t value); void unset(Extensible* container) { set(container, 0); }