aboutsummaryrefslogtreecommitdiff
path: root/src/CommandParser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/CommandParser.cc')
-rw-r--r--src/CommandParser.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/CommandParser.cc b/src/CommandParser.cc
index 6fcb771..1f8218e 100644
--- a/src/CommandParser.cc
+++ b/src/CommandParser.cc
@@ -32,6 +32,9 @@ using std::vector;
32using FbTk::StringUtil::removeFirstWhitespace; 32using FbTk::StringUtil::removeFirstWhitespace;
33using FbTk::StringUtil::toLower; 33using FbTk::StringUtil::toLower;
34 34
35
36CommandParser *CommandParser::s_singleton = 0;
37
35CommandFactory::CommandFactory() { 38CommandFactory::CommandFactory() {
36 39
37} 40}
@@ -39,15 +42,24 @@ CommandFactory::CommandFactory() {
39CommandFactory::~CommandFactory() { 42CommandFactory::~CommandFactory() {
40 // remove all associations with this factory 43 // remove all associations with this factory
41 CommandParser::instance().removeAssociation(*this); 44 CommandParser::instance().removeAssociation(*this);
45
42} 46}
43 47
44void CommandFactory::addCommand(const string &command_name) { 48void CommandFactory::addCommand(const string &command_name) {
45 CommandParser::instance().associateCommand(command_name, *this); 49 CommandParser::instance().associateCommand(command_name, *this);
46} 50}
47 51
52// ensure it is singleton
53CommandParser::CommandParser() {
54 if (s_singleton != 0)
55 throw std::string("CommandParser currently meant ot be singleton");
56}
57
48CommandParser &CommandParser::instance() { 58CommandParser &CommandParser::instance() {
49 static CommandParser singleton; 59 if (s_singleton == 0)
50 return singleton; 60 s_singleton = new CommandParser();
61
62 return *s_singleton;
51} 63}
52 64
53FbTk::Command *CommandParser::parseLine(const string &line) { 65FbTk::Command *CommandParser::parseLine(const string &line) {
@@ -105,4 +117,7 @@ void CommandParser::removeAssociation(CommandFactory &factory) {
105 m_commandfactorys.erase(commands.back()); 117 m_commandfactorys.erase(commands.back());
106 commands.pop_back(); 118 commands.pop_back();
107 } 119 }
120
121 if (m_commandfactorys.empty())
122 delete s_singleton;
108} 123}