/* libzz
*
* This program is distributed under the GNU General Public License, version 2.
* A copy of this license is included with this source.
*
* Copyright 2000-2006, Toni Thomsson <toni@tonjac.org>
*/
#ifndef zz_arguments_h
#define zz_arguments_h
#include <zz_string.h>
#include <zz_exception.h>
#include <map>
#include <zz_export.h>
#include <zz_parameter_map.h>
#ifdef _WIN32
using namespace std;
#pragma warning(disable: 4786) // Debugsymbols truncated
#pragma warning(disable: 4251) // DLL-interface missing for private map members
#endif
/**
Argument parser
@author Toni Thomsson, toni@tonjac.org
*/
class ZZ_API CzzArguments : public CzzParameterMap
{
public:
/**
Parses a traditional C-argument-list
@param argc Number of arguments
@param argv Pointer to a vector with the arguments
@param delmiter Charachter used as a argument switch
@param minargs Minimum number of expected arguments
*/
CzzArguments( int argc,
char** argv,
char delmiter,
int minargs );
/**
Copy constructor
@param args Object to be copied
*/
CzzArguments( CzzArguments& args );
/**
Default constructor
*/
CzzArguments( void );
virtual ~CzzArguments();
/**
Number of arguments in the list
*/
int Count( void ) { return m_Count; };
/**
Get argument by position
@param pos 0 based index
*/
CzzString Get( int pos );
/**
Get argument by name
@param name Name
*/
CzzString Get( const CzzString& name );
/**
Same as Get
*/
CzzString operator[]( int pos );
/**
Same as Get
*/
CzzString operator[]( const CzzString& name );
/** Delmiter char */
char getDelmiter( void ) { return m_Delmiter; };
/** Minimum number of expected arguments */
int getMinArgs( void ) { return m_MinArgs; };
/** Argument map (pos-index) */
map<int, CzzString > getPosList( void ) { return m_ArgsByPos; };
/** Argument map (name-index) */
map<CzzString, CzzString > getNameList( void ) { return m_ArgsByName; };
private:
int m_Count;
char m_Delmiter;
int m_MinArgs;
map<int, CzzString > m_ArgsByPos;
map<CzzString, CzzString > m_ArgsByName;
};
#endif // zz_arguments_h