From a8dc57f38eb50f9cd306e206df81a168ceaa7b59 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 17 Dec 2006 07:15:25 +0000 Subject: [PATCH] merge duplicate boilerplate code --- .../src/arch/InputHandler/InputHandler.cpp | 18 +++++++----------- stepmania/src/arch/InputHandler/InputHandler.h | 9 ++++----- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/stepmania/src/arch/InputHandler/InputHandler.cpp b/stepmania/src/arch/InputHandler/InputHandler.cpp index c0ee83c1f2..22897ef416 100644 --- a/stepmania/src/arch/InputHandler/InputHandler.cpp +++ b/stepmania/src/arch/InputHandler/InputHandler.cpp @@ -162,14 +162,10 @@ RString InputHandler::GetLocalizedInputString( const DeviceInput &di ) } } -map *RegisterInputHandler::g_pRegistrees; -RegisterInputHandler::RegisterInputHandler( const istring &sName, CreateInputHandlerFn pfn ) +static DriverList g_pRegistrees; +RegisterInputHandler::RegisterInputHandler( const istring &sName, CreateRageDriverFn pfn ) { - if( g_pRegistrees == NULL ) - g_pRegistrees = new map; - - ASSERT( g_pRegistrees->find(sName) == g_pRegistrees->end() ); - (*g_pRegistrees)[sName] = pfn; + g_pRegistrees.Add( sName, pfn ); } static LocalizedString INPUT_HANDLERS_EMPTY( "Arch", "Input Handlers cannot be empty." ); @@ -184,14 +180,14 @@ void MakeInputHandlers( const RString &drivers_, vector &Add ) FOREACH_CONST( RString, DriversToTry, s ) { - map::const_iterator iter = RegisterInputHandler::g_pRegistrees->find( istring(*s) ); - - if( iter == RegisterInputHandler::g_pRegistrees->end() ) + RageDriver *pDriver = g_pRegistrees.Create( *s ); + if( pDriver == NULL ) { LOG->Trace( "Unknown Input Handler name: %s", s->c_str() ); continue; } - InputHandler *ret = (iter->second)(); + + InputHandler *ret = dynamic_cast( pDriver ); DEBUG_ASSERT( ret ); Add.push_back( ret ); } diff --git a/stepmania/src/arch/InputHandler/InputHandler.h b/stepmania/src/arch/InputHandler/InputHandler.h index b840705a2c..52493fb0f5 100644 --- a/stepmania/src/arch/InputHandler/InputHandler.h +++ b/stepmania/src/arch/InputHandler/InputHandler.h @@ -21,8 +21,9 @@ * We don't need this now; I'll write it if it becomes needed.) */ #include "RageInputDevice.h" // for InputDevice +#include "arch/RageDriver.h" -class InputHandler +class InputHandler: public RageDriver { public: InputHandler() { m_iInputsSinceUpdate = 0; } @@ -68,14 +69,12 @@ private: int m_iInputsSinceUpdate; }; -typedef InputHandler *(*CreateInputHandlerFn)(); struct RegisterInputHandler { - static map *g_pRegistrees; - RegisterInputHandler( const istring &sName, CreateInputHandlerFn pfn ); + RegisterInputHandler( const istring &sName, CreateRageDriverFn pfn ); }; #define REGISTER_INPUT_HANDLER_CLASS2( name, x ) \ - static RegisterInputHandler register_##name( #name, CreateClass ) + static RegisterInputHandler register_##name( #name, CreateClass ) #define REGISTER_INPUT_HANDLER_CLASS( name ) REGISTER_INPUT_HANDLER_CLASS2( name, name )