* 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).
*/
-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;