summaryrefslogtreecommitdiff
path: root/src/optparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/optparser.h')
-rw-r--r--src/optparser.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/optparser.h b/src/optparser.h
index ed32e45..acfb35d 100644
--- a/src/optparser.h
+++ b/src/optparser.h
@@ -6,6 +6,8 @@
6#include "bu/hash.h" 6#include "bu/hash.h"
7#include "bu/signals.h" 7#include "bu/signals.h"
8#include "bu/array.h" 8#include "bu/array.h"
9#include "bu/membuf.h"
10#include "bu/formatter.h"
9 11
10namespace Bu 12namespace Bu
11{ 13{
@@ -13,11 +15,51 @@ namespace Bu
13 class OptParser 15 class OptParser
14 { 16 {
15 public: 17 public:
18 class _ValueProxy
19 {
20 public:
21 _ValueProxy();
22 virtual ~_ValueProxy();
23
24 virtual void setValue( const Bu::FString & )=0;
25 virtual _ValueProxy *clone()=0;
26 };
27
28 template<typename ptype>
29 class ValueProxy : public _ValueProxy
30 {
31 public:
32 ValueProxy( ptype &v ) :
33 v( v )
34 {
35 }
36
37 virtual ~ValueProxy()
38 {
39 }
40
41 virtual void setValue( const Bu::FString &sVal )
42 {
43 Bu::MemBuf mb( sVal );
44 Bu::Formatter f( mb );
45 f >> v;
46 }
47
48 virtual _ValueProxy *clone()
49 {
50 return new ValueProxy<ptype>( v );
51 }
52
53 private:
54 ptype &v;
55 };
56
16 typedef Signal1<int, StrArray> OptionSignal; 57 typedef Signal1<int, StrArray> OptionSignal;
17 class Option 58 class Option
18 { 59 {
19 public: 60 public:
20 Option(); 61 Option();
62 Option( const Option &rSrc );
21 virtual ~Option(); 63 virtual ~Option();
22 64
23 char cOpt; 65 char cOpt;
@@ -25,6 +67,8 @@ namespace Bu
25 Bu::FString sHelp; 67 Bu::FString sHelp;
26 OptionSignal sUsed; 68 OptionSignal sUsed;
27 bool bShortHasParams; 69 bool bShortHasParams;
70 _ValueProxy *pProxy;
71 Bu::FString sOverride;
28 }; 72 };
29 73
30 public: 74 public:
@@ -34,6 +78,21 @@ namespace Bu
34 void parse( int argc, char **argv ); 78 void parse( int argc, char **argv );
35 79
36 void addOption( const Option &opt ); 80 void addOption( const Option &opt );
81
82 template<typename vtype>
83 void addOption( char cOpt, const Bu::FString &sOpt, vtype &var,
84 const Bu::FString &sHelp="", const Bu::FString &sOverride="" )
85 {
86 Option o;
87 o.cOpt = cOpt;
88 o.sOpt = sOpt;
89 o.pProxy = new ValueProxy<vtype>( var );
90 o.bShortHasParams = true;
91 o.sHelp = sHelp;
92 o.sOverride = sOverride;
93 addOption( o );
94 }
95
37 void addHelpOption( char c, const Bu::FString &s, const Bu::FString &sHelp ); 96 void addHelpOption( char c, const Bu::FString &s, const Bu::FString &sHelp );
38 97
39 int optHelp( StrArray aParams ); 98 int optHelp( StrArray aParams );