ServerInstance->Logs->Log("CULLLIST", LOG_DEBUG, "Extensible destructor called without cull @%p", (void*)this);
}
-LocalExtItem::LocalExtItem(const std::string& Key, ExtensibleType exttype, Module* mod)
- : ExtensionItem(Key, exttype, mod)
+void ExtensionItem::FromInternal(Extensible* container, const std::string& value)
+{
+ FromNetwork(container, value);
+}
+
+void ExtensionItem::FromNetwork(Extensible* container, const std::string& value)
+{
+}
+
+std::string ExtensionItem::ToHuman(const Extensible* container, void* item) const
+{
+ // Try to use the network form by default.
+ std::string ret = ToNetwork(container, item);
+
+ // If there's no network form then fall back to the internal form.
+ if (ret.empty())
+ ret = ToInternal(container, item);
+
+ return ret;
+}
+
+std::string ExtensionItem::ToInternal(const Extensible* container, void* item) const
{
+ return ToNetwork(container, item);
}
-LocalExtItem::~LocalExtItem()
+std::string ExtensionItem::ToNetwork(const Extensible* container, void* item) const
{
+ return std::string();
}
-std::string LocalExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string ExtensionItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
{
+ // Wrap the deprecated API with the new API.
+ switch (format)
+ {
+ case FORMAT_USER:
+ return ToHuman(container, item);
+ case FORMAT_INTERNAL:
+ case FORMAT_PERSIST:
+ return ToInternal(container, item);
+ case FORMAT_NETWORK:
+ return ToNetwork(container, item);
+ }
return "";
}
-void LocalExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+
+void ExtensionItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
{
+ // Wrap the deprecated API with the new API.
+ switch (format)
+ {
+ case FORMAT_USER:
+ break;
+ case FORMAT_INTERNAL:
+ case FORMAT_PERSIST:
+ FromInternal(container, value);
+ break;
+ case FORMAT_NETWORK:
+ FromNetwork(container, value);
+ break;
+ }
}
LocalStringExt::LocalStringExt(const std::string& Key, ExtensibleType exttype, Module* Owner)
{
}
-std::string LocalStringExt::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string LocalStringExt::ToInternal(const Extensible* container, void* item) const
{
- if ((item) && (format != FORMAT_NETWORK))
- return *static_cast<std::string*>(item);
- return "";
+ return item ? *static_cast<std::string*>(item) : std::string();
}
-void LocalStringExt::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void LocalStringExt::FromInternal(Extensible* container, const std::string& value)
{
- if (format != FORMAT_NETWORK)
- set(container, value);
+ set(container, value);
}
LocalIntExt::LocalIntExt(const std::string& Key, ExtensibleType exttype, Module* mod)
- : LocalExtItem(Key, exttype, mod)
+ : ExtensionItem(Key, exttype, mod)
{
}
{
}
-std::string LocalIntExt::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string LocalIntExt::ToInternal(const Extensible* container, void* item) const
{
- if (format == FORMAT_NETWORK)
- return "";
return ConvToStr(reinterpret_cast<intptr_t>(item));
}
-void LocalIntExt::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void LocalIntExt::FromInternal(Extensible* container, const std::string& value)
{
- if (format != FORMAT_NETWORK)
- set(container, ConvToNum<intptr_t>(value));
+ set(container, ConvToNum<intptr_t>(value));
}
intptr_t LocalIntExt::get(const Extensible* container) const
return static_cast<std::string*>(get_raw(container));
}
-std::string StringExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string StringExtItem::ToNetwork(const Extensible* container, void* item) const
{
- return item ? *static_cast<std::string*>(item) : "";
+ return item ? *static_cast<std::string*>(item) : std::string();
}
-void StringExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void StringExtItem::FromNetwork(Extensible* container, const std::string& value)
{
if (value.empty())
unset(container);
void StringExtItem::set(Extensible* container, const std::string& value)
{
void* old = set_raw(container, new std::string(value));
- delete static_cast<std::string*>(old);
+ free(container, old);
}
void StringExtItem::unset(Extensible* container)
{
void* old = unset_raw(container);
- delete static_cast<std::string*>(old);
+ free(container, old);
}
void StringExtItem::free(Extensible* container, void* item)