diff options
-rw-r--r-- | Sluift/ElementConvertors/DOMElementConvertor.cpp | 9 | ||||
-rw-r--r-- | Sluift/ElementConvertors/DOMElementConvertor.h | 4 | ||||
-rw-r--r-- | Sluift/ElementConvertors/DefaultElementConvertor.cpp | 6 | ||||
-rw-r--r-- | Sluift/ElementConvertors/DefaultElementConvertor.h | 4 | ||||
-rw-r--r-- | Sluift/ElementConvertors/PubSubEventItemConvertor.cpp | 2 | ||||
-rw-r--r-- | Sluift/ElementConvertors/PubSubItemConvertor.cpp | 2 | ||||
-rw-r--r-- | Sluift/ElementConvertors/RawXMLElementConvertor.cpp | 8 | ||||
-rw-r--r-- | Sluift/ElementConvertors/RawXMLElementConvertor.h | 4 | ||||
-rw-r--r-- | Sluift/GenericLuaElementConvertor.h | 8 | ||||
-rw-r--r-- | Sluift/LuaElementConvertor.h | 6 | ||||
-rw-r--r-- | Sluift/LuaElementConvertors.cpp | 14 | ||||
-rw-r--r-- | Sluift/LuaElementConvertors.h | 12 | ||||
-rw-r--r-- | Sluift/client.cpp | 2 | ||||
-rw-r--r-- | Sluift/sluift.cpp | 2 |
14 files changed, 46 insertions, 37 deletions
diff --git a/Sluift/ElementConvertors/DOMElementConvertor.cpp b/Sluift/ElementConvertors/DOMElementConvertor.cpp index bb4256d..fb1f658 100644 --- a/Sluift/ElementConvertors/DOMElementConvertor.cpp +++ b/Sluift/ElementConvertors/DOMElementConvertor.cpp @@ -161,5 +161,5 @@ DOMElementConvertor::~DOMElementConvertor() { } -boost::shared_ptr<Payload> DOMElementConvertor::convertFromLua(lua_State* L, int index, const std::string& type) { +boost::shared_ptr<Element> DOMElementConvertor::convertFromLua(lua_State* L, int index, const std::string& type) { if (!lua_istable(L, index) || type != "dom") { return boost::shared_ptr<Payload>(); @@ -169,6 +169,11 @@ boost::shared_ptr<Payload> DOMElementConvertor::convertFromLua(lua_State* L, int boost::optional<std::string> DOMElementConvertor::convertToLua( - lua_State* L, boost::shared_ptr<Payload> payload) { + lua_State* L, boost::shared_ptr<Element> element) { // Serialize payload to XML + boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(element); + if (!payload) { + return boost::optional<std::string>(); + } + PayloadSerializer* serializer = serializers.getPayloadSerializer(payload); assert(serializer); diff --git a/Sluift/ElementConvertors/DOMElementConvertor.h b/Sluift/ElementConvertors/DOMElementConvertor.h index 94d0669..fdd7304 100644 --- a/Sluift/ElementConvertors/DOMElementConvertor.h +++ b/Sluift/ElementConvertors/DOMElementConvertor.h @@ -19,6 +19,6 @@ namespace Swift { virtual ~DOMElementConvertor(); - virtual boost::shared_ptr<Payload> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; - virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Payload>) SWIFTEN_OVERRIDE; + virtual boost::shared_ptr<Element> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; + virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Element>) SWIFTEN_OVERRIDE; private: diff --git a/Sluift/ElementConvertors/DefaultElementConvertor.cpp b/Sluift/ElementConvertors/DefaultElementConvertor.cpp index 62c799b..cc326df 100644 --- a/Sluift/ElementConvertors/DefaultElementConvertor.cpp +++ b/Sluift/ElementConvertors/DefaultElementConvertor.cpp @@ -19,10 +19,10 @@ DefaultElementConvertor::~DefaultElementConvertor() { } -boost::shared_ptr<Payload> DefaultElementConvertor::convertFromLua(lua_State*, int, const std::string& type) { +boost::shared_ptr<Element> DefaultElementConvertor::convertFromLua(lua_State*, int, const std::string& type) { std::cerr << "Warning: Unable to convert type '" << type << "'" << std::endl; - return boost::shared_ptr<Payload>(); + return boost::shared_ptr<Element>(); } -boost::optional<std::string> DefaultElementConvertor::convertToLua(lua_State*, boost::shared_ptr<Payload>) { +boost::optional<std::string> DefaultElementConvertor::convertToLua(lua_State*, boost::shared_ptr<Element>) { // Should have been handled by the raw XML convertor assert(false); diff --git a/Sluift/ElementConvertors/DefaultElementConvertor.h b/Sluift/ElementConvertors/DefaultElementConvertor.h index ad8fe75..5a2975b 100644 --- a/Sluift/ElementConvertors/DefaultElementConvertor.h +++ b/Sluift/ElementConvertors/DefaultElementConvertor.h @@ -17,6 +17,6 @@ namespace Swift { virtual ~DefaultElementConvertor(); - virtual boost::shared_ptr<Payload> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; - virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Payload>) SWIFTEN_OVERRIDE; + virtual boost::shared_ptr<Element> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; + virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Element>) SWIFTEN_OVERRIDE; }; } diff --git a/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp b/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp index 4b150c4..9905df3 100644 --- a/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp +++ b/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp @@ -45,5 +45,5 @@ boost::shared_ptr<PubSubEventItem> PubSubEventItemConvertor::doConvertFromLua(lu lua_gettable(L, -2); if (!lua_isnil(L, -1)) { - if (boost::shared_ptr<Payload> payload = convertors->convertFromLua(L, -1)) { + if (boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(convertors->convertFromLua(L, -1))) { items.push_back(payload); } diff --git a/Sluift/ElementConvertors/PubSubItemConvertor.cpp b/Sluift/ElementConvertors/PubSubItemConvertor.cpp index e9ed753..dcaa600 100644 --- a/Sluift/ElementConvertors/PubSubItemConvertor.cpp +++ b/Sluift/ElementConvertors/PubSubItemConvertor.cpp @@ -35,5 +35,5 @@ boost::shared_ptr<PubSubItem> PubSubItemConvertor::doConvertFromLua(lua_State* L lua_gettable(L, -2); if (!lua_isnil(L, -1)) { - if (boost::shared_ptr<Payload> payload = convertors->convertFromLua(L, -1)) { + if (boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(convertors->convertFromLua(L, -1))) { items.push_back(payload); } diff --git a/Sluift/ElementConvertors/RawXMLElementConvertor.cpp b/Sluift/ElementConvertors/RawXMLElementConvertor.cpp index 35a53ca..e4cfe05 100644 --- a/Sluift/ElementConvertors/RawXMLElementConvertor.cpp +++ b/Sluift/ElementConvertors/RawXMLElementConvertor.cpp @@ -23,5 +23,5 @@ RawXMLElementConvertor::~RawXMLElementConvertor() { } -boost::shared_ptr<Payload> RawXMLElementConvertor::convertFromLua(lua_State* L, int index, const std::string& type) { +boost::shared_ptr<Element> RawXMLElementConvertor::convertFromLua(lua_State* L, int index, const std::string& type) { if (type == "xml") { return boost::make_shared<RawXMLPayload>(std::string(Lua::checkString(L, index))); @@ -30,5 +30,9 @@ boost::shared_ptr<Payload> RawXMLElementConvertor::convertFromLua(lua_State* L, } -boost::optional<std::string> RawXMLElementConvertor::convertToLua(lua_State* L, boost::shared_ptr<Payload> payload) { +boost::optional<std::string> RawXMLElementConvertor::convertToLua(lua_State* L, boost::shared_ptr<Element> element) { + boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(element); + if (!payload) { + return boost::optional<std::string>(); + } PayloadSerializer* serializer = serializers.getPayloadSerializer(payload); assert(serializer); diff --git a/Sluift/ElementConvertors/RawXMLElementConvertor.h b/Sluift/ElementConvertors/RawXMLElementConvertor.h index 6087ba0..2ee76c5 100644 --- a/Sluift/ElementConvertors/RawXMLElementConvertor.h +++ b/Sluift/ElementConvertors/RawXMLElementConvertor.h @@ -18,6 +18,6 @@ namespace Swift { virtual ~RawXMLElementConvertor(); - virtual boost::shared_ptr<Payload> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; - virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Payload>) SWIFTEN_OVERRIDE; + virtual boost::shared_ptr<Element> convertFromLua(lua_State*, int index, const std::string& type) SWIFTEN_OVERRIDE; + virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Element>) SWIFTEN_OVERRIDE; private: diff --git a/Sluift/GenericLuaElementConvertor.h b/Sluift/GenericLuaElementConvertor.h index afad481..3753348 100644 --- a/Sluift/GenericLuaElementConvertor.h +++ b/Sluift/GenericLuaElementConvertor.h @@ -24,17 +24,17 @@ namespace Swift { virtual ~GenericLuaElementConvertor() {} - virtual boost::shared_ptr<Payload> convertFromLua(lua_State* L, int index, const std::string& payloadType) SWIFTEN_OVERRIDE { + virtual boost::shared_ptr<Element> convertFromLua(lua_State* L, int index, const std::string& payloadType) SWIFTEN_OVERRIDE { if (payloadType == type) { Lua::checkType(L, index, LUA_TTABLE); lua_pushvalue(L, index); - boost::shared_ptr<Payload> result = doConvertFromLua(L); + boost::shared_ptr<Element> result = doConvertFromLua(L); lua_pop(L, 1); return result; } - return boost::shared_ptr<Payload>(); + return boost::shared_ptr<Element>(); } virtual boost::optional<std::string> convertToLua( - lua_State* L, boost::shared_ptr<Payload> payload) SWIFTEN_OVERRIDE { + lua_State* L, boost::shared_ptr<Element> payload) SWIFTEN_OVERRIDE { if (boost::shared_ptr<T> actualPayload = boost::dynamic_pointer_cast<T>(payload)) { doConvertToLua(L, actualPayload); diff --git a/Sluift/LuaElementConvertor.h b/Sluift/LuaElementConvertor.h index b25f43b..5e55add 100644 --- a/Sluift/LuaElementConvertor.h +++ b/Sluift/LuaElementConvertor.h @@ -16,5 +16,5 @@ struct lua_State; namespace Swift { - class Payload; + class Element; class LuaElementConvertor { @@ -31,6 +31,6 @@ namespace Swift { virtual ~LuaElementConvertor(); - virtual boost::shared_ptr<Payload> convertFromLua(lua_State*, int index, const std::string& type) = 0; - virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Payload>) = 0; + virtual boost::shared_ptr<Element> convertFromLua(lua_State*, int index, const std::string& type) = 0; + virtual boost::optional<std::string> convertToLua(lua_State*, boost::shared_ptr<Element>) = 0; virtual boost::optional<Documentation> getDocumentation() const { diff --git a/Sluift/LuaElementConvertors.cpp b/Sluift/LuaElementConvertors.cpp index ba86c06..a79b578 100644 --- a/Sluift/LuaElementConvertors.cpp +++ b/Sluift/LuaElementConvertors.cpp @@ -55,5 +55,5 @@ LuaElementConvertors::~LuaElementConvertors() { #include <Sluift/ElementConvertors/ElementConvertors.ipp> -boost::shared_ptr<Payload> LuaElementConvertors::convertFromLua(lua_State* L, int index) { +boost::shared_ptr<Element> LuaElementConvertors::convertFromLua(lua_State* L, int index) { if (lua_isstring(L, index)) { return convertFromLuaUntyped(L, index, "xml"); @@ -71,16 +71,16 @@ boost::shared_ptr<Payload> LuaElementConvertors::convertFromLua(lua_State* L, in } -boost::shared_ptr<Payload> LuaElementConvertors::convertFromLuaUntyped(lua_State* L, int index, const std::string& type) { +boost::shared_ptr<Element> LuaElementConvertors::convertFromLuaUntyped(lua_State* L, int index, const std::string& type) { index = Lua::absoluteOffset(L, index); foreach (boost::shared_ptr<LuaElementConvertor> convertor, convertors) { - if (boost::shared_ptr<Payload> result = convertor->convertFromLua(L, index, type)) { + if (boost::shared_ptr<Element> result = convertor->convertFromLua(L, index, type)) { return result; } } - return boost::shared_ptr<Payload>(); + return boost::shared_ptr<Element>(); } -int LuaElementConvertors::convertToLua(lua_State* L, boost::shared_ptr<Payload> payload) { +int LuaElementConvertors::convertToLua(lua_State* L, boost::shared_ptr<Element> payload) { if (boost::optional<std::string> type = doConvertToLuaUntyped(L, payload)) { if (lua_istable(L, -1)) { @@ -97,5 +97,5 @@ int LuaElementConvertors::convertToLua(lua_State* L, boost::shared_ptr<Payload> } -int LuaElementConvertors::convertToLuaUntyped(lua_State* L, boost::shared_ptr<Payload> payload) { +int LuaElementConvertors::convertToLuaUntyped(lua_State* L, boost::shared_ptr<Element> payload) { if (doConvertToLuaUntyped(L, payload)) { return 1; @@ -105,5 +105,5 @@ int LuaElementConvertors::convertToLuaUntyped(lua_State* L, boost::shared_ptr<Pa boost::optional<std::string> LuaElementConvertors::doConvertToLuaUntyped( - lua_State* L, boost::shared_ptr<Payload> payload) { + lua_State* L, boost::shared_ptr<Element> payload) { if (!payload) { return LuaElementConvertor::NO_RESULT; diff --git a/Sluift/LuaElementConvertors.h b/Sluift/LuaElementConvertors.h index 65b1f04..d2e2a43 100644 --- a/Sluift/LuaElementConvertors.h +++ b/Sluift/LuaElementConvertors.h @@ -17,5 +17,5 @@ struct lua_State; namespace Swift { class LuaElementConvertor; - class Payload; + class Element; class LuaElementConvertors { @@ -24,11 +24,11 @@ namespace Swift { virtual ~LuaElementConvertors(); - boost::shared_ptr<Payload> convertFromLua(lua_State*, int index); - int convertToLua(lua_State*, boost::shared_ptr<Payload>); + boost::shared_ptr<Element> convertFromLua(lua_State*, int index); + int convertToLua(lua_State*, boost::shared_ptr<Element>); /** * Adds a toplevel type+data table with the given type. */ - boost::shared_ptr<Payload> convertFromLuaUntyped(lua_State*, int index, const std::string& type); + boost::shared_ptr<Element> convertFromLuaUntyped(lua_State*, int index, const std::string& type); /** @@ -36,5 +36,5 @@ namespace Swift { * data. */ - int convertToLuaUntyped(lua_State*, boost::shared_ptr<Payload>); + int convertToLuaUntyped(lua_State*, boost::shared_ptr<Element>); const std::vector< boost::shared_ptr<LuaElementConvertor> >& getConvertors() const { @@ -43,5 +43,5 @@ namespace Swift { private: - boost::optional<std::string> doConvertToLuaUntyped(lua_State*, boost::shared_ptr<Payload>); + boost::optional<std::string> doConvertToLuaUntyped(lua_State*, boost::shared_ptr<Element>); void registerConvertors(); diff --git a/Sluift/client.cpp b/Sluift/client.cpp index 63e3bf1..db259cd 100644 --- a/Sluift/client.cpp +++ b/Sluift/client.cpp @@ -64,5 +64,5 @@ static void addPayloadsToTable(lua_State* L, const std::vector<boost::shared_ptr static boost::shared_ptr<Payload> getPayload(lua_State* L, int index) { if (lua_type(L, index) == LUA_TTABLE) { - return Sluift::globals.elementConvertor.convertFromLua(L, index); + return boost::dynamic_pointer_cast<Payload>(Sluift::globals.elementConvertor.convertFromLua(L, index)); } else if (lua_type(L, index) == LUA_TSTRING) { diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index 3908631..a04ceeb 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -149,5 +149,5 @@ SLUIFT_LUA_FUNCTION_WITH_HELP( ) { static FullPayloadSerializerCollection serializers; - boost::shared_ptr<Payload> payload = Sluift::globals.elementConvertor.convertFromLua(L, 1); + boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(Sluift::globals.elementConvertor.convertFromLua(L, 1)); if (!payload) { throw Lua::Exception("Unrecognized XML"); |