From 771b5cebda250f2a6a65aa7788e9051c94974c2b Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 6 Jan 2011 15:38:56 -0800 Subject: uhd: integrated boost split or tokenizer into source files, remove string split from algorithms header --- host/include/uhd/utils/algorithm.hpp | 29 ++++++----------------------- host/lib/types/device_addr.cpp | 14 +++++--------- host/lib/usrp/subdev_spec.cpp | 12 +++++++++--- host/lib/usrp/usrp2/usrp2_impl.cpp | 7 ++++--- host/lib/utils/paths.cpp | 8 ++++++-- host/lib/utils/warning.cpp | 8 ++++++-- host/utils/uhd_usrp_probe.cpp | 5 +++-- 7 files changed, 39 insertions(+), 44 deletions(-) (limited to 'host') diff --git a/host/include/uhd/utils/algorithm.hpp b/host/include/uhd/utils/algorithm.hpp index 53c571e4e..ed0220a25 100644 --- a/host/include/uhd/utils/algorithm.hpp +++ b/host/include/uhd/utils/algorithm.hpp @@ -22,9 +22,6 @@ #include #include #include -#include -#include -#include /*! \file algorithm.hpp * Useful templated functions and classes that I like to pretend are part of stl. @@ -32,24 +29,6 @@ */ namespace std{ - /*! - * Split a string at the separation characters. - * \param string the string to split - * \param sep the separator characters - * \return a range of strings - */ - inline std::vector split_string( - const std::string &string, const std::string &sep = "\t " - ){ - std::vector strings; - if (not string.empty()) boost::split( - // do not split an empty string: - // let me tell you about the time when boost::split segfaulted... - strings, string, boost::is_any_of(sep) - ); - return strings; - } - /*! * A wrapper around std::copy that takes ranges instead of iterators. * @@ -164,8 +143,12 @@ namespace std{ * \param bound2 the upper or lower bound * \return the value clipped at the bounds */ - template inline T clip(T val, T bound1, T bound2){ - return std::min(std::max(val, std::min(bound1, bound2)), std::max(bound1, bound2)); + template inline T clip(const T &val, const T &bound1, const T &bound2){ + const T minimum = std::min(bound1, bound2); + if (val < minimum) return minimum; + const T maximum = std::max(bound1, bound2); + if (val > maximum) return maximum; + return val; } }//namespace std diff --git a/host/lib/types/device_addr.cpp b/host/lib/types/device_addr.cpp index 4fdce097b..14afaa24b 100644 --- a/host/lib/types/device_addr.cpp +++ b/host/lib/types/device_addr.cpp @@ -32,19 +32,15 @@ static std::string trim(const std::string &in){ return boost::algorithm::trim_copy(in); } -static boost::tokenizer > tokenize( - const std::string &input, const std::string &tok -){ - return boost::tokenizer >( - input, boost::char_separator(tok.c_str()) - ); -} +#define tokenizer(inp, sep) \ + boost::tokenizer > \ + (inp, boost::char_separator(sep.c_str())) device_addr_t::device_addr_t(const std::string &args){ - BOOST_FOREACH(const std::string &pair, tokenize(args, arg_delim)){ + BOOST_FOREACH(const std::string &pair, tokenizer(args, arg_delim)){ if (trim(pair) == "") continue; std::string key; - BOOST_FOREACH(const std::string &tok, tokenize(pair, pair_delim)){ + BOOST_FOREACH(const std::string &tok, tokenizer(pair, pair_delim)){ if (key.empty()) key = tok; else{ this->set(trim(key), trim(tok)); diff --git a/host/lib/usrp/subdev_spec.cpp b/host/lib/usrp/subdev_spec.cpp index 95d2cbb12..c905eab7d 100644 --- a/host/lib/usrp/subdev_spec.cpp +++ b/host/lib/usrp/subdev_spec.cpp @@ -16,15 +16,21 @@ // #include -#include +#include //for split +#include #include #include #include #include +#include using namespace uhd; using namespace uhd::usrp; +#define pair_tokenizer(inp) \ + boost::tokenizer > \ + (inp, boost::char_separator(" ")) + subdev_spec_pair_t::subdev_spec_pair_t( const std::string &db_name, const std::string &sd_name ): @@ -39,9 +45,9 @@ bool usrp::operator==(const subdev_spec_pair_t &lhs, const subdev_spec_pair_t &r } subdev_spec_t::subdev_spec_t(const std::string &markup){ - BOOST_FOREACH(const std::string &pair, std::split_string(markup)){ + BOOST_FOREACH(const std::string &pair, pair_tokenizer(markup)){ if (pair == "") continue; - std::vector db_sd = std::split_string(pair, ":"); + std::vector db_sd; boost::split(db_sd, pair, boost::is_any_of(":")); switch(db_sd.size()){ case 1: this->push_back(subdev_spec_pair_t("", db_sd.front())); break; case 2: this->push_back(subdev_spec_pair_t(db_sd.front(), db_sd.back())); break; diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index f910999d4..06ca61e13 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include //for split #include #include #include @@ -31,6 +31,7 @@ #include #include //htonl and ntohl #include +#include using namespace uhd; using namespace uhd::usrp; @@ -47,8 +48,8 @@ template std::string num2str(T num){ //! separate indexed device addresses into a vector of device addresses device_addrs_t sep_indexed_dev_addrs(const device_addr_t &dev_addr){ //------------ support old deprecated way and print warning -------- - if (dev_addr.has_key("addr")){ - std::vector addrs = std::split_string(dev_addr["addr"]); + if (dev_addr.has_key("addr") and not dev_addr["addr"].empty()){ + std::vector addrs; boost::split(addrs, dev_addr["addr"], boost::is_any_of(" ")); if (addrs.size() > 1){ device_addr_t fixed_dev_addr = dev_addr; fixed_dev_addr.pop("addr"); diff --git a/host/lib/utils/paths.cpp b/host/lib/utils/paths.cpp index 9e9525caf..f2037a38d 100644 --- a/host/lib/utils/paths.cpp +++ b/host/lib/utils/paths.cpp @@ -17,7 +17,7 @@ #include "constants.hpp" #include -#include +#include #include #include #include @@ -38,6 +38,10 @@ namespace fs = boost::filesystem; static const std::string env_path_sep = ":"; #endif /*UHD_PLATFORM_WIN32*/ +#define path_tokenizer(inp) \ + boost::tokenizer > \ + (inp, boost::char_separator(env_path_sep.c_str())) + /*********************************************************************** * Get a list of paths for an environment variable **********************************************************************/ @@ -60,7 +64,7 @@ static std::vector get_env_paths(const std::string &var_name){ //convert to filesystem path, filter blank paths std::vector paths; - BOOST_FOREACH(const std::string &path_string, std::split_string(var_value, env_path_sep)){ + BOOST_FOREACH(const std::string &path_string, path_tokenizer(var_value)){ if (path_string.empty()) continue; paths.push_back(fs::system_complete(path_string)); } diff --git a/host/lib/utils/warning.cpp b/host/lib/utils/warning.cpp index 05be7ae4d..09a12aba5 100644 --- a/host/lib/utils/warning.cpp +++ b/host/lib/utils/warning.cpp @@ -16,7 +16,7 @@ // #include -#include +#include #include #include #include @@ -27,6 +27,10 @@ using namespace uhd; +#define tokenizer(inp, sep) \ + boost::tokenizer > \ + (inp, boost::char_separator(sep)) + /*********************************************************************** * Registry implementation **********************************************************************/ @@ -52,7 +56,7 @@ void warning::post(const std::string &msg){ //format the warning message ss << std::endl << "Warning:" << std::endl; - BOOST_FOREACH(const std::string &line, std::split_string(msg, "\n")){ + BOOST_FOREACH(const std::string &line, tokenizer(msg, "\n")){ ss << " " << line << std::endl; } diff --git a/host/utils/uhd_usrp_probe.cpp b/host/utils/uhd_usrp_probe.cpp index 5cba7c362..8b28e8280 100644 --- a/host/utils/uhd_usrp_probe.cpp +++ b/host/utils/uhd_usrp_probe.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include //for split #include #include #include @@ -32,6 +32,7 @@ #include #include #include +#include namespace po = boost::program_options; using namespace uhd; @@ -44,7 +45,7 @@ static std::string make_border(const std::string &text){ std::stringstream ss; ss << boost::format(" _____________________________________________________") << std::endl; ss << boost::format(" /") << std::endl; - std::vector lines = std::split_string(text, "\n"); + std::vector lines; boost::split(lines, text, boost::is_any_of("\n")); while (lines.back() == "") lines.pop_back(); //strip trailing newlines if (lines.size()) lines[0] = " " + lines[0]; //indent the title line BOOST_FOREACH(const std::string &line, lines){ -- cgit v1.2.3