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>
35 typedef std::map< std::string, std::string >
dict_t;
36 typedef std::pair< std::string, std::string >
pair_t;
41 BOOST_FOREACH(
const pair_t pair, d)
43 if (not out.empty()) out +=
",";
44 out += pair.first +
"='" + pair.second +
"'";
51 std::vector< std::string > result;
53 boost::escaped_list_separator<char> separator(
"\\",
" ",
"'");
54 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
55 tokenizer_t tokens(args, separator);
57 BOOST_FOREACH(std::string token, tokens)
58 result.push_back(token);
65 std::vector< std::string > result;
67 boost::escaped_list_separator<char> separator(
"\\",
",",
"'");
68 typedef boost::tokenizer< boost::escaped_list_separator<char> > tokenizer_t;
69 tokenizer_t tokens(params, separator);
71 BOOST_FOREACH(std::string token, tokens)
72 result.push_back(token);
81 std::size_t pos = param.find(
'=');
82 if(pos != std::string::npos)
84 result.first = param.substr(0, pos);
85 result.second = param.substr(pos + 1);
101 BOOST_FOREACH(std::string param, param_list)
104 std::string value = pair.second;
105 if (value.length() && value[0] ==
'\'' && value[ value.length() - 1 ] ==
'\'')
106 value = value.substr(1, value.length() - 1);
107 result[ pair.first ] = value;
117 return str.find(
"numchan=") == 0;
123 size_t max_nchan = 0;
124 size_t dev_nchan = 0;
127 BOOST_FOREACH( std::string arg, arg_list )
129 if ( arg.find(
"numchan=" ) == 0 )
132 max_nchan = boost::lexical_cast<size_t>( pair.second );
136 arg_list.erase( std::remove_if(
144 BOOST_FOREACH( std::string arg, arg_list )
147 if (dict.count(
"nchan"))
149 dev_nchan += boost::lexical_cast<size_t>( dict[
"nchan"] );
158 if ( max_nchan && dev_nchan && max_nchan != dev_nchan )
159 throw std::runtime_error(
"Wrong device arguments specified. Missing nchan?");
161 const size_t nchan = std::max<size_t>(dev_nchan, 1);
162 return gr::io_signature::make(nchan, nchan,
sizeof(gr_complex));
165 #endif // OSMOSDR_ARG_HELPERS_H