⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmdoptns.h

📁 GNU Common C++ is a very portable and highly optimized class framework for writing C++ applications
💻 H
字号:
// Copyright (C) 2001-2005 Gianni Mariani//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//// As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however    // invalidate any other reasons why the executable file might be covered by// the GNU General Public License. //// This exception applies only to the code released under the name GNU// Common C++.  If you copy code from other releases into a copy of GNU // Common C++, as the General Public License permits, the exception does// not apply to the code that you add in this way.  To avoid misleading// anyone as to the status of such modified files, you must delete// this exception notice from them.//// If you write modifications of your own for GNU Common C++, it is your choice// whether to permit this exception to apply to your modifications.// If you do not wish that, delete this exception notice.///** * @file cmdoptns.h * @short Command line option parsing interface. **/#ifndef	CCXX_CMDOPTNS_H_#define	CCXX_CMDOPTNS_H_#ifndef CCXX_STRING_H_#include <cc++/string.h>#endif#ifdef	CCXX_NAMESPACESnamespace ost {#endifclass CommandOption;class CommandOptionParse;/** * This defines a linked list head pointer for all the command line * options that use the default list.  It will most likely * be used in most cases without being explicitly referenced in application * code.  It is a default value of various method's parameters. * */extern __EXPORT CommandOption * defaultCommandOptionList;/** * CommandOption is the base class for all command line options.  Command * line options can be defined statically and used when constructing * a command line parser onject using makeCommandOptionParse.  This serves * only as a base class to CommandOptionWithArg, CommandOptionRest or * CommandOptionNoArg which can also be used to derive more complex * classes or even entire applications. * * @author Gianni Mariani <gianni@mariani.ws> */class __EXPORT CommandOption {public:	/**	 * Long option name, these will be preceded with "--" on the command line.	 * e.g. --file foo.x	 */	const char	* optionName;	/**	 * option letter, these will be preceded with "-" on the command line.	 * e.g. -f foo.x	 */	const char	* optionLetter;	/**	 * A short description of the option for Usage messages.	 * e.g. Usage: mycommand : blah	 *			-f, --file \<DESCRIPTION here\>	 */	const char	* description;	/**	 * OptionType is for denoting what type of option this is, with an	 * arg, without an arg or the trailing args.	 * @short Option type	 */	enum OptionType {		/**		 * This option is associated with a value		 */		hasArg,		/**		 * This option is a flag only		 */		noArg,		/**		 * Remaining of the command line arguments		 */		trailing,		/**		 * Collect values that are not a value to an option		 */		collect	};	/**	 * This command option's OptionType.	 */	OptionType	  optionType;	// HasArg, NoArg or Trailing	/**	 * True if this parameter is required.  If the parameter is not supplied	 * and required is true, an error will be flagged in the option processor.	 */	bool		  required;		// Option is required - fail without it	/**	 * This next CommandOption in this list of options or nil if no more	 * options exist.	 */	CommandOption	* next;			/**	 * A virtual destructor just in case.	 */	virtual ~CommandOption();	/**	 * CommandOption contructor.  Note the default values for required and	 * ppNext.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inOptionType	the type of this option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOption(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		OptionType		  inOptionType,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);	/**	 * foundOption is called by the CommandOptionParse object during the parsing	 * of the command line options.	 *	 * @param cop		pointer to the command option parser	 * @param value		the value of this option	 */	virtual	void foundOption( CommandOptionParse * cop, const char * value = 0 );		/**	 * foundOption is called by the CommandOptionParse object during the parsing	 * of the command line options.	 *	 * @param cop		pointer to the command option parser	 * @param value		an array of values of this option	 * @param num		number of values in the array	 */	virtual	void foundOption( CommandOptionParse * cop, const char ** value, int num );		/**	 * Once parsing of command line options is complete, this method is called.	 * This can be used to perform last minute checks on the options collected.	 *	 * @param cop		pointer to the command option parser	 */	virtual	void parseDone( CommandOptionParse * cop );		/**	 * Once CommandOption objects have completed parsing and there are no	 * errors they may have some specific tasks to perform.  PerformTask	 * must return.	 *	 * @param cop		pointer to the command option parser	 */	virtual	void performTask( CommandOptionParse * cop );	/**	 * For fields with the required flag set, this method is used to determine	 * if the Option has satisfied it's required status.  The default methods	 * simply returns true if any values have been found.  This could be specialized	 * to return true based on some other criteria.	 */	virtual bool hasValue();	};/** * Derived class of CommandOption for options that have a value associated with them. * Classes CommandOptionRest and CommandOptionArg derive from this class. */class __EXPORT CommandOptionWithArg : public CommandOption {public:	/**	 * Array of list of values collected for this option.	 */	const char ** values;	/**	 * Number of values in the values array.	 */	int			  numValue;	/**	 * CommandOptionWithArg contructor.  Note the default values for required and	 * ppNext.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inOptionType	the type of this option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOptionWithArg(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		OptionType		  inOptionType,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);	virtual ~CommandOptionWithArg();		virtual	void foundOption( CommandOptionParse * cop, const char * value = 0 );	virtual	void foundOption( CommandOptionParse * cop, const char ** value, int num );	virtual bool hasValue();};	/** * Class for options with an argument e.g. --option value . */class __EXPORT CommandOptionArg : public CommandOptionWithArg {public:	/**	 * CommandOptionArg contructor.  This sets the optionType for this	 * object to HasArg.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOptionArg(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);	virtual ~CommandOptionArg();};	/** * It only makes sense to have a single one of these set and it is * exclusive with CommandOptionCollect. It is the option that takes the rest * of the command line options that are not part of any other options. * e.g. "strace -ofile command arg1 arg2". The "command arg1 arg2" part is * placed in objects of this class. *  * @short CommandOption to take the rest of the command line */class __EXPORT CommandOptionRest : public CommandOptionWithArg {public:	/**	 * CommandOptionRest contructor.  This sets the optionType for this	 * object to Trailing.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOptionRest(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);};	/** * It only makes sense to have a single one of these set and it is also * exclusive with CommandOptionRest.  This makes parameter collecting * behave line the Unix "cat" command. * * @short CommandOption to collect parameters that are not options. */class __EXPORT CommandOptionCollect : public CommandOptionWithArg {public:	/**	 * CommandOptionRest contructor.  This sets the optionType for this	 * object to Collect.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOptionCollect(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);};	/** * CommandOption type for flags. */class __EXPORT CommandOptionNoArg : public CommandOption {public:	/**	 * The number of times this value has been set.	 */	int			  numSet;	// The number of times this argument is set	/**	 * CommandOptionArg contructor.  This sets the optionType for this	 * object to NoArg.	 *	 * @param inOptionName	long option name	 * @param inOptionLetter	short letter name	 * @param inDescription	short description of the option	 * @param inRequired		true if option is required	 * @param ppNext			the linked list header	 */	CommandOptionNoArg(		const char		* inOptionName,		const char		* inOptionLetter,		const char		* inDescription,		bool			  inRequired = false,		CommandOption  ** ppNext = & defaultCommandOptionList	);	/**	 * CommandOptionNoArg::foundOption will evpect a nil "value" passed in.	 */	virtual	void foundOption( CommandOptionParse * cop, const char * value = 0 );};/** * This is the CommandOptionParse interface class.  To implement this object you can * call makeCommandOptionParse();  This will instantiate a dynamically allocated * version of this class and parse the command line for the list of command options * that are passed in. * * @author Gianni Mariani <gianni@mariani.ws> */class __EXPORT CommandOptionParse {public:	/**	 * Virtual destructor needed so that the object may be correctly deleted.	 */	virtual ~CommandOptionParse() = 0;	/**	 * Get the value of the error flag set if the parser encountered errors.	 */	virtual bool argsHaveError() = 0;	/**	 * Return a string of text describing the list of errors encountered.	 */	virtual const char * printErrors() = 0;	/**	 * Return a string that contains the usage description of this list of paramaters.	 */	virtual const char * printUsage() = 0;	/**	 * Register an error with this parser.  This string will be appended to the	 * errors already buffered in this object.	 */	virtual void registerError( const char * errMsg ) = 0;	/**	 * The method should be invoked by the main code once it has determined that	 * the application should be started.	 */	virtual void performTask() = 0;};/** * makeCommandOptionParse will create an implementation of a CommandOptionParse * object.  This particular implementation is a wrapper around getopt_long(3). * That interface unfortunatly does not provide enough information to give * the best error messages with malformed input.  If the implementation changes * there is a good chance that the binary interface will remain the same. * */__EXPORT CommandOptionParse * makeCommandOptionParse(	int				   argc,	char			** argv,	char			 * comment,	CommandOption	 * options = defaultCommandOptionList);#ifdef	CCXX_NAMESPACES}#endif#endif/** EMACS ** * Local variables: * mode: c++ * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -