9 #include <boost/tokenizer.hpp>
10 #include <boost/lexical_cast.hpp>
17 for (string::iterator it = rval.begin(); it != rval.end(); ++it)
24 for (string::iterator it = rval.begin(); it != rval.end(); ++it)
30 typedef boost::char_separator<std::string::value_type>
Separator;
37 for (
unsigned int a = 0;
a < num;
a++) {
46 if (!result) result = forward.
Get(
"UNKNOWN" );
47 return result ? *result : 0;
51 const string *result = reverse.
Get(
tostring( val ) );
52 assert( 0 != result );
58 for (; *atts != NULL; atts += 2)
59 push_back(
Attribute( atts[0], atts[1] ) );
65 for (string::iterator
i = retval.begin();
i != retval.end();
i++)
73 && ( ( *str.begin() ) ==
't' || ( *str.begin() ) ==
'T' || ( *str.begin() ) ==
'y' || ( *str.begin() ) ==
'Y'
74 || ( *str.begin() ) ==
'1' ) )
82 std::stringstream ss( str );
90 std::stringstream ss( str );
98 va_start(arguments, maxTokens);
102 for (Tokenizer::iterator it = tokens.begin(); maxTokens > 0 && it != tokens.end(); ++it, --maxTokens) {
103 double *output = va_arg(arguments,
double *);
104 *output = boost::lexical_cast<
double>(*it);
112 va_start(arguments, maxTokens);
116 for (Tokenizer::iterator it = tokens.begin(); maxTokens > 0 && it != tokens.end(); ++it, --maxTokens) {
117 float *output = va_arg(arguments,
float *);
118 *output = boost::lexical_cast<
float>(*it);
127 std::stringstream ss( str );
131 string::size_type
parse_option_find(
const string &str,
const string &opt,
const string &sep,
const string &vsep )
134 string::size_type pos = 0;
135 string::size_type optlen = opt.length();
136 string::size_type strlen = str.length();
137 string allsep = sep+vsep;
138 if ( (optlen == 0) || (strlen == 0) )
141 while ( !found && (pos != string::npos) && ( ( pos = str.find( opt, pos+(ini ? 0 : 1) ) ) != string::npos ) ) {
143 found = ( ( (pos == 0) || (sep.find( str[pos-1] ) != string::npos) )
144 && ( (pos+optlen >= strlen) || (allsep.find( str[pos+optlen] ) != string::npos) ) );
145 if (!found) pos = str.find_first_of( sep, pos+optlen );
147 return found ? pos : string::npos;
153 string parse_option_value(
const string &str,
const string &opt,
const string &defvalue,
const string &sep,
const string &vsep )
156 string::size_type vpos = str.find_first_of( vsep, pos+opt.length() );
158 if (pos != string::npos && vpos != string::npos) {
159 string::size_type vend = str.find_first_of( sep, vpos+1 );
160 value = str.substr( vpos+1, ( (vend != string::npos) ? vend-vpos-1 : string::npos ) );
161 }
else if (pos != string::npos) {
171 #define ESCAPE_CASE( e, c, skip ) \
173 if (rp && str[rp-1] == '\\') rv[ip++] = c; \
177 string::size_type rp, ip, n = str.length();
180 for (rp = ip = 0; rp < n; ++rp) {