00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00030 #ifndef __CLAW_ARGUMENTS_HPP__
00031 #define __CLAW_ARGUMENTS_HPP__
00032
00033 #include <string>
00034 #include <map>
00035 #include <claw/ordered_set.hpp>
00036
00037 namespace claw
00038 {
00050 class arguments
00051 {
00052 public:
00053 arguments();
00054 arguments( int& argc, char** &argv );
00055 arguments( int& argc, char** &argv,
00056 const claw::math::ordered_set<std::string>& allowed );
00057
00058 void parse( int& argc, char** &argv );
00059 void parse( int& argc, char** &argv,
00060 const claw::math::ordered_set<std::string>& allowed );
00061
00062 bool has_value( const std::string& arg_name ) const;
00063
00064 const std::string& get_program_name() const;
00065
00066 bool get_bool( const std::string& arg_name ) const;
00067 int get_integer( const std::string& arg_name ) const;
00068 double get_real( const std::string& arg_name ) const;
00069 const std::string& get_string( const std::string& arg_name ) const;
00070
00071 void add_argument( const std::string& arg );
00072
00073 private:
00074 void split_argument( const std::string& arg, std::string& name,
00075 std::string& value ) const;
00076
00077 void remove_null_arguments( int& argc, char** &argv ) const;
00078
00079 private:
00081 std::string m_program_name;
00082
00084 claw::math::ordered_set<std::string> m_flags;
00085
00087 std::map<std::string, std::string> m_pairs;
00088 };
00089 }
00090
00091 #endif // __CLAW_ARGUMENTS_HPP__