21 #ifndef OSMOSDR_ARG_HELPERS_H
22 #define OSMOSDR_ARG_HELPERS_H
28 #include <gnuradio/io_signature.h>
30 #include <boost/lexical_cast.hpp>
31 #include <boost/tokenizer.hpp>
32 #include <boost/foreach.hpp>
34 typedef std::map< std::string, std::string >
dict_t;
35 typedef std::pair< std::string, std::string >
pair_t;
39 std::vector< std::string > result;
41 boost::escaped_list_separator<char> separator(
"\\",
" ",
"'");
42 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
43 tokenizer_t tokens(args, separator);
45 BOOST_FOREACH(std::string token, tokens)
46 result.push_back(token);
53 std::vector< std::string > result;
55 boost::escaped_list_separator<char> separator(
"\\",
",",
"'");
56 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
57 tokenizer_t tokens(params, separator);
59 BOOST_FOREACH(std::string token, tokens)
60 result.push_back(token);
69 std::size_t pos = param.find(
'=');
70 if(pos != std::string::npos)
72 result.first = param.substr(0, pos);
73 result.second = param.substr(pos + 1);
89 BOOST_FOREACH(std::string param, param_list)
92 std::string value = pair.second;
93 if (value.length() && value[0] ==
'\'' && value[ value.length() - 1 ] ==
'\'')
94 value = value.substr(1, value.length() - 1);
95 result[ pair.first ] = value;
105 return str.find(
"numchan=") == 0;
111 size_t max_nchan = 0;
112 size_t dev_nchan = 0;
115 BOOST_FOREACH( std::string arg, arg_list )
117 if ( arg.find(
"numchan=" ) == 0 )
120 max_nchan = boost::lexical_cast<
size_t>( pair.second );
124 arg_list.erase( std::remove_if(
132 BOOST_FOREACH( std::string arg, arg_list )
135 if (dict.count(
"nchan"))
137 dev_nchan += boost::lexical_cast<
size_t>( dict[
"nchan"] );
146 if ( max_nchan && dev_nchan && max_nchan != dev_nchan )
147 throw std::runtime_error(
"Wrong device arguments specified. Missing nchan?");
149 const size_t nchan = std::max<size_t>(dev_nchan, 1);
150 return gr::io_signature::make(nchan, nchan,
sizeof(gr_complex));
153 #endif // OSMOSDR_ARG_HELPERS_H
pair_t param_to_pair(const std::string ¶m)
Definition: arg_helpers.h:65
bool operator()(const std::string &str)
Definition: arg_helpers.h:103
gr::io_signature::sptr args_to_io_signature(const std::string &args)
Definition: arg_helpers.h:109
std::vector< std::string > params_to_vector(const std::string ¶ms)
Definition: arg_helpers.h:51
std::vector< std::string > args_to_vector(const std::string &args)
Definition: arg_helpers.h:37
Definition: arg_helpers.h:101
std::pair< std::string, std::string > pair_t
Definition: arg_helpers.h:35
std::map< std::string, std::string > dict_t
Definition: arg_helpers.h:34
dict_t params_to_dict(const std::string ¶ms)
Definition: arg_helpers.h:84