summaryrefslogtreecommitdiffstats
path: root/usrp_uhd/lib/wax.cpp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-01-08 18:16:56 -0800
committerJosh Blum <josh@joshknows.com>2010-01-08 18:16:56 -0800
commit751c2a853fba89373acae9f27e49da3d45a42ea4 (patch)
tree488f68810c7730100f0c25d1307680b46053a622 /usrp_uhd/lib/wax.cpp
parent67a502ec0fb92b14db5eedf2cff36caacbb0efbf (diff)
downloaduhd-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.cpp71
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;
+}