1 /*
2 * SObjectizer-5
3 */
4
5 #pragma once
6
7 #include <cstring>
8 #include <sstream>
9 #include <stdexcept>
10
11 inline bool
is_arg(const char * cmd_line_arg,const char * v1,const char * v2)12 is_arg(
13 const char * cmd_line_arg,
14 const char * v1,
15 const char * v2 )
16 {
17 return (0 == std::strcmp( cmd_line_arg, v1 ) ||
18 0 == std::strcmp( cmd_line_arg, v2 ));
19 }
20
21 template< class T >
22 void
arg_to_value(T & receiver,const char * cmd_line_arg_value,const char * name,const char * description)23 arg_to_value( T & receiver,
24 const char * cmd_line_arg_value,
25 const char * name,
26 const char * description )
27 {
28 std::stringstream ss;
29 ss << cmd_line_arg_value;
30 ss.seekg(0);
31
32 T r;
33 ss >> r;
34
35 if( !ss || !ss.eof() )
36 throw std::runtime_error(
37 std::string( "unable to parse value for argument '" ) + name +
38 "' (" + description + "): " +
39 cmd_line_arg_value );
40
41 receiver = r;
42 }
43
44 template< class T >
45 void
mandatory_arg_to_value(T & receiver,char ** arg,char ** last_arg,const char * name,const char * description)46 mandatory_arg_to_value(
47 T & receiver,
48 char ** arg, char ** last_arg,
49 const char * name,
50 const char * description )
51 {
52 if( arg == last_arg )
53 throw std::runtime_error(
54 std::string( "argument '" ) + name + "' requires value (" +
55 description + ")" );
56
57 return arg_to_value( receiver, *arg, name, description );
58 }
59
60