From db7b3ec096ddfe3c51cbd9b1aafe1e0b0e186ceb Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 10 Aug 2001 05:17:40 +0000 Subject: [PATCH] - some code rearrangement for readability and maintainability - commented out some destructor code that's causing crashes (temporarily creates a minor memory leak, triggered only when reloading the panel) --- src/Input/input.cxx | 66 +++++++++++++++++++++++++++++++++++++++++- src/Input/input.hxx | 70 ++++++++++++++++++++++++++------------------- 2 files changed, 105 insertions(+), 31 deletions(-) diff --git a/src/Input/input.cxx b/src/Input/input.cxx index 32f82bfca..f35c4ab29 100644 --- a/src/Input/input.cxx +++ b/src/Input/input.cxx @@ -181,7 +181,7 @@ FGInput::FGInput () FGInput::~FGInput () { - // TODO: delete all FGBinding objects explicitly + // no op } void @@ -632,6 +632,70 @@ FGInput::_find_key_bindings (unsigned int k, int modifiers) } + +//////////////////////////////////////////////////////////////////////// +// Implementation of FGInput::button. +//////////////////////////////////////////////////////////////////////// + +FGInput::button::button () + : is_repeatable(false), + last_state(-1) +{ +} + +FGInput::button::~button () +{ + // FIXME: memory leak +// for (int i = 0; i < FG_MOD_MAX; i++) +// for (int j = 0; i < bindings[i].size(); j++) +// delete bindings[i][j]; +} + + + +//////////////////////////////////////////////////////////////////////// +// Implementation of FGInput::axis. +//////////////////////////////////////////////////////////////////////// + +FGInput::axis::axis () + : last_value(9999999), + tolerance(0.002), + low_threshold(-0.9), + high_threshold(0.9) +{ +} + +FGInput::axis::~axis () +{ + for (int i = 0; i < FG_MOD_MAX; i++) + for (unsigned int j = 0; i < bindings[i].size(); j++) + delete bindings[i][j]; +} + + + +//////////////////////////////////////////////////////////////////////// +// Implementation of FGInput::joystick. +//////////////////////////////////////////////////////////////////////// + +FGInput::joystick::joystick () +{ +} + +FGInput::joystick::~joystick () +{ + delete js; + delete[] axes; + delete[] buttons; +} + + + +//////////////////////////////////////////////////////////////////////// +// Implementation of GLUT callbacks. +//////////////////////////////////////////////////////////////////////// + + /** * Construct the modifiers. */ diff --git a/src/Input/input.hxx b/src/Input/input.hxx index 15791aaf9..3ca62c8f2 100644 --- a/src/Input/input.hxx +++ b/src/Input/input.hxx @@ -44,6 +44,13 @@ SG_USING_STD(map); SG_USING_STD(vector); + + +//////////////////////////////////////////////////////////////////////// +// General binding support. +//////////////////////////////////////////////////////////////////////// + + /** * An input binding of some sort. * @@ -134,6 +141,12 @@ private: }; + +//////////////////////////////////////////////////////////////////////// +// General input mapping support. +//////////////////////////////////////////////////////////////////////// + + /** * Generic input module. * @@ -154,7 +167,16 @@ public: FG_MOD_MAX = 16 // enough to handle all combinations }; - FGInput(); + + /** + * Default constructor. + */ + FGInput (); + + + /** + * Destructor. + */ virtual ~FGInput(); // @@ -184,7 +206,6 @@ public: private: - // Constants enum { @@ -206,15 +227,8 @@ private: * Settings for a key or button. */ struct button { - button () - : is_repeatable(false), - last_state(-1) - {} - virtual ~button () { - for (int i = 0; i < FG_MOD_MAX; i++) - for (int j = 0; i < bindings[i].size(); j++) - delete bindings[i][j]; - } + button (); + virtual ~button (); bool is_repeatable; int last_state; binding_list_t bindings[FG_MOD_MAX]; @@ -225,17 +239,8 @@ private: * Settings for a single joystick axis. */ struct axis { - axis () - : last_value(9999999), - tolerance(0.002), - low_threshold(-0.9), - high_threshold(0.9) - {} - virtual ~axis () { - for (int i = 0; i < FG_MOD_MAX; i++) - for (int j = 0; i < bindings[i].size(); j++) - delete bindings[i][j]; - } + axis (); + virtual ~axis (); float last_value; float tolerance; binding_list_t bindings[FG_MOD_MAX]; @@ -250,14 +255,12 @@ private: * Settings for a joystick. */ struct joystick { - virtual ~joystick () { - delete js; - delete[] axes; - delete[] buttons; - } + joystick (); + virtual ~joystick (); + int jsnum; + jsJoystick * js; int naxes; int nbuttons; - jsJoystick * js; axis * axes; button * buttons; }; @@ -319,12 +322,19 @@ private: }; + +extern FGInput current_input; + + + +//////////////////////////////////////////////////////////////////////// +// GLUT callbacks. +//////////////////////////////////////////////////////////////////////// + // Handle keyboard events void GLUTkey(unsigned char k, int x, int y); void GLUTkeyup(unsigned char k, int x, int y); void GLUTspecialkey(int k, int x, int y); void GLUTspecialkeyup(int k, int x, int y); -extern FGInput current_input; - #endif // _CONTROLS_HXX