Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

PLearnCommandRegistry.cc

Go to the documentation of this file.
00001 // -*- C++ -*- 00002 00003 // PLearnCommandRegistry.cc 00004 // Copyright (C) 2002 Pascal Vincent 00005 // 00006 // Redistribution and use in source and binary forms, with or without 00007 // modification, are permitted provided that the following conditions are met: 00008 // 00009 // 1. Redistributions of source code must retain the above copyright 00010 // notice, this list of conditions and the following disclaimer. 00011 // 00012 // 2. Redistributions in binary form must reproduce the above copyright 00013 // notice, this list of conditions and the following disclaimer in the 00014 // documentation and/or other materials provided with the distribution. 00015 // 00016 // 3. The name of the authors may not be used to endorse or promote 00017 // products derived from this software without specific prior written 00018 // permission. 00019 // 00020 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 00021 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00022 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 00023 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00024 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00025 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00026 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00027 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00028 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00029 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 // 00031 // This file is part of the PLearn library. For more information on the PLearn 00032 // library, go to the PLearn Web site at www.plearn.org 00033 00034 00035 /* ******************************************************* 00036 * $Id: PLearnCommandRegistry.cc,v 1.7 2004/02/20 21:11:40 chrish42 Exp $ 00037 * This file is part of the PLearn library. 00038 ******************************************************* */ 00039 00040 #include "PLearnCommandRegistry.h" 00041 #include <iostream> 00042 #include <vector> 00043 00044 namespace PLearn { 00045 using namespace std; 00046 00047 PLearnCommandRegistry::command_map& PLearnCommandRegistry::commands() 00048 { 00049 static PLearnCommandRegistry::command_map commands_; 00050 return commands_; 00051 } 00052 00053 00054 void PLearnCommandRegistry::do_register(PLearnCommand* command) 00055 { commands()[command->name] = command; } 00056 00057 bool PLearnCommandRegistry::is_registered(const string& commandname) 00058 { return commands().find(commandname)!=commands().end(); } 00059 00060 void PLearnCommandRegistry::print_command_summary(ostream& out) 00061 { 00062 command_map::iterator it = commands().begin(); 00063 command_map::iterator itend = commands().end(); 00064 while(it!=itend) 00065 { 00066 out << it->first << "\t: " << it->second->description << endl; 00067 ++it; 00068 } 00069 out << endl; 00070 } 00071 00073 void PLearnCommandRegistry::badcommand(const string& commandname) 00074 { 00075 cerr << "No '" << commandname << "' command available." << endl; 00076 cerr << "Available commands are: " << endl; 00077 print_command_summary(cerr); 00078 cerr << "You can get more help for any of these commands by invoking the help command" << endl; 00079 } 00080 00081 void PLearnCommandRegistry::run(const string& commandname, const vector<string>& args) 00082 { 00083 command_map::iterator it = commands().find(commandname); 00084 if(it==commands().end()) 00085 badcommand(commandname); 00086 else 00087 it->second->run(args); 00088 } 00089 00090 void PLearnCommandRegistry::help(const string& commandname, ostream& out) 00091 { 00092 command_map::iterator it = commands().find(commandname); 00093 if(it==commands().end()) 00094 badcommand(commandname); 00095 else 00096 { 00097 out << "*** Help for command '" << commandname << "' ***" << endl; 00098 out << it->second->description << endl; 00099 out << it->second->helpmsg << endl; 00100 } 00101 } 00102 00103 } // end of namespace PLearn 00104

Generated on Tue Aug 17 16:01:26 2004 for PLearn by doxygen 1.3.7