args.h 1.54 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
#pragma once

#include <string>
#include <map>
#include <cstdlib>
#include <iostream>

class arguments
{
	public: // functions

		// Constructor and destructor
Laurent Belcour's avatar
Laurent Belcour committed
13 14 15
		arguments()
		{
		} ;
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
		arguments(int argc, char** const argv)
		{
			std::string key ;
			std::string data ;
			for(int i=0; i<argc; ++i)
			{
				std::string temp(argv[i]) ;
				std::string data ;

				if(temp.compare(0, 2, "--") == 0)
				{
					key = temp.substr(2, temp.size()-2) ;
					if(i+1 < argc) 
					{
						std::string next(argv[i+1]) ;
						if(next.compare(0, 2, "--") != 0)
						{
							data = next ;
						}
					}
				}
				_map.insert(std::pair<std::string, std::string>(key, data)) ;
			}
		} ;
		~arguments() { } ;

		// Access elements
		bool is_defined(const std::string& key) const
		{
			if(_map.count(key) > 0)
			{
				return true ;
			}
			else
			{
				return false ;
			}
		} ;
		std::string operator[](const std::string& key) const
		{
			if(_map.count(key) > 0)
			{
				return _map.find(key)->second ;
			}
			else
			{
				std::cerr << "Underfined request to key : \"" << key << "\"" << std::endl ;
				return std::string() ;
			}
		} ;
66
		float get_float(const std::string& key, float default_value = 0.0f) const
67
		{
68 69
			if(_map.count(key) > 0)
				return atof(_map.at(key).c_str()) ;
70
			else
71
				return default_value ;
72
		} ;
73
		int get_int(const std::string& key, int default_value = 0) const
74
		{
75 76
			if(_map.count(key) > 0)
				return atoi(_map.at(key).c_str()) ;
77
			else
78
				return default_value ;
79 80 81 82 83 84 85
		} ;

	private: // data

		std::map<std::string, std::string> _map ;

} ;