diff options
| author | Josh Blum <josh@joshknows.com> | 2010-03-15 17:43:10 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-03-15 17:43:10 -0700 | 
| commit | fc40ff2f1327d01c72c4d7dbc07a14e473251981 (patch) | |
| tree | ad7f1ed847d284c3982157e1c43a13773a6aca9c | |
| parent | e4997af8453980922b469e5d3b66a7b26910dad3 (diff) | |
| download | uhd-fc40ff2f1327d01c72c4d7dbc07a14e473251981.tar.gz uhd-fc40ff2f1327d01c72c4d7dbc07a14e473251981.tar.bz2 uhd-fc40ff2f1327d01c72c4d7dbc07a14e473251981.zip | |
Replaced uses of wax:cast with the templated as method (like in boost program options).
| -rw-r--r-- | host/include/uhd/gain_handler.hpp | 2 | ||||
| -rw-r--r-- | host/include/uhd/props.hpp | 2 | ||||
| -rw-r--r-- | host/include/uhd/wax.hpp | 43 | ||||
| -rw-r--r-- | host/lib/gain_handler.cpp | 6 | ||||
| -rw-r--r-- | host/lib/simple_device.cpp | 54 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/basic.cpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/dboard_impl.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/dsp_impl.cpp | 24 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/mboard_impl.cpp | 26 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/wax.cpp | 6 | ||||
| -rw-r--r-- | host/test/gain_handler_test.cpp | 12 | ||||
| -rw-r--r-- | host/test/wax_test.cpp | 15 | 
13 files changed, 99 insertions, 113 deletions
| diff --git a/host/include/uhd/gain_handler.hpp b/host/include/uhd/gain_handler.hpp index 2d3f8a3f4..a71d63c84 100644 --- a/host/include/uhd/gain_handler.hpp +++ b/host/include/uhd/gain_handler.hpp @@ -74,7 +74,7 @@ public:       */      template <class T> static bool is_equal(const wax::obj &a, const wax::obj &b){          try{ -            return wax::cast<T>(a) == wax::cast<T>(b); +            return a.as<T>() == b.as<T>();          }          catch(const wax::bad_cast &){              return false; diff --git a/host/include/uhd/props.hpp b/host/include/uhd/props.hpp index f2ba1769f..0dddba647 100644 --- a/host/include/uhd/props.hpp +++ b/host/include/uhd/props.hpp @@ -57,7 +57,7 @@ namespace uhd{       */      inline named_prop_t extract_named_prop(const wax::obj &key, const std::string &name = ""){          if (key.type() == typeid(named_prop_t)){ -            return wax::cast<named_prop_t>(key); +            return key.as<named_prop_t>();          }          return named_prop_t(key, name);      } diff --git a/host/include/uhd/wax.hpp b/host/include/uhd/wax.hpp index 4fd54ba14..0291a06b7 100644 --- a/host/include/uhd/wax.hpp +++ b/host/include/uhd/wax.hpp @@ -19,32 +19,35 @@  #define INCLUDED_WAX_HPP  #include <boost/any.hpp> -#include <iostream>  /*!   * WAX - it's a metaphor!   * - * The WAX framework allows object to have generic/anyobj properties. + * The WAX framework allows an object to have generic/anyobj properties.   * These properties can be addressed through generic/anyobj identifiers. - * A property of a WAX object may even be another WAX object.   * - * When a property is a WAX object, the returned value must be an obj pointer. - * A WAX object provides two objs of pointers: obj::ptr and obj::sptr. - * The choice of pointer vs smart pointer depends on the owner of the memory. + * The WAX object itself is an anytype container much like boost::any. + * To retrieve the value of the appropriate type, use my_obj.as<type>().   *   * Proprties may be referenced though the [] overloaded operator.   * The [] operator returns a special proxy that allows for assigment.   * Also, the [] operators may be chained as in the folowing examples: - *   my_obj[prop1][prop2][prop3] = value - *   value = my_obj[prop1][prop2][prop3] + *   my_obj[prop1][prop2][prop3] = value; + *   value = my_obj[prop1][prop2][prop3].as<type>();   * - * Any value returned from an access operation is of wax::obj. - * To use this value, it must be cast with wax::cast<new_obj>(value). + * Property nesting occurs when a WAX object gets another object's link. + * This special link is obtained through a call to my_obj.get_link().   */  namespace wax{      /*! +     * The wax::bad cast will be thrown when +     * cast is called with the wrong typeid. +     */ +    typedef boost::bad_any_cast bad_cast; + +    /*!       * WAX object base class:       *       * A wax obj has two major purposes: @@ -126,7 +129,7 @@ namespace wax{          /*!           * Cast this obj into the desired type. -         * Usage myobj.as<type>() +         * Usage: myobj.as<type>()           *           * \return an object of the desired type           * \throw wax::bad_cast when the cast fails @@ -154,24 +157,6 @@ namespace wax{      }; -    /*! -     * The wax::bad cast will be thrown when -     * cast is called with the wrong typeid. -     */ -    typedef boost::bad_any_cast bad_cast; - -    /*! -     * Cast a wax::obj into the desired obj. -     * Usage wax::cast<new_obj>(my_value). -     * -     * \param val the obj to cast -     * \return an object of the desired type -     * \throw wax::bad_cast when the cast fails -     */ -    template<class T> T cast(const obj &val){ -        return val.as<T>(); -    } -  } //namespace wax  #endif /* INCLUDED_WAX_HPP */ diff --git a/host/lib/gain_handler.cpp b/host/lib/gain_handler.cpp index 7eb87558c..847bc0528 100644 --- a/host/lib/gain_handler.cpp +++ b/host/lib/gain_handler.cpp @@ -48,7 +48,7 @@ private:      gain_t get_overall_gain_val(void);      gain_range_t get_overall_gain_range(void);      template <class T> T get_named_prop(const wax::obj &prop, const std::string &name){ -        return wax::cast<T>(_link[named_prop_t(prop, name)]); +        return _link[named_prop_t(prop, name)].as<T>();      }  }; @@ -85,7 +85,7 @@ gain_handler_impl::~gain_handler_impl(void){  }  prop_names_t gain_handler_impl::get_gain_names(void){ -    return wax::cast<prop_names_t>(_link[_props.names]); +    return _link[_props.names].as<prop_names_t>();  }  gain_t gain_handler_impl::get_overall_gain_val(void){ @@ -145,7 +145,7 @@ bool gain_handler_impl::intercept_set(const wax::obj &key_, const wax::obj &val)      //not a gain value key... dont handle      if (not _is_equal(key, _props.value)) return false; -    gain_t gain_val = wax::cast<gain_t>(val); +    gain_t gain_val = val.as<gain_t>();      //not a wildcard... dont handle (but check name and range)      if (name != ""){ diff --git a/host/lib/simple_device.cpp b/host/lib/simple_device.cpp index ac83ffaed..62a38cb79 100644 --- a/host/lib/simple_device.cpp +++ b/host/lib/simple_device.cpp @@ -42,15 +42,15 @@ static tune_result_t tune(      bool is_tx  ){      wax::obj subdev_freq_proxy = subdev[SUBDEV_PROP_FREQ]; -    bool subdev_quadrature = wax::cast<bool>(subdev[SUBDEV_PROP_QUADRATURE]); -    bool subdev_spectrum_inverted = wax::cast<bool>(subdev[SUBDEV_PROP_SPECTRUM_INVERTED]); +    bool subdev_quadrature = subdev[SUBDEV_PROP_QUADRATURE].as<bool>(); +    bool subdev_spectrum_inverted = subdev[SUBDEV_PROP_SPECTRUM_INVERTED].as<bool>();      wax::obj dxc_freq_proxy = dxc[std::string("freq")]; -    double dxc_sample_rate = wax::cast<double>(dxc[std::string("rate")]); +    double dxc_sample_rate = dxc[std::string("rate")].as<double>();      // Ask the d'board to tune as closely as it can to target_freq+lo_offset      double target_inter_freq = target_freq + lo_offset;      subdev_freq_proxy = target_inter_freq; -    double actual_inter_freq = wax::cast<double>(subdev_freq_proxy); +    double actual_inter_freq = subdev_freq_proxy.as<double>();      // Calculate the DDC setting that will downconvert the baseband from the      // daughterboard to our target frequency. @@ -77,7 +77,7 @@ static tune_result_t tune(      target_dxc_freq *= (is_tx)? -1.0 : +1.0;      dxc_freq_proxy = target_dxc_freq; -    double actual_dxc_freq = wax::cast<double>(dxc_freq_proxy); +    double actual_dxc_freq = dxc_freq_proxy.as<double>();      //return some kind of tune result tuple/struct      tune_result_t tune_result; @@ -117,8 +117,8 @@ device_addr_t args_to_device_addr(const std::string &args){  static std::vector<double> get_xx_rates(wax::obj decerps, wax::obj rate){      std::vector<double> rates; -    BOOST_FOREACH(size_t decerp, wax::cast<std::vector<size_t> >(decerps)){ -        rates.push_back(wax::cast<double>(rate)/decerp); +    BOOST_FOREACH(size_t decerp, decerps.as<std::vector<size_t> >()){ +        rates.push_back(rate.as<double>()/decerp);      }      return rates;  } @@ -146,7 +146,7 @@ public:      }      std::string get_name(void){ -        return wax::cast<std::string>(_mboard[MBOARD_PROP_NAME]); +        return _mboard[MBOARD_PROP_NAME].as<std::string>();      }      /******************************************************************* @@ -157,21 +157,21 @@ public:      }      bool get_streaming(void){ -        return wax::cast<bool>(_rx_ddc[std::string("enabled")]); +        return _rx_ddc[std::string("enabled")].as<bool>();      }      /*******************************************************************       * RX methods       ******************************************************************/      void set_rx_rate(double rate){ -        double samp_rate = wax::cast<double>(_rx_ddc[std::string("rate")]); +        double samp_rate = _rx_ddc[std::string("rate")].as<double>();          assert_has(get_rx_rates(), rate, "simple device rx rate");          _rx_ddc[std::string("decim")] = size_t(samp_rate/rate);      }      double get_rx_rate(void){ -        double samp_rate = wax::cast<double>(_rx_ddc[std::string("rate")]); -        size_t decim = wax::cast<size_t>(_rx_ddc[std::string("decim")]); +        double samp_rate = _rx_ddc[std::string("rate")].as<double>(); +        size_t decim = _rx_ddc[std::string("decim")].as<size_t>();          return samp_rate/decim;      } @@ -182,7 +182,7 @@ public:      tune_result_t set_rx_freq(double target_freq){          double lo_offset = 0.0;          //if the local oscillator will be in the passband, use an offset -        if (wax::cast<bool>(_rx_subdev[SUBDEV_PROP_LO_INTERFERES])){ +        if (_rx_subdev[SUBDEV_PROP_LO_INTERFERES].as<bool>()){              lo_offset = get_rx_rate()*2.0;          }          return tune(target_freq, lo_offset, _rx_subdev, _rx_ddc, false/* not tx */); @@ -191,7 +191,7 @@ public:      std::vector<double> get_rx_freq_range(void){          std::vector<double> range(2);          boost::tie(range[0], range[1]) = \ -            wax::cast<freq_range_t>(_rx_subdev[SUBDEV_PROP_FREQ_RANGE]); +            _rx_subdev[SUBDEV_PROP_FREQ_RANGE].as<freq_range_t>();          return range;      } @@ -200,13 +200,13 @@ public:      }      float get_rx_gain(void){ -        return wax::cast<gain_t>(_rx_subdev[SUBDEV_PROP_GAIN]); +        return _rx_subdev[SUBDEV_PROP_GAIN].as<gain_t>();      }      std::vector<float> get_rx_gain_range(void){          std::vector<float> range(3);          boost::tie(range[0], range[1], range[2]) = \ -            wax::cast<gain_range_t>(_rx_subdev[SUBDEV_PROP_GAIN_RANGE]); +            _rx_subdev[SUBDEV_PROP_GAIN_RANGE].as<gain_range_t>();          return range;      } @@ -215,25 +215,25 @@ public:      }      std::string get_rx_antenna(void){ -        return wax::cast<std::string>(_rx_subdev[SUBDEV_PROP_ANTENNA]); +        return _rx_subdev[SUBDEV_PROP_ANTENNA].as<std::string>();      }      std::vector<std::string> get_rx_antennas(void){ -        return wax::cast<std::vector<std::string> >(_rx_subdev[SUBDEV_PROP_ANTENNA_NAMES]); +        return _rx_subdev[SUBDEV_PROP_ANTENNA_NAMES].as<std::vector<std::string> >();      }      /*******************************************************************       * TX methods       ******************************************************************/      void set_tx_rate(double rate){ -        double samp_rate = wax::cast<double>(_tx_duc[std::string("rate")]); +        double samp_rate = _tx_duc[std::string("rate")].as<double>();          assert_has(get_tx_rates(), rate, "simple device tx rate");          _tx_duc[std::string("interp")] = size_t(samp_rate/rate);      }      double get_tx_rate(void){ -        double samp_rate = wax::cast<double>(_tx_duc[std::string("rate")]); -        size_t interp = wax::cast<size_t>(_tx_duc[std::string("interp")]); +        double samp_rate = _tx_duc[std::string("rate")].as<double>(); +        size_t interp = _tx_duc[std::string("interp")].as<size_t>();          return samp_rate/interp;      } @@ -244,7 +244,7 @@ public:      tune_result_t set_tx_freq(double target_freq){          double lo_offset = 0.0;          //if the local oscillator will be in the passband, use an offset -        if (wax::cast<bool>(_tx_subdev[SUBDEV_PROP_LO_INTERFERES])){ +        if (_tx_subdev[SUBDEV_PROP_LO_INTERFERES].as<bool>()){              lo_offset = get_tx_rate()*2.0;          }          return tune(target_freq, lo_offset, _tx_subdev, _tx_duc, true/* is tx */); @@ -253,7 +253,7 @@ public:      std::vector<double> get_tx_freq_range(void){          std::vector<double> range(2);          boost::tie(range[0], range[1]) = \ -            wax::cast<freq_range_t>(_tx_subdev[SUBDEV_PROP_FREQ_RANGE]); +            _tx_subdev[SUBDEV_PROP_FREQ_RANGE].as<freq_range_t>();          return range;      } @@ -262,13 +262,13 @@ public:      }      float get_tx_gain(void){ -        return wax::cast<gain_t>(_tx_subdev[SUBDEV_PROP_GAIN]); +        return _tx_subdev[SUBDEV_PROP_GAIN].as<gain_t>();      }      std::vector<float> get_tx_gain_range(void){          std::vector<float> range(3);          boost::tie(range[0], range[1], range[2]) = \ -            wax::cast<gain_range_t>(_tx_subdev[SUBDEV_PROP_GAIN_RANGE]); +            _tx_subdev[SUBDEV_PROP_GAIN_RANGE].as<gain_range_t>();          return range;      } @@ -277,11 +277,11 @@ public:      }      std::string get_tx_antenna(void){ -        return wax::cast<std::string>(_tx_subdev[SUBDEV_PROP_ANTENNA]); +        return _tx_subdev[SUBDEV_PROP_ANTENNA].as<std::string>();      }      std::vector<std::string> get_tx_antennas(void){ -        return wax::cast<std::vector<std::string> >(_tx_subdev[SUBDEV_PROP_ANTENNA_NAMES]); +        return _tx_subdev[SUBDEV_PROP_ANTENNA_NAMES].as<std::vector<std::string> >();      }  private: diff --git a/host/lib/usrp/dboard/basic.cpp b/host/lib/usrp/dboard/basic.cpp index e719950e8..095b77ce1 100644 --- a/host/lib/usrp/dboard/basic.cpp +++ b/host/lib/usrp/dboard/basic.cpp @@ -98,7 +98,7 @@ void basic_rx::rx_get(const wax::obj &key_, wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<subdev_prop_t>(key)){ +    switch(key.as<subdev_prop_t>()){      case SUBDEV_PROP_NAME:          val = std::string(str(boost::format("%s:%s")              % dboard_id::to_string(get_rx_id()) @@ -159,14 +159,14 @@ void basic_rx::rx_set(const wax::obj &key_, const wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<subdev_prop_t>(key)){ +    switch(key.as<subdev_prop_t>()){      case SUBDEV_PROP_GAIN: -        ASSERT_THROW(wax::cast<gain_t>(val) == gain_t(0)); +        ASSERT_THROW(val.as<gain_t>() == gain_t(0));          return;      case SUBDEV_PROP_ANTENNA: -        ASSERT_THROW(wax::cast<std::string>(val) == std::string("")); +        ASSERT_THROW(val.as<std::string>() == std::string(""));          return;      case SUBDEV_PROP_ENABLED: @@ -207,7 +207,7 @@ void basic_tx::tx_get(const wax::obj &key_, wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<subdev_prop_t>(key)){ +    switch(key.as<subdev_prop_t>()){      case SUBDEV_PROP_NAME:          val = dboard_id::to_string(get_tx_id());          return; @@ -265,14 +265,14 @@ void basic_tx::tx_set(const wax::obj &key_, const wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<subdev_prop_t>(key)){ +    switch(key.as<subdev_prop_t>()){      case SUBDEV_PROP_GAIN: -        ASSERT_THROW(wax::cast<gain_t>(val) == gain_t(0)); +        ASSERT_THROW(val.as<gain_t>() == gain_t(0));          return;      case SUBDEV_PROP_ANTENNA: -        ASSERT_THROW(wax::cast<std::string>(val) == std::string("")); +        ASSERT_THROW(val.as<std::string>() == std::string(""));          return;      case SUBDEV_PROP_ENABLED: diff --git a/host/lib/usrp/usrp2/dboard_impl.cpp b/host/lib/usrp/usrp2/dboard_impl.cpp index da05c3241..6d957436e 100644 --- a/host/lib/usrp/usrp2/dboard_impl.cpp +++ b/host/lib/usrp/usrp2/dboard_impl.cpp @@ -71,7 +71,7 @@ void usrp2_impl::rx_dboard_get(const wax::obj &key_, wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<dboard_prop_t>(key)){ +    switch(key.as<dboard_prop_t>()){      case DBOARD_PROP_NAME:          val = std::string("usrp2 dboard (rx unit)");          return; @@ -101,7 +101,7 @@ void usrp2_impl::tx_dboard_get(const wax::obj &key_, wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<dboard_prop_t>(key)){ +    switch(key.as<dboard_prop_t>()){      case DBOARD_PROP_NAME:          val = std::string("usrp2 dboard (tx unit)");          return; diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp index cb7f58ec8..7520c1757 100644 --- a/host/lib/usrp/usrp2/dsp_impl.cpp +++ b/host/lib/usrp/usrp2/dsp_impl.cpp @@ -102,7 +102,7 @@ void usrp2_impl::update_ddc_enabled(void){  void usrp2_impl::ddc_get(const wax::obj &key, wax::obj &val){      //handle the case where the key is an expected dsp property      if (key.type() == typeid(dsp_prop_t)){ -        switch(wax::cast<dsp_prop_t>(key)){ +        switch(key.as<dsp_prop_t>()){          case DSP_PROP_NAME:              val = std::string("usrp2 ddc0");              return; @@ -123,7 +123,7 @@ void usrp2_impl::ddc_get(const wax::obj &key, wax::obj &val){      }      //handle string-based properties specific to this dsp -    std::string key_name = wax::cast<std::string>(key); +    std::string key_name = key.as<std::string>();      if (key_name == "rate"){          val = get_master_clock_freq();          return; @@ -152,9 +152,9 @@ void usrp2_impl::ddc_get(const wax::obj &key, wax::obj &val){  void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){      //handle string-based properties specific to this dsp -    std::string key_name = wax::cast<std::string>(key); +    std::string key_name = key.as<std::string>();      if (key_name == "decim"){ -        size_t new_decim = wax::cast<size_t>(val); +        size_t new_decim = val.as<size_t>();          assert_has(              _allowed_decim_and_interp_rates,              new_decim, "usrp2 decimation" @@ -164,7 +164,7 @@ void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){          return;      }      else if (key_name == "freq"){ -        freq_t new_freq = wax::cast<freq_t>(val); +        freq_t new_freq = val.as<freq_t>();          ASSERT_THROW(new_freq <= get_master_clock_freq()/2.0);          ASSERT_THROW(new_freq >= -get_master_clock_freq()/2.0);          _ddc_freq = new_freq; //shadow @@ -172,13 +172,13 @@ void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){          return;      }      else if (key_name == "enabled"){ -        bool new_enabled = wax::cast<bool>(val); +        bool new_enabled = val.as<bool>();          _ddc_enabled = new_enabled; //shadow          update_ddc_enabled();          return;      }      else if (key_name == "stream_at"){ -        time_spec_t new_stream_at = wax::cast<time_spec_t>(val); +        time_spec_t new_stream_at = val.as<time_spec_t>();          _ddc_stream_at = new_stream_at; //shadow          //update_ddc_enabled(); //dont update from here          return; @@ -236,7 +236,7 @@ void usrp2_impl::update_duc_config(void){  void usrp2_impl::duc_get(const wax::obj &key, wax::obj &val){      //handle the case where the key is an expected dsp property      if (key.type() == typeid(dsp_prop_t)){ -        switch(wax::cast<dsp_prop_t>(key)){ +        switch(key.as<dsp_prop_t>()){          case DSP_PROP_NAME:              val = std::string("usrp2 duc0");              return; @@ -255,7 +255,7 @@ void usrp2_impl::duc_get(const wax::obj &key, wax::obj &val){      }      //handle string-based properties specific to this dsp -    std::string key_name = wax::cast<std::string>(key); +    std::string key_name = key.as<std::string>();      if (key_name == "rate"){          val = get_master_clock_freq();          return; @@ -280,9 +280,9 @@ void usrp2_impl::duc_get(const wax::obj &key, wax::obj &val){  void usrp2_impl::duc_set(const wax::obj &key, const wax::obj &val){      //handle string-based properties specific to this dsp -    std::string key_name = wax::cast<std::string>(key); +    std::string key_name = key.as<std::string>();      if (key_name == "interp"){ -        size_t new_interp = wax::cast<size_t>(val); +        size_t new_interp = val.as<size_t>();          assert_has(              _allowed_decim_and_interp_rates,              new_interp, "usrp2 interpolation" @@ -292,7 +292,7 @@ void usrp2_impl::duc_set(const wax::obj &key, const wax::obj &val){          return;      }      else if (key_name == "freq"){ -        freq_t new_freq = wax::cast<freq_t>(val); +        freq_t new_freq = val.as<freq_t>();          ASSERT_THROW(new_freq <= get_master_clock_freq()/2.0);          ASSERT_THROW(new_freq >= -get_master_clock_freq()/2.0);          _duc_freq = new_freq; //shadow diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp index b66de8262..4b15c7f3e 100644 --- a/host/lib/usrp/usrp2/mboard_impl.cpp +++ b/host/lib/usrp/usrp2/mboard_impl.cpp @@ -91,7 +91,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){      //handle the other props      if (key.type() == typeid(std::string)){ -        if (wax::cast<std::string>(key) == "mac-addr"){ +        if (key.as<std::string>() == "mac-addr"){              //setup the out data              usrp2_ctrl_data_t out_data;              out_data.id = htonl(USRP2_CTRL_ID_GIVE_ME_YOUR_MAC_ADDR_BRO); @@ -105,7 +105,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){              return;          } -        if (wax::cast<std::string>(key) == "ip-addr"){ +        if (key.as<std::string>() == "ip-addr"){              //setup the out data              usrp2_ctrl_data_t out_data;              out_data.id = htonl(USRP2_CTRL_ID_GIVE_ME_YOUR_IP_ADDR_BRO); @@ -121,7 +121,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){      }      //handle the get request conditioned on the key -    switch(wax::cast<mboard_prop_t>(key)){ +    switch(key.as<mboard_prop_t>()){      case MBOARD_PROP_NAME:          val = std::string("usrp2 mboard");          return; @@ -208,11 +208,11 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){  void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){      //handle the other props      if (key.type() == typeid(std::string)){ -        if (wax::cast<std::string>(key) == "mac-addr"){ +        if (key.as<std::string>() == "mac-addr"){              //setup the out data              usrp2_ctrl_data_t out_data;              out_data.id = htonl(USRP2_CTRL_ID_HERE_IS_A_NEW_MAC_ADDR_BRO); -            mac_addr_t mac_addr(wax::cast<std::string>(val)); +            mac_addr_t mac_addr(val.as<std::string>());              std::memcpy(out_data.data.mac_addr, &mac_addr, sizeof(mac_addr_t));              //send and recv @@ -221,11 +221,11 @@ void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){              return;          } -        if (wax::cast<std::string>(key) == "ip-addr"){ +        if (key.as<std::string>() == "ip-addr"){              //setup the out data              usrp2_ctrl_data_t out_data;              out_data.id = htonl(USRP2_CTRL_ID_HERE_IS_A_NEW_IP_ADDR_BRO); -            out_data.data.ip_addr = htonl(boost::asio::ip::address_v4::from_string(wax::cast<std::string>(val)).to_ulong()); +            out_data.data.ip_addr = htonl(boost::asio::ip::address_v4::from_string(val.as<std::string>()).to_ulong());              //send and recv              usrp2_ctrl_data_t in_data = ctrl_send_and_recv(out_data); @@ -235,10 +235,10 @@ void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){      }      //handle the get request conditioned on the key -    switch(wax::cast<mboard_prop_t>(key)){ +    switch(key.as<mboard_prop_t>()){      case MBOARD_PROP_PPS_SOURCE:{ -            std::string name = wax::cast<std::string>(val); +            std::string name = val.as<std::string>();              assert_has(_pps_source_dict.get_keys(), name, "usrp2 pps source");              _pps_source = name; //shadow              update_clock_config(); @@ -246,7 +246,7 @@ void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){          return;      case MBOARD_PROP_PPS_POLARITY:{ -            std::string name = wax::cast<std::string>(val); +            std::string name = val.as<std::string>();              assert_has(_pps_polarity_dict.get_keys(), name, "usrp2 pps polarity");              _pps_polarity = name; //shadow              update_clock_config(); @@ -254,7 +254,7 @@ void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){          return;      case MBOARD_PROP_REF_SOURCE:{ -            std::string name = wax::cast<std::string>(val); +            std::string name = val.as<std::string>();              assert_has(_ref_source_dict.get_keys(), name, "usrp2 reference source");              _ref_source = name; //shadow              update_clock_config(); @@ -262,12 +262,12 @@ void usrp2_impl::mboard_set(const wax::obj &key, const wax::obj &val){          return;      case MBOARD_PROP_TIME_NOW:{ -        set_time_spec(wax::cast<time_spec_t>(val), true); +        set_time_spec(val.as<time_spec_t>(), true);          return;      }      case MBOARD_PROP_TIME_NEXT_PPS:{ -        set_time_spec(wax::cast<time_spec_t>(val), false); +        set_time_spec(val.as<time_spec_t>(), false);          return;      } diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index 850a738d4..22b7e109f 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -184,7 +184,7 @@ void usrp2_impl::get(const wax::obj &key_, wax::obj &val){      boost::tie(key, name) = extract_named_prop(key_);      //handle the get request conditioned on the key -    switch(wax::cast<device_prop_t>(key)){ +    switch(key.as<device_prop_t>()){      case DEVICE_PROP_NAME:          val = std::string("usrp2 device");          return; diff --git a/host/lib/wax.cpp b/host/lib/wax.cpp index 0348d9a66..0e2e82a3a 100644 --- a/host/lib/wax.cpp +++ b/host/lib/wax.cpp @@ -39,7 +39,7 @@ public:      wax::obj & operator()(void) const{          //recursively resolve link args to get at original pointer          if (_obj_ptr->type() == typeid(link_args_t)){ -            return wax::cast<link_args_t>(*_obj_ptr)(); +            return _obj_ptr->as<link_args_t>()();          }          return *const_cast<wax::obj *>(_obj_ptr);      } @@ -61,7 +61,7 @@ public:          _obj_link = obj_ptr->get_link();      }      wax::obj & operator()(void) const{ -        return wax::cast<link_args_t>(_obj_link)(); +        return _obj_link.as<link_args_t>()();      }      const wax::obj & key(void) const{          return _key; @@ -94,7 +94,7 @@ wax::obj wax::obj::operator[](const obj &key){          obj val = resolve();          //check if its a special link and call          if (val.type() == typeid(link_args_t)){ -            return cast<link_args_t>(val)()[key]; +            return val.as<link_args_t>()()[key];          }          //unknown obj          throw std::runtime_error("cannot use [] on non wax::obj link"); diff --git a/host/test/gain_handler_test.cpp b/host/test/gain_handler_test.cpp index 51497b741..a4005c0de 100644 --- a/host/test/gain_handler_test.cpp +++ b/host/test/gain_handler_test.cpp @@ -59,7 +59,7 @@ private:          boost::tie(key, name) = extract_named_prop(key_);          //handle the get request conditioned on the key -        switch(wax::cast<prop_t>(key)){ +        switch(key.as<prop_t>()){          case PROP_GAIN_VALUE:              val = _gain_values[name];              return; @@ -81,9 +81,9 @@ private:          boost::tie(key, name) = extract_named_prop(key_);          //handle the get request conditioned on the key -        switch(wax::cast<prop_t>(key)){ +        switch(key.as<prop_t>()){          case PROP_GAIN_VALUE: -            _gain_values[name] = wax::cast<gain_t>(val); +            _gain_values[name] = val.as<gain_t>();              return;          case PROP_GAIN_RANGE: @@ -103,14 +103,14 @@ BOOST_AUTO_TEST_CASE(test_gain_handler){      gainful_obj go0;      BOOST_CHECK_THROW( -        wax::cast<gain_t>(go0[named_prop_t(PROP_GAIN_VALUE, "fail")]), +        go0[named_prop_t(PROP_GAIN_VALUE, "fail")].as<gain_t>(),          std::exception      );      std::cout << "verifying the overall min, max, step" << std::endl;      gain_t gain_min, gain_max, gain_step;      boost::tie(gain_min, gain_max, gain_step) = \ -        wax::cast<gain_range_t>(go0[PROP_GAIN_RANGE]); +        go0[PROP_GAIN_RANGE].as<gain_range_t>();      BOOST_CHECK_EQUAL(gain_min, gain_t(-10));      BOOST_CHECK_EQUAL(gain_max, gain_t(100));      BOOST_CHECK_EQUAL(gain_step, gain_t(1.5)); @@ -118,5 +118,5 @@ BOOST_AUTO_TEST_CASE(test_gain_handler){      std::cout << "verifying the overall gain" << std::endl;      go0[named_prop_t(PROP_GAIN_VALUE, "g0")] = gain_t(-5);      go0[named_prop_t(PROP_GAIN_VALUE, "g1")] = gain_t(30); -    BOOST_CHECK_EQUAL(wax::cast<gain_t>(go0[PROP_GAIN_VALUE]), gain_t(25)); +    BOOST_CHECK_EQUAL(go0[PROP_GAIN_VALUE].as<gain_t>(), gain_t(25));  } diff --git a/host/test/wax_test.cpp b/host/test/wax_test.cpp index e5e1adc25..b793b2690 100644 --- a/host/test/wax_test.cpp +++ b/host/test/wax_test.cpp @@ -17,14 +17,15 @@  #include <boost/test/unit_test.hpp>  #include <uhd/wax.hpp> +#include <iostream>  enum opt_a_t{OPTION_A_0, OPTION_A_1};  enum opt_b_t{OPTION_B_0, OPTION_B_1};  BOOST_AUTO_TEST_CASE(test_enums){      wax::obj opta = OPTION_A_0; -    BOOST_CHECK_THROW(wax::cast<opt_b_t>(opta), wax::bad_cast); -    BOOST_CHECK_EQUAL(wax::cast<opt_a_t>(opta), OPTION_A_0); +    BOOST_CHECK_THROW(opta.as<opt_b_t>(), wax::bad_cast); +    BOOST_CHECK_EQUAL(opta.as<opt_a_t>(), OPTION_A_0);  }  /*********************************************************************** @@ -48,14 +49,14 @@ public:      }      void get(const wax::obj &key, wax::obj &value){          if (d_subs.size() == 0){ -            value = d_nums[wax::cast<size_t>(key)]; +            value = d_nums[key.as<size_t>()];          }else{ -            value = d_subs[wax::cast<size_t>(key)].get_link(); +            value = d_subs[key.as<size_t>()].get_link();          }      }      void set(const wax::obj &key, const wax::obj &value){          if (d_subs.size() == 0){ -            d_nums[wax::cast<size_t>(key)] = wax::cast<float>(value); +            d_nums[key.as<size_t>()] = value.as<float>();          }else{              throw std::runtime_error("cant set to a wax demo with sub demos");          } @@ -81,7 +82,7 @@ BOOST_AUTO_TEST_CASE(test_set_get){                  float val = i * j * k + i + j + k;                  //std::cout << i << " " << j << " " << k << std::endl;                  wd[i][j][k] = val; -                BOOST_CHECK_EQUAL(val, wax::cast<float>(wd[i][j][k])); +                BOOST_CHECK_EQUAL(val, wd[i][j][k].as<float>());              }          }      } @@ -94,5 +95,5 @@ BOOST_AUTO_TEST_CASE(test_proxy){      std::cout << "assign proxy" << std::endl;      wax::obj a = p[size_t(0)]; -    BOOST_CHECK_EQUAL(wax::cast<float>(a), float(5)); +    BOOST_CHECK_EQUAL(a.as<float>(), float(5));  } | 
