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>
34 typedef std::map< std::string, std::string >
dict_t;
35 typedef std::pair< std::string, std::string >
pair_t;
40 for (
const pair_t pair : d)
42 if (not out.empty()) out +=
",";
43 out += pair.first +
"='" + pair.second +
"'";
50 std::vector< std::string > result;
52 boost::escaped_list_separator<char> separator(
"\\",
" ",
"'");
53 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
54 tokenizer_t tokens(args, separator);
56 for (std::string token : tokens)
57 result.push_back(token);
64 std::vector< std::string > result;
66 boost::escaped_list_separator<char> separator(
"\\",
",",
"'");
67 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
68 tokenizer_t tokens(params, separator);
70 for (std::string token : tokens)
71 result.push_back(token);
80 std::size_t pos = param.find(
'=');
81 if(pos != std::string::npos)
83 result.first = param.substr(0, pos);
84 result.second = param.substr(pos + 1);
100 for (std::string param : param_list)
103 std::string value = pair.second;
104 if (value.length() && value[0] ==
'\'' && value[ value.length() - 1 ] ==
'\'')
105 value = value.substr(1, value.length() - 1);
106 result[ pair.first ] = value;
116 return str.find(
"numchan=") == 0;
122 size_t max_nchan = 0;
123 size_t dev_nchan = 0;
126 for (std::string arg : arg_list)
128 if ( arg.find(
"numchan=" ) == 0 )
131 max_nchan = boost::lexical_cast<size_t>( pair.second );
135 arg_list.erase( std::remove_if(
143 for (std::string arg : arg_list)
146 if (dict.count(
"nchan"))
148 dev_nchan += boost::lexical_cast<size_t>( dict[
"nchan"] );
157 if ( max_nchan && dev_nchan && max_nchan != dev_nchan )
158 throw std::runtime_error(
"Wrong device arguments specified. Missing nchan?");
160 const size_t nchan = std::max<size_t>(dev_nchan, 1);
161 return gr::io_signature::make(nchan, nchan,
sizeof(gr_complex));
std::vector< std::string > args_to_vector(const std::string &args)
Definition: arg_helpers.h:48
std::vector< std::string > params_to_vector(const std::string ¶ms)
Definition: arg_helpers.h:62
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:95
std::pair< std::string, std::string > pair_t
Definition: arg_helpers.h:35
std::string dict_to_args_string(const dict_t &d)
Definition: arg_helpers.h:37
pair_t param_to_pair(const std::string ¶m)
Definition: arg_helpers.h:76
gr::io_signature::sptr args_to_io_signature(const std::string &args)
Definition: arg_helpers.h:120
Definition: arg_helpers.h:113
bool operator()(const std::string &str)
Definition: arg_helpers.h:114