#pragma once
-#include <stdint.h>
-
enum SerializeFormat
{
/** Shown to a human (does not need to be unserializable) */
class CoreExport ExtensionItem : public ServiceProvider, public usecountbase
{
public:
- /** Extensible subclasses
- */
+ /** Extensible subclasses
+ */
enum ExtensibleType
{
EXT_USER,
/** Free the item */
virtual void free(void* item) = 0;
+ /** Register this object in the ExtensionManager
+ */
+ void RegisterService() CXX11_OVERRIDE;
+
protected:
/** Get the item from the internal map */
void* get_raw(const Extensible* container) const;
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
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); }