164 lines
5.2 KiB
C++
164 lines
5.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: KWSys - Kitware System Library
|
|
Module: $RCSfile$
|
|
|
|
Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#ifndef @KWSYS_NAMESPACE@_CommandLineArguments_hxx
|
|
#define @KWSYS_NAMESPACE@_CommandLineArguments_hxx
|
|
|
|
#include <@KWSYS_NAMESPACE@/Configure.h>
|
|
#include <@KWSYS_NAMESPACE@/Configure.hxx>
|
|
|
|
#include <@KWSYS_NAMESPACE@/stl/string>
|
|
|
|
/* Define this macro temporarily to keep the code readable. */
|
|
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
|
|
# define kwsys_stl @KWSYS_NAMESPACE@_stl
|
|
#endif
|
|
|
|
namespace @KWSYS_NAMESPACE@
|
|
{
|
|
|
|
class CommandLineArgumentsInternal;
|
|
|
|
/** \class CommandLineArguments
|
|
* \brief Command line arguments processing code.
|
|
*
|
|
* Find specified arguments with optional options and execute specified methods
|
|
* or set given variables.
|
|
*/
|
|
|
|
class @KWSYS_NAMESPACE@_EXPORT CommandLineArguments
|
|
{
|
|
public:
|
|
CommandLineArguments();
|
|
~CommandLineArguments();
|
|
|
|
/**
|
|
* Various argument types.
|
|
*/
|
|
enum ArgumentTypeEnum {
|
|
NO_ARGUMENT, // The option takes no argument --foo
|
|
CONCAT_ARGUMENT,// The option takes argument after no space --foobar
|
|
SPACE_ARGUMENT, // The option takes argument after space --foo bar
|
|
EQUAL_ARGUMENT // The option takes argument after equal --foo=bar
|
|
};
|
|
|
|
/**
|
|
* Various string types.
|
|
*/
|
|
enum VariableTypeEnum {
|
|
NO_VARIABLE_TYPE = 0, // The variable is not specified
|
|
INT_TYPE, // The variable is integer (int)
|
|
BOOL_TYPE, // The vairable is boolean (bool)
|
|
DOUBLE_TYPE, // The variable is float (double)
|
|
STRING_TYPE, // The variable is string (char*)
|
|
STL_STRING_TYPE // The variable is string (char*)
|
|
};
|
|
|
|
/**
|
|
* Prototypes for callbacks for callback interface.
|
|
*/
|
|
typedef int(*CallbackType)(const char* argument, const char* value,
|
|
void* call_data);
|
|
typedef int(*ErrorCallbackType)(const char* argument, void* client_data);
|
|
|
|
/**
|
|
* Initialize internal data structures. This should be called before parsing.
|
|
*/
|
|
void Initialize(int argc, const char* const argv[]);
|
|
void Initialize(int argc, char* argv[]);
|
|
|
|
/**
|
|
* Initialize internal data structure and pass arguments one by one. This is
|
|
* convinience method for use from scripting languages where argc and argv
|
|
* are not available.
|
|
*/
|
|
void Initialize();
|
|
void ProcessArgument(const char* arg);
|
|
|
|
/**
|
|
* This method will parse arguments and call apropriate methods.
|
|
*/
|
|
int Parse();
|
|
|
|
/**
|
|
* This method will add a callback for a specific argument. The arguments to
|
|
* it are argument, argument type, callback method, and call data. The
|
|
* argument help specifies the help string used with this option. The
|
|
* callback and call_data can be skipped.
|
|
*/
|
|
void AddCallback(const char* argument, ArgumentTypeEnum type, CallbackType callback,
|
|
void* call_data, const char* help);
|
|
|
|
/**
|
|
* Add handler for argument which is going to set the variable to the
|
|
* specified value.
|
|
*/
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, VariableTypeEnum vtype, void* variable, const char* help);
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, bool* variable, const char* help);
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, int* variable, const char* help);
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, double* variable, const char* help);
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, char** variable, const char* help);
|
|
void AddArgument(const char* argument, ArgumentTypeEnum type, kwsys_stl::string* variable, const char* help);
|
|
void AddBooleanArgument(const char* argument, bool* variable, const char* help);
|
|
void AddBooleanArgument(const char* argument, int* variable, const char* help);
|
|
|
|
/**
|
|
* Set the callbacks for error handling.
|
|
*/
|
|
void SetClientData(void* client_data);
|
|
void SetUnknownArgumentCallback(ErrorCallbackType callback);
|
|
|
|
/**
|
|
* Get remaining arguments. It allocates space for argv, so you have to call
|
|
* delete[] on it.
|
|
*/
|
|
void GetRemainingArguments(int* argc, char*** argv);
|
|
|
|
/**
|
|
* Return string containing help. If the argument is specified, only return
|
|
* help for that argument.
|
|
*/
|
|
const char* GetHelp() { return this->Help.c_str(); }
|
|
const char* GetHelp(const char* arg);
|
|
|
|
/**
|
|
* Get / Set the help line length. Default length is 80.
|
|
*/
|
|
void SetLineLength(unsigned int);
|
|
unsigned int GetLineLength();
|
|
|
|
protected:
|
|
|
|
void GenerateHelp();
|
|
|
|
typedef CommandLineArgumentsInternal Internal;
|
|
Internal* Internals;
|
|
kwsys_stl::string Help;
|
|
|
|
unsigned int LineLength;
|
|
};
|
|
|
|
} // namespace @KWSYS_NAMESPACE@
|
|
|
|
/* Undefine temporary macro. */
|
|
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
|
|
# undef kwsys_stl
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|