#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,
*/
virtual void unserialize(SerializeFormat format, Extensible* container, const std::string& value) = 0;
/** Free the item */
- virtual void free(void* item) = 0;
+ virtual void free(Extensible* container, void* item) = 0;
+
+ /** Register this object in the ExtensionManager
+ */
+ void RegisterService() CXX11_OVERRIDE;
protected:
/** Get the item from the internal map */
inline const ExtensibleStore& GetExtList() const { return extensions; }
Extensible();
- virtual CullResult cull();
+ CullResult cull() CXX11_OVERRIDE;
virtual ~Extensible();
void doUnhookExtensions(const std::vector<reference<ExtensionItem> >& toRemove);
public:
LocalExtItem(const std::string& key, ExtensibleType exttype, Module* owner);
virtual ~LocalExtItem();
- virtual std::string serialize(SerializeFormat format, const Extensible* container, void* item) const;
- virtual void unserialize(SerializeFormat format, Extensible* container, const std::string& value);
- virtual void free(void* item) = 0;
+ 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;
};
template <typename T, typename Del = stdalgo::defaultdeleter<T> >
del(old);
}
- virtual void free(void* item)
+ void free(Extensible* container, void* item) CXX11_OVERRIDE
{
Del del;
del(static_cast<T*>(item));
public:
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);
+ 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;
};
class CoreExport LocalIntExt : public LocalExtItem
public:
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);
+ 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;
intptr_t get(const Extensible* container) const;
intptr_t set(Extensible* container, intptr_t value);
void unset(Extensible* container) { set(container, 0); }
- void free(void* item);
+ void free(Extensible* container, void* item) CXX11_OVERRIDE;
};
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;
- void unserialize(SerializeFormat format, Extensible* container, const std::string& value);
+ 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 set(Extensible* container, const std::string& value);
void unset(Extensible* container);
- void free(void* item);
+ void free(Extensible* container, void* item) CXX11_OVERRIDE;
};