From eac169b6da0ca6b4fb1bcc52323ec1841591dd19 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 9 Feb 2013 15:45:36 +0000 Subject: [PATCH] Grrrr. --- simgear/structure/commands.cxx~ | 100 ------------------- simgear/structure/commands.hxx~ | 171 -------------------------------- 2 files changed, 271 deletions(-) delete mode 100644 simgear/structure/commands.cxx~ delete mode 100644 simgear/structure/commands.hxx~ diff --git a/simgear/structure/commands.cxx~ b/simgear/structure/commands.cxx~ deleted file mode 100644 index 3a221321..00000000 --- a/simgear/structure/commands.cxx~ +++ /dev/null @@ -1,100 +0,0 @@ -// commands.cxx - encapsulated commands. -// Started Spring 2001 by David Megginson, david@megginson.com -// This code is released into the Public Domain. -// -// $Id$ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#include "commands.hxx" - -#include -#include -#include -#include - - -//////////////////////////////////////////////////////////////////////// -// Implementation of SGCommandMgr class. -//////////////////////////////////////////////////////////////////////// - - -SGCommandMgr::SGCommandMgr () -{ - // no-op -} - -SGCommandMgr::~SGCommandMgr () -{ - // no-op -} - -SGMutex SGCommandMgr::_instanceMutex; - -SGCommandMgr* -SGCommandMgr::instance() -{ - static std::auto_ptr mgr; - if (mgr.get()) - return mgr.get(); - - SGGuard lock(_instanceMutex); - if (mgr.get()) - return mgr.get(); - - mgr = std::auto_ptr(new SGCommandMgr); - return mgr.get(); -} - -void -SGCommandMgr::addCommand (const std::string &name, Command* command) -{ - if (_commands.find(name) != _commands.end()) - throw sg_exception("duplicate command name:" + name); - - _commands[name] = command; -} - -SGCommandMgr::Command* -SGCommandMgr::getCommand (const std::string &name) const -{ - const command_map::const_iterator it = _commands.find(name); - return (it != _commands.end() ? it->second : 0); -} - -string_list -SGCommandMgr::getCommandNames () const -{ - string_list names; - command_map::const_iterator it = _commands.begin(); - command_map::const_iterator last = _commands.end(); - while (it != last) { - names.push_back(it->first); - ++it; - } - return names; -} - -bool -SGCommandMgr::execute (const std::string &name, const SGPropertyNode * arg) const -{ - Command* command = getCommand(name); - if (command == 0) - return false; - - - try { - return (*command)(arg); - } catch (sg_exception& e) { - SG_LOG(SG_GENERAL, SG_ALERT, "command '" << name << "' failed with exception\n" - << "\tmessage:" << e.getMessage() << " (from " << e.getOrigin() << ")"); - return false; - } -} - -// end of commands.cxx diff --git a/simgear/structure/commands.hxx~ b/simgear/structure/commands.hxx~ deleted file mode 100644 index 503bdd1f..00000000 --- a/simgear/structure/commands.hxx~ +++ /dev/null @@ -1,171 +0,0 @@ -/** - * \file commands.hxx - * Interface definition for encapsulated commands. - * Started Spring 2001 by David Megginson, david@megginson.com - * This code is released into the Public Domain. - * - * $Id$ - */ - -#ifndef __COMMANDS_HXX -#define __COMMANDS_HXX - - -#include - -#include -#include - -#include -#include - -// forward decls -class SGPropertyNode; - -/** - * Manage commands. - * - *

This class allows the application to register and unregister - * commands, and provides shortcuts for executing them. Commands are - * simple functions that take a const pointer to an SGPropertyNode: - * the function may use the nodes children as parameters.

- * - * @author David Megginson, david@megginson.com - */ -class SGCommandMgr -{ -public: - /** - * Command functor object - */ - class Command - { - public: - virtual ~Command() { } - virtual bool operator()(const SGPropertyNode * arg) = 0; - }; - - - typedef bool (*command_t) (const SGPropertyNode * arg); - -private: - class FunctionCommand : public Command - { - public: - FunctionCommand( command_t fun ) - : f_(fun) {} - - virtual bool operator()(const SGPropertyNode * arg) { return (*f_)(arg); } - private: - command_t f_; - }; - - template< class ObjPtr, typename MemFn > - class MethodCommand : public Command - { - public: - MethodCommand( const ObjPtr& pObj, MemFn pMemFn ) : - pObj_(pObj), pMemFn_(pMemFn) {} - - virtual bool operator()(const SGPropertyNode * arg) - { - return ((*pObj_).*pMemFn_)(arg); - } - private: - ObjPtr pObj_; - MemFn pMemFn_; - }; - - /** - * Helper template functions. - */ - - template< class ObjPtr, typename MemFn > - Command* make_functor( const ObjPtr& pObj, MemFn pMemFn ) - { - return new MethodCommand(pObj, pMemFn ); - } - -public: - - - /** - * Destructor. - */ - virtual ~SGCommandMgr (); - - /** - * Implement the classical singleton. - */ - static SGCommandMgr* instance(); - - /** - * Register a new command with the manager. - * - * @param name The command name. Any existing command with - * the same name will silently be overwritten. - * @param command A pointer to a one-arg function returning - * a bool result. The argument is always a const pointer to - * an SGPropertyNode (which may contain multiple values). - */ - void addCommand(const std::string& name, command_t f) - { addCommandObject(name, new FunctionCommand(f); } - - void addCommandObject (const std::string &name, Command* command); - - template - void addCommand(const std::string& name, const OBJ& o, METHOD m) - { - addCommandObject(name, make_functor(o,m)); - } - - /** - * Look up an existing command. - * - * @param name The command name. - * @return A pointer to the command, or 0 if there is no registered - * command with the name specified. - */ - virtual Command* getCommand (const std::string &name) const; - - - /** - * Get a list of all existing command names. - * - * @return A (possibly empty) vector of the names of all registered - * commands. - */ - virtual string_list getCommandNames () const; - - - /** - * Execute a command. - * - * @param name The name of the command. - * @param arg A const pointer to an SGPropertyNode. The node - * may have a value and/or children, etc., so that it is possible - * to pass an arbitrarily complex data structure to a command. - * @return true if the command is present and executes successfully, - * false otherwise. - */ - virtual bool execute (const std::string &name, const SGPropertyNode * arg) const; - -protected: - /** - * Default constructor. - */ - SGCommandMgr (); - - -private: - - typedef std::map command_map; - command_map _commands; - - static SGMutex _instanceMutex; - -}; - -#endif // __COMMANDS_HXX - -// end of commands.hxx