mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10694 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- CLICommand.h - Classes used to represent commands --------*- C++ -*-===//
 | |
| // 
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file was developed by the LLVM research group and is distributed under
 | |
| // the University of Illinois Open Source License. See LICENSE.TXT for details.
 | |
| // 
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file defines a small class hierarchy used to represent the various types
 | |
| // of commands in the CLI debugger front-end.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef CLICOMMAND_H
 | |
| #define CLICOMMAND_H
 | |
| 
 | |
| #include <string>
 | |
| #include <vector>
 | |
| #include <cassert>
 | |
| 
 | |
| namespace llvm {
 | |
|   class CLIDebugger;
 | |
| 
 | |
|   /// CLICommand - Base class of the hierarchy, used to provide the abstract
 | |
|   /// interface common to all commands.
 | |
|   ///
 | |
|   class CLICommand {
 | |
|     /// ShortHelp, LongHelp - The short and long helps strings printed for the
 | |
|     /// command.  The ShortHelp string should be a single line of text without a
 | |
|     /// newline.  The LongHelp string should be a full description with
 | |
|     /// terminating newline.
 | |
|     std::string ShortHelp, LongHelp;
 | |
| 
 | |
|     /// RefCount - This contains the number of entries in the CLIDebugger
 | |
|     /// CommandTable that points to this command.
 | |
|     unsigned RefCount;
 | |
| 
 | |
|     /// OptionNames - This contains a list of names for the option.  Keeping
 | |
|     /// track of this is done just to make the help output more helpful.
 | |
|     ///
 | |
|     std::vector<std::string> OptionNames;
 | |
|   public:
 | |
|     CLICommand(const std::string &SH, const std::string &LH)
 | |
|       : ShortHelp(SH), LongHelp(LH), RefCount(0) {}
 | |
| 
 | |
|     virtual ~CLICommand() {}
 | |
| 
 | |
|     /// addRef/dropRef - Implement a simple reference counting scheme to make
 | |
|     /// sure we delete commands that are no longer used.
 | |
|     void addRef() { ++RefCount; }
 | |
|     void dropRef() {
 | |
|       if (--RefCount == 0) delete this;
 | |
|     }
 | |
| 
 | |
|     /// getPrimaryOptionName - Return the first name the option was added under.
 | |
|     /// This is the name we report for the option in the help output.
 | |
|     std::string getPrimaryOptionName() const {
 | |
|       return OptionNames.empty() ? "" : OptionNames[0];
 | |
|     }
 | |
| 
 | |
|     /// getOptionName - Return all of the names the option is registered as.
 | |
|     ///
 | |
|     const std::vector<std::string> &getOptionNames() const {
 | |
|       return OptionNames;
 | |
|     }
 | |
| 
 | |
|     /// addOptionName - Add a name that this option is known as.
 | |
|     ///
 | |
|     void addOptionName(const std::string &Name) {
 | |
|       OptionNames.push_back(Name);
 | |
|     }
 | |
| 
 | |
|     /// removeOptionName - Eliminate one of the names for this option.
 | |
|     ///
 | |
|     void removeOptionName(const std::string &Name) {
 | |
|       unsigned i = 0; 
 | |
|       for (; OptionNames[i] != Name; ++i)
 | |
|         assert(i+1 < OptionNames.size() && "Didn't find option name!");
 | |
|       OptionNames.erase(OptionNames.begin()+i);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /// getShortHelp - Return the short help string for this command.
 | |
|     ///
 | |
|     const std::string &getShortHelp() { return ShortHelp; }
 | |
| 
 | |
|     /// getLongHelp - Return the long help string for this command, if it
 | |
|     /// exists.
 | |
|     const std::string &getLongHelp() { return LongHelp; }
 | |
| 
 | |
|     virtual void runCommand(CLIDebugger &D, std::string &Arguments) = 0;
 | |
|   };
 | |
| 
 | |
|   /// BuiltinCLICommand - This class represents commands that are built directly
 | |
|   /// into the debugger.
 | |
|   class BuiltinCLICommand : public CLICommand {
 | |
|     // Impl - Pointer to the method that implements the command
 | |
|     void (CLIDebugger::*Impl)(std::string&);
 | |
|   public:
 | |
|     BuiltinCLICommand(const std::string &ShortHelp, const std::string &LongHelp,
 | |
|                       void (CLIDebugger::*impl)(std::string&))
 | |
|       : CLICommand(ShortHelp, LongHelp), Impl(impl) {}
 | |
|     
 | |
|     void runCommand(CLIDebugger &D, std::string &Arguments) {
 | |
|       (D.*Impl)(Arguments);
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| #endif
 |