host: Add static_assert to prevent meta_range_t(0,0)

meta_range_t(0,0) actually calls the iterator-based constructor for
meta_range_t, which is almost certainly not the intended constructor
for that call syntax. Therefore, we add a static_assert to prevent
such usage, and fix all failing instances.
This commit is contained in:
Lane Kolbly 2021-07-09 17:02:06 -05:00 committed by Aaron Rossetto
parent 14ea574bb7
commit f47df4d1a8
6 changed files with 18 additions and 9 deletions

View File

@ -9,6 +9,7 @@
#include <uhd/config.hpp>
#include <string>
#include <type_traits>
#include <vector>
namespace uhd {
@ -76,6 +77,14 @@ struct UHD_API meta_range_t : std::vector<range_t>
meta_range_t(InputIterator first, InputIterator last)
: std::vector<range_t>(first, last)
{ /* NOP */
// This is to avoid people accidentally doing silly things like:
// meta_range_t(0, 0)
// which probably was supposed to call meta_range_t(double, double, double)
// but actually calls this constructor.
static_assert(
!std::is_integral<typename std::decay<InputIterator>::type>::value,
"You can't pass integers to meta_range_t's constructor!"
);
}
/*!

View File

@ -767,7 +767,7 @@ void radio_control_impl::set_tx_dc_offset(const std::complex<double>&, size_t)
uhd::meta_range_t radio_control_impl::get_tx_dc_offset_range(size_t) const
{
return uhd::meta_range_t(0, 0);
return uhd::meta_range_t(0.0, 0.0);
}
void radio_control_impl::set_tx_iq_balance(const std::complex<double>&, size_t)
@ -792,7 +792,7 @@ void radio_control_impl::set_rx_dc_offset(const std::complex<double>&, size_t)
uhd::meta_range_t radio_control_impl::get_rx_dc_offset_range(size_t) const
{
return uhd::meta_range_t(0, 0);
return uhd::meta_range_t(0.0, 0.0);
}
void radio_control_impl::set_rx_iq_balance(const bool enb, size_t)

View File

@ -1847,7 +1847,7 @@ public:
} else {
UHD_LOGGER_WARNING("MULTI_USRP")
<< "This device does not support querying the RX DC offset range.";
return meta_range_t(0, 0);
return meta_range_t(0.0, 0.0);
}
}
@ -2340,7 +2340,7 @@ public:
} else {
UHD_LOGGER_WARNING("MULTI_USRP")
<< "This device does not support querying the TX DC offset range.";
return meta_range_t(0, 0);
return meta_range_t(0.0, 0.0);
}
}

View File

@ -1209,7 +1209,7 @@ public:
rx_chain.radio->get_rx_frequency_range(rx_chain.block_chan);
freq_range_t dsp_range =
(rx_chain.ddc) ? rx_chain.ddc->get_frequency_range(rx_chain.block_chan)
: meta_range_t(0, 0);
: meta_range_t(0.0, 0.0);
// Create lambdas to feed to tune_xx_subdev_and_dsp()
// Note: If there is no DDC present, register empty lambdas for the DSP functions
auto set_rf_freq = [rx_chain](double freq) {
@ -1840,7 +1840,7 @@ public:
tx_chain.radio->get_tx_frequency_range(tx_chain.block_chan);
freq_range_t dsp_range =
(tx_chain.duc) ? tx_chain.duc->get_frequency_range(tx_chain.block_chan)
: meta_range_t(0, 0);
: meta_range_t(0.0, 0.0);
// Create lambdas to feed to tune_xx_subdev_and_dsp()
// Note: If there is no DDC present, register empty lambdas for the DSP functions
auto set_rf_freq = [tx_chain](double freq) {

View File

@ -821,7 +821,7 @@ public:
} else {
RFNOC_LOG_WARNING(
"This device does not support querying the TX DC offset range.");
return meta_range_t(0, 0);
return meta_range_t(0.0, 0.0);
}
}
@ -864,7 +864,7 @@ public:
} else {
RFNOC_LOG_WARNING(
"This device does not support querying the rx DC offset range.");
return meta_range_t(0, 0);
return meta_range_t(0.0, 0.0);
}
}

View File

@ -129,7 +129,7 @@ uhd::meta_range_t ad937x_ctrl::get_rf_freq_range(void)
uhd::meta_range_t ad937x_ctrl::get_bw_filter_range(void)
{
// TODO: fix
return uhd::meta_range_t(0, 1);
return uhd::meta_range_t(0.0, 1.0);
}
std::vector<double> ad937x_ctrl::get_clock_rates(void)