diff options
author | Josh Blum <josh@joshknows.com> | 2010-01-08 18:16:56 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-01-08 18:16:56 -0800 |
commit | 751c2a853fba89373acae9f27e49da3d45a42ea4 (patch) | |
tree | 488f68810c7730100f0c25d1307680b46053a622 /usrp_uhd/lib/wax.cpp | |
parent | 67a502ec0fb92b14db5eedf2cff36caacbb0efbf (diff) | |
download | uhd-751c2a853fba89373acae9f27e49da3d45a42ea4.tar.gz uhd-751c2a853fba89373acae9f27e49da3d45a42ea4.tar.bz2 uhd-751c2a853fba89373acae9f27e49da3d45a42ea4.zip |
Added stuff for usrp addresses, wax framework, build structure.
Diffstat (limited to 'usrp_uhd/lib/wax.cpp')
-rw-r--r-- | usrp_uhd/lib/wax.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/usrp_uhd/lib/wax.cpp b/usrp_uhd/lib/wax.cpp new file mode 100644 index 000000000..888e581f3 --- /dev/null +++ b/usrp_uhd/lib/wax.cpp @@ -0,0 +1,71 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#include <usrp_uhd/wax.hpp> +#include <stdexcept> +#include <boost/bind.hpp> +#include <boost/format.hpp> + +/*********************************************************************** + * WAX Object + **********************************************************************/ +wax::obj::obj(void){ + /* NOP */ +} + +wax::obj::~obj(void){ + /* NOP */ +} + +wax::proxy wax::obj::operator[](const type &key){ + return proxy( + boost::bind(&obj::get, this, key, _1), + boost::bind(&obj::set, this, key, _1) + ); +} + +/*********************************************************************** + * WAX Proxy + **********************************************************************/ +wax::proxy::proxy(wax::proxy::getter_t getter, wax::proxy::setter_t setter) +: d_getter(getter), d_setter(setter){ + /* NOP */ +} + +wax::proxy::~proxy(void){ + /* NOP */ +} + +wax::proxy wax::proxy::operator[](const type &key){ + type val((*this)()); + //check if its a regular pointer and call + if (val.type() == typeid(obj::ptr)){ + return (*cast<obj::ptr>(val))[key]; + } + //check if its a smart pointer and call + if (val.type() == typeid(obj::sptr)){ + return (*cast<obj::sptr>(val))[key]; + } + //unknown type + throw std::runtime_error("cannot use [] on non wax::obj pointer"); +} + +wax::proxy wax::proxy::operator=(const type &val){ + d_setter(val); + return *this; +} + +wax::type wax::proxy::operator()(void){ + type val; + d_getter(val); + return val; +} + +/*********************************************************************** + * WAX Type + **********************************************************************/ +std::ostream& operator<<(std::ostream &os, const wax::type &x){ + os << boost::format("WAX type (%s)") % x.type().name(); + return os; +} |