aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshish Chaudhari <ashish@ettus.com>2016-03-07 17:43:01 -0800
committerAshish Chaudhari <ashish@ettus.com>2016-03-21 16:49:46 -0700
commit98dba897268a8c7f6e2eaf807c83502b8835f6da (patch)
treed4b23a5e94cdd1d500c91fb5a45ae052e9f9da51
parent00bdb2b164ba268ae0a4efa8d0ada70d05f7cdb5 (diff)
downloaduhd-98dba897268a8c7f6e2eaf807c83502b8835f6da.tar.gz
uhd-98dba897268a8c7f6e2eaf807c83502b8835f6da.tar.bz2
uhd-98dba897268a8c7f6e2eaf807c83502b8835f6da.zip
experts: Print values of data nodes when debugging
-rw-r--r--host/lib/experts/expert_container.cpp7
-rw-r--r--host/lib/experts/expert_nodes.hpp27
2 files changed, 32 insertions, 2 deletions
diff --git a/host/lib/experts/expert_container.cpp b/host/lib/experts/expert_container.cpp
index dc98ee4ed..edfc2ebe3 100644
--- a/host/lib/experts/expert_container.cpp
+++ b/host/lib/experts/expert_container.cpp
@@ -449,14 +449,17 @@ private:
//Only resolve if the starting node has passed
if (start_node_encountered) {
dag_vertex_t& node = _get_vertex(*node_iter);
+ std::string node_val;
if (force or node.is_dirty()) {
node.resolve();
if (node.get_class() == CLASS_WORKER) {
resolved_workers.push_back(&node);
}
- EX_LOG(1, str(boost::format("resolved node %s (%s)") % node.get_name() % (node.is_dirty()?"dirty":"clean")));
+ EX_LOG(1, str(boost::format("resolved node %s (%s) [%s]") %
+ node.get_name() % (node.is_dirty()?"dirty":"clean") % node.to_string()));
} else {
- EX_LOG(1, str(boost::format("skipped node %s (%s)") % node.get_name() % (node.is_dirty()?"dirty":"clean")));
+ EX_LOG(1, str(boost::format("skipped node %s (%s) [%s]") %
+ node.get_name() % (node.is_dirty()?"dirty":"clean") % node.to_string()));
}
}
diff --git a/host/lib/experts/expert_nodes.hpp b/host/lib/experts/expert_nodes.hpp
index c89f4f3a8..dc5cc934b 100644
--- a/host/lib/experts/expert_nodes.hpp
+++ b/host/lib/experts/expert_nodes.hpp
@@ -59,6 +59,8 @@ namespace uhd { namespace experts {
virtual const std::string& get_dtype() const = 0;
+ virtual std::string to_string() const = 0;
+
// Graph resolution specific
virtual bool is_dirty() const = 0;
virtual void mark_clean() = 0;
@@ -81,6 +83,23 @@ namespace uhd { namespace experts {
const std::string _name;
};
+ class data_node_printer {
+ public:
+ //Generic implementation
+ template<typename data_t>
+ static std::string print(const data_t& val) {
+ std::ostringstream os;
+ os << val;
+ return os.str();
+ }
+
+ static std::string print(const boost::uint8_t& val) {
+ std::ostringstream os;
+ os << int(val);
+ return os.str();
+ }
+ };
+
/*!---------------------------------------------------------
* class data_node_t
*
@@ -120,6 +139,10 @@ namespace uhd { namespace experts {
return dtype;
}
+ virtual std::string to_string() const {
+ return data_node_printer::print(get());
+ }
+
inline node_author_t get_author() const {
return _author;
}
@@ -431,6 +454,10 @@ namespace uhd { namespace experts {
return dtype;
}
+ virtual std::string to_string() const {
+ return "<worker>";
+ }
+
// Workers don't have callbacks so implement stubs
virtual void set_write_callback(const callback_func_t&) {}
virtual bool has_write_callback() const { return false; }