1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
// This file is part of ff3d - http://www.freefem.org/ff3d
// Copyright (C) 2001, 2002, 2003 Stphane Del Pino
// 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, 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.
// $Id: CommandLineParser.hpp,v 1.4 2004/12/29 17:01:57 delpinux Exp $
#ifndef COMMAND_LINE_PARSER_HPP
#define COMMAND_LINE_PARSER_HPP
#include <string>
#include <vector>
#include <map>
class CommandLineOption;
/**
* @file CommandLineParser.hpp
* @author Stephane Del Pino
* @date Mon Dec 27 12:05:38 2004
*
* @brief command line parser
* @note this is done by hand for portability reasons
*
*/
class CommandLineParser
{
private:
int __numberOfArguments; /**< number of given arguments */
char** __arguments; /**< argument string */
enum OptionType {
help,
moreHelp,
version,
verbosity,
noWindow
};
typedef std::vector<CommandLineOption*> OptionsList;
OptionsList __options; /**< available options */
typedef std::map<std::string, int>
OptionsLexerType; /**< associates name to option number */
OptionsLexerType __shortOptionsLexer; /**< Short options lexer */
OptionsLexerType __longOptionsLexer; /**< Long options lexer */
int __verbosity; /**< ff3d's verbosity */
std::string __filename; /**< name of the file to treat */
/**
* Treats the current option
*
* @param optionNumber the identifier of the option
* @param argumentNumber the positon of the option in the argument list
*/
void __treatOption(const int& optionNumber, int& argumentNumber);
/**
* Proceeds to effective parsing of the command line
*
*/
void __parse();
public:
/**
* Prints help message
*
*/
void showHelp() const;
/**
* Prints more-help message
*
*/
void showMoreHelp() const;
/**
* Prints version message
*
*/
void showVersion() const;
/**
* Prints ff3d's usage
*
*/
void showUsage() const;
/**
* Prints ff3d's howto report bug
*
*/
void showBugReport() const;
/**
* Prints ff3d's description
*
*/
void showDescription() const;
/**
* Prints ff3d's licence
*
*/
void showLicence() const;
/**
* Prints ff3d's credits
*
*/
void showCredits() const;
/**
* Checks file name presence
*
* @return true if a filename was specified
*/
bool hasFilename() const
{
return (__filename.size() > 0);
}
/**
* Returns the filename to treat
*
* @return __filename
*/
const std::string& filename() const
{
return __filename;
}
/**
* Read-only access to the verbosity
*
* @return __verbosity
*/
const int& verbosityLevel() const
{
return __verbosity;
}
/**
* Constructor
*
* @param argc number of command line arguments
* @param argv arguments table
*/
CommandLineParser(int argc,
char** argv);
/**
* Destructor
*
*/
~CommandLineParser();
};
#endif // COMMAND_LINE_PARSER_HPP
|