class CoreExport ExtensionItem : public ServiceProvider, public usecountbase
{
public:
- ExtensionItem(const std::string& key, Module* owner);
+ /** Extensible subclasses
+ */
+ enum ExtensibleType
+ {
+ EXT_USER,
+ EXT_CHANNEL,
+ EXT_MEMBERSHIP
+ };
+
+ /** Type (subclass) of Extensible that this ExtensionItem is valid for
+ */
+ const ExtensibleType type;
+
+ ExtensionItem(const std::string& key, ExtensibleType exttype, Module* owner);
virtual ~ExtensionItem();
/** Serialize this item into a string
*
class CoreExport LocalExtItem : public ExtensionItem
{
public:
- LocalExtItem(const std::string& key, Module* owner);
+ 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);
class SimpleExtItem : public LocalExtItem
{
public:
- SimpleExtItem(const std::string& Key, Module* parent) : LocalExtItem(Key, parent)
+ SimpleExtItem(const std::string& Key, ExtensibleType exttype, Module* parent)
+ : LocalExtItem(Key, exttype, parent)
{
}
class CoreExport LocalStringExt : public SimpleExtItem<std::string>
{
public:
- LocalStringExt(const std::string& key, Module* owner);
+ LocalStringExt(const std::string& key, ExtensibleType exttype, Module* owner);
virtual ~LocalStringExt();
std::string serialize(SerializeFormat format, const Extensible* container, void* item) const;
};
class CoreExport LocalIntExt : public LocalExtItem
{
public:
- LocalIntExt(const std::string& key, Module* owner);
+ LocalIntExt(const std::string& key, ExtensibleType exttype, Module* owner);
virtual ~LocalIntExt();
std::string serialize(SerializeFormat format, const Extensible* container, void* item) const;
intptr_t get(const Extensible* container) const;
class CoreExport StringExtItem : public ExtensionItem
{
public:
- StringExtItem(const std::string& key, Module* owner);
+ 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;