summaryrefslogtreecommitdiff
path: root/src/tasktree.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tasktree.cc')
-rw-r--r--src/tasktree.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/tasktree.cc b/src/tasktree.cc
index 3a72046..0a9ad46 100644
--- a/src/tasktree.cc
+++ b/src/tasktree.cc
@@ -177,6 +177,35 @@ task_t TaskTree::getData(taskid_t id)
return t;
}
+// bfs search from id in tree
+TaskIdList TaskTree::bfs(taskid_t id)
+ throw (std::exception) {
+
+ TaskIdList lst;
+ lst.push_back(id);
+
+ std::list<node_t*> queue;
+ node_t* current = id2node.at(id);
+ while(true) {
+ NodeList children = current->children;
+ for(NodeList::iterator it = children.begin(); it != children.end(); it++) {
+ node_t* child = *it;
+ queue.push_back(child);
+ lst.push_back(child->id);
+ }
+
+ if(!queue.empty()) {
+ current = queue.front();
+ queue.pop_front();
+ }
+ else {
+ break;
+ }
+ }
+
+ return lst;
+}
+
TaskIdList TaskTree::ancestorList(taskid_t id)
throw (std::exception) {