+LocalIntExt::~LocalIntExt()
+{
+}
+
+std::string LocalIntExt::ToInternal(const Extensible* container, void* item) const
+{
+ return ConvToStr(reinterpret_cast<intptr_t>(item));
+}
+
+void LocalIntExt::FromInternal(Extensible* container, const std::string& value)
+{
+ set(container, ConvToNum<intptr_t>(value));
+}
+
+intptr_t LocalIntExt::get(const Extensible* container) const
+{
+ return reinterpret_cast<intptr_t>(get_raw(container));
+}
+
+intptr_t LocalIntExt::set(Extensible* container, intptr_t value)
+{
+ if (value)
+ return reinterpret_cast<intptr_t>(set_raw(container, reinterpret_cast<void*>(value)));
+ else
+ return reinterpret_cast<intptr_t>(unset_raw(container));
+}
+
+void LocalIntExt::free(Extensible* container, void* item)
+{
+}
+
+StringExtItem::StringExtItem(const std::string& Key, ExtensibleType exttype, Module* mod)
+ : ExtensionItem(Key, exttype, mod)
+{
+}
+
+StringExtItem::~StringExtItem()
+{
+}
+
+std::string* StringExtItem::get(const Extensible* container) const
+{
+ return static_cast<std::string*>(get_raw(container));
+}
+
+std::string StringExtItem::ToNetwork(const Extensible* container, void* item) const
+{
+ return item ? *static_cast<std::string*>(item) : std::string();
+}
+
+void StringExtItem::FromNetwork(Extensible* container, const std::string& value)
+{
+ if (value.empty())
+ unset(container);
+ else
+ set(container, value);
+}
+
+void StringExtItem::set(Extensible* container, const std::string& value)