[Scummvm-cvs-logs] SF.net SVN: scummvm:[53208] scummvm/trunk/engines/sword25

sev at users.sourceforge.net sev at users.sourceforge.net
Wed Oct 13 00:23:24 CEST 2010


Revision: 53208
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53208&view=rev
Author:   sev
Date:     2010-10-12 22:23:24 +0000 (Tue, 12 Oct 2010)

Log Message:
-----------
SWORD25: Fix for void * conversion errors

It turns out that strict C++ doesn't allow function pointers to be converted to void pointers and vice versa. Since there are two callback function pointer types - one with a KEY_COMMANDS enum parameter, and the other with an unsigned char type, I changed all void * occurances to a function pointer type with an 'int' parameter, and changed all implementation methods to take in an int parameter.

Modified Paths:
--------------
    scummvm/trunk/engines/sword25/input/inputengine.h
    scummvm/trunk/engines/sword25/input/inputengine_script.cpp
    scummvm/trunk/engines/sword25/input/scummvminput.h
    scummvm/trunk/engines/sword25/kernel/callbackregistry.cpp
    scummvm/trunk/engines/sword25/kernel/callbackregistry.h

Modified: scummvm/trunk/engines/sword25/input/inputengine.h
===================================================================
--- scummvm/trunk/engines/sword25/input/inputengine.h	2010-10-12 22:22:56 UTC (rev 53207)
+++ scummvm/trunk/engines/sword25/input/inputengine.h	2010-10-12 22:23:24 UTC (rev 53208)
@@ -49,6 +49,7 @@
 #include "sword25/kernel/common.h"
 #include "sword25/kernel/service.h"
 #include "sword25/kernel/persistable.h"
+#include "sword25/kernel/callbackregistry.h"
 
 namespace Sword25 {
 
@@ -254,7 +255,7 @@
 	 */
 	virtual bool WasKeyDown(unsigned int KeyCode) = 0;
 
-	typedef void (*CharacterCallback)(unsigned char Character);
+	typedef CallbackPtr CharacterCallback;
 
 	/**
 	 * Registers a callback function for keyboard input.
@@ -268,15 +269,15 @@
 	 * The input of strings by the user through use of callbacks should be implemented.
 	 * @return				Returns true if the function was registered, otherwise false.
 	*/
-	virtual bool RegisterCharacterCallback(CharacterCallback Callback) = 0;
+	virtual bool RegisterCharacterCallback(CallbackPtr Callback) = 0;
 
 	/**
 	 * De-registeres a previously registered callback function.
 	 * @return				Returns true if the function could be de-registered, otherwise false.
 	 */
-	virtual bool UnregisterCharacterCallback(CharacterCallback Callback) = 0;
+	virtual bool UnregisterCharacterCallback(CallbackPtr Callback) = 0;
 
-	typedef void (*CommandCallback)(KEY_COMMANDS Command);
+	typedef CallbackPtr CommandCallback;
 
 	/**
 	 * Registers a callback function for the input of commands that can have influence on the string input
@@ -287,7 +288,7 @@
 	 * The input of strings by the user through the use of callbacks should be implemented.
 	 * @return				Returns true if the function was registered, otherwise false.
 	 */
-	virtual bool RegisterCommandCallback(CommandCallback Callback) = 0;
+	virtual bool RegisterCommandCallback(CallbackPtr Callback) = 0;
 
 	/**
 	 * Un-register a callback function for the input of commands that can have an influence on the string input.

Modified: scummvm/trunk/engines/sword25/input/inputengine_script.cpp
===================================================================
--- scummvm/trunk/engines/sword25/input/inputengine_script.cpp	2010-10-12 22:22:56 UTC (rev 53207)
+++ scummvm/trunk/engines/sword25/input/inputengine_script.cpp	2010-10-12 22:23:24 UTC (rev 53208)
@@ -57,8 +57,8 @@
 // Callback-Objekte
 // -----------------------------------------------------------------------------
 
-static void TheCharacterCallback(unsigned char Character);
-static void TheCommandCallback(BS_InputEngine::KEY_COMMANDS Command);
+static void TheCharacterCallback(int Character);
+static void TheCommandCallback(int Command);
 
 namespace {
 	class CharacterCallbackClass : public BS_LuaCallback {
@@ -68,8 +68,7 @@
 		Common::String Character;
 
 	protected:
-		int PreFunctionInvokation(lua_State *L)
-		{
+		int PreFunctionInvokation(lua_State *L) {
 			lua_pushstring(L, Character.c_str());
 			return 1;
 		}
@@ -242,8 +241,8 @@
 
 // -----------------------------------------------------------------------------
 
-static void TheCharacterCallback(unsigned char Character) {
-	CharacterCallbackPtr->Character = Character;
+static void TheCharacterCallback(int Character) {
+	CharacterCallbackPtr->Character = static_cast<unsigned char>(Character);
 	lua_State *L = static_cast<lua_State *>(BS_Kernel::GetInstance()->GetScript()->GetScriptObject());
 	CharacterCallbackPtr->InvokeCallbackFunctions(L, 1);
 }
@@ -268,8 +267,8 @@
 
 // -----------------------------------------------------------------------------
 
-static void TheCommandCallback(BS_InputEngine::KEY_COMMANDS Command) {
-	CommandCallbackPtr->Command = Command;
+static void TheCommandCallback(int Command) {
+	CommandCallbackPtr->Command = static_cast<BS_InputEngine::KEY_COMMANDS>(Command);
 	lua_State *L = static_cast<lua_State *>(BS_Kernel::GetInstance()->GetScript()->GetScriptObject());
 	CommandCallbackPtr->InvokeCallbackFunctions(L, 1);
 }
@@ -345,10 +344,8 @@
 	if (!BS_LuaBindhelper::AddFunctionsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_FUNCTIONS)) return false;
 	if (!BS_LuaBindhelper::AddConstantsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_CONSTANTS)) return false;
 
-	Common::SharedPtr<CharacterCallbackClass> p1(new CharacterCallbackClass(L));
-	CharacterCallbackPtr = p1;
-	Common::SharedPtr<CharacterCallbackClass> p2(new CommandCallbackClass(L));
-	CommandCallbackPtr = p2;
+	CharacterCallbackPtr = Common::SharedPtr<CharacterCallbackClass>(new CharacterCallbackClass(L));
+	CommandCallbackPtr = Common::SharedPtr<CommandCallbackClass>(new CommandCallbackClass(L));
 
 	return true;
 }

Modified: scummvm/trunk/engines/sword25/input/scummvminput.h
===================================================================
--- scummvm/trunk/engines/sword25/input/scummvminput.h	2010-10-12 22:22:56 UTC (rev 53207)
+++ scummvm/trunk/engines/sword25/input/scummvminput.h	2010-10-12 22:23:24 UTC (rev 53208)
@@ -65,10 +65,10 @@
 	virtual bool WasKeyDown(unsigned int KeyCode);
 	virtual void SetMouseX(int PosX);
 	virtual void SetMouseY(int PosY);
-	virtual bool RegisterCharacterCallback(CharacterCallback Callback);
-	virtual bool UnregisterCharacterCallback(CharacterCallback Callback);
-	virtual bool RegisterCommandCallback(CommandCallback Callback);
-	virtual bool UnregisterCommandCallback(CommandCallback Callback);
+	virtual bool RegisterCharacterCallback(CallbackPtr Callback);
+	virtual bool UnregisterCharacterCallback(CallbackPtr Callback);
+	virtual bool RegisterCommandCallback(CallbackPtr Callback);
+	virtual bool UnregisterCommandCallback(CallbackPtr Callback);
 	virtual void ReportCharacter(unsigned char Character);
 	virtual void ReportCommand(KEY_COMMANDS Command);
 

Modified: scummvm/trunk/engines/sword25/kernel/callbackregistry.cpp
===================================================================
--- scummvm/trunk/engines/sword25/kernel/callbackregistry.cpp	2010-10-12 22:22:56 UTC (rev 53207)
+++ scummvm/trunk/engines/sword25/kernel/callbackregistry.cpp	2010-10-12 22:23:24 UTC (rev 53208)
@@ -60,7 +60,7 @@
 
 // -----------------------------------------------------------------------------
 
-bool BS_CallbackRegistry::RegisterCallbackFunction(const Common::String &Name, void *Ptr) {
+bool BS_CallbackRegistry::RegisterCallbackFunction(const Common::String &Name, CallbackPtr Ptr) {
 	if (Name == "") {
 		BS_LOG_ERRORLN("The empty string is not allowed as a callback function name.");
 		return false;
@@ -82,8 +82,8 @@
 
 // -----------------------------------------------------------------------------
 
-void * BS_CallbackRegistry::ResolveCallbackFunction(const Common::String & Name) const {
-	void * Result = FindPtrByName(Name);
+CallbackPtr BS_CallbackRegistry::ResolveCallbackFunction(const Common::String &Name) const {
+	CallbackPtr Result = FindPtrByName(Name);
 
 	if (!Result) {
 		BS_LOG_ERRORLN("There is no callback function with the name \"%s\".", Name.c_str());
@@ -94,7 +94,7 @@
 
 // -----------------------------------------------------------------------------
 
-Common::String BS_CallbackRegistry::ResolveCallbackPointer(void *Ptr) const {
+Common::String BS_CallbackRegistry::ResolveCallbackPointer(CallbackPtr Ptr) const {
 	const Common::String &Result = FindNameByPtr(Ptr);
 
 	if (Result == "") {
@@ -106,7 +106,7 @@
 
 // -----------------------------------------------------------------------------
 
-void * BS_CallbackRegistry::FindPtrByName(const Common::String &Name) const {
+CallbackPtr BS_CallbackRegistry::FindPtrByName(const Common::String &Name) const {
 	// Eintrag in der Map finden und den Pointer zur\xFCckgeben.
 	NameToPtrMap::const_iterator It = m_NameToPtrMap.find(Name);
 	return It == m_NameToPtrMap.end() ? 0 : It->_value;
@@ -114,7 +114,7 @@
 
 // -----------------------------------------------------------------------------
 
-Common::String BS_CallbackRegistry::FindNameByPtr(void *Ptr) const {
+Common::String BS_CallbackRegistry::FindNameByPtr(CallbackPtr Ptr) const {
 	// Eintrag in der Map finden und den Namen zur\xFCckgeben.
 	PtrToNameMap::const_iterator It = m_PtrToNameMap.find(Ptr);
 	return It == m_PtrToNameMap.end() ? "" : It->second;
@@ -122,7 +122,7 @@
 
 // -----------------------------------------------------------------------------
 
-void BS_CallbackRegistry::StoreCallbackFunction(const Common::String &Name, void *Ptr) {
+void BS_CallbackRegistry::StoreCallbackFunction(const Common::String &Name, CallbackPtr Ptr) {
 	// Callback-Funktion in beide Maps eintragen.
 	m_NameToPtrMap[Name] = Ptr;
 	m_PtrToNameMap[Ptr] = Name;

Modified: scummvm/trunk/engines/sword25/kernel/callbackregistry.h
===================================================================
--- scummvm/trunk/engines/sword25/kernel/callbackregistry.h	2010-10-12 22:22:56 UTC (rev 53207)
+++ scummvm/trunk/engines/sword25/kernel/callbackregistry.h	2010-10-12 22:23:24 UTC (rev 53208)
@@ -51,6 +51,8 @@
 // Klassendeklaration
 // -----------------------------------------------------------------------------
 
+typedef void (*CallbackPtr)(int Command); 
+
 class BS_CallbackRegistry {
 public:
 	static BS_CallbackRegistry & GetInstance() {
@@ -58,19 +60,19 @@
 		return Instance;
 	}
 
-	bool		RegisterCallbackFunction(const Common::String &Name, void * Ptr);
-	void *		ResolveCallbackFunction(const Common::String &Name) const;
-	Common::String	ResolveCallbackPointer(void *Ptr) const;
+	bool		RegisterCallbackFunction(const Common::String &Name, CallbackPtr Ptr);
+	CallbackPtr		ResolveCallbackFunction(const Common::String &Name) const;
+	Common::String	ResolveCallbackPointer(CallbackPtr Ptr) const;
 
 private:
-	typedef Common::HashMap<Common::String, void *, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> NameToPtrMap;
+	typedef Common::HashMap<Common::String, CallbackPtr, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> NameToPtrMap;
 	NameToPtrMap m_NameToPtrMap;
-	typedef Common::HashMap<void *, Common::String, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> PtrToNameMap;
+	typedef Common::HashMap<CallbackPtr, Common::String, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> PtrToNameMap;
 	PtrToNameMap m_PtrToNameMap;
 
-	void *		FindPtrByName(const Common::String &Name) const;
-	Common::String	FindNameByPtr(void * Ptr) const;
-	void		StoreCallbackFunction(const Common::String & Name, void * Ptr);
+	CallbackPtr		FindPtrByName(const Common::String &Name) const;
+	Common::String	FindNameByPtr(CallbackPtr Ptr) const;
+	void		StoreCallbackFunction(const Common::String &Name, CallbackPtr Ptr);
 };
 
 } // End of namespace Sword25


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list