WRENCH  1.11
Cyberinfrastructure Simulation Workbench
Overview Installation Getting Started WRENCH 101 WRENCH 102
DagOfTasks.h
1 
10 #ifndef WRENCH_DAGOFTASKS_H
11 #define WRENCH_DAGOFTASKS_H
12 
13 #include <boost/graph/adjacency_list.hpp>
14 #include <boost/graph/breadth_first_search.hpp>
15 #include <iostream>
16 
17 #include "wrench/workflow/WorkflowTask.h"
18 
19 namespace wrench {
20 
21 /***********************/
23 /***********************/
24 
25  class WorkflowTask;
26 
30  struct VertexProperties {
31 // std::size_t index;
32 // boost::default_color_type color;
34  const WorkflowTask *task;
35  };
36 
40  typedef boost::adjacency_list<boost::listS, boost::vecS, boost::bidirectionalS, VertexProperties> DAG;
41 
45  typedef unsigned long vertex_t; // To clean up some day...
46 
50  class DagOfTasks {
51 
52  public:
53 
54  void addVertex(const WorkflowTask *task);
55 
56  void removeVertex(WorkflowTask *task);
57 
58  void addEdge(WorkflowTask *src, WorkflowTask *dst);
59 
60  void removeEdge(WorkflowTask *src, WorkflowTask *dst);
61 
62  bool doesPathExist(const WorkflowTask *src, const WorkflowTask *dst);
63  bool doesEdgeExist(const WorkflowTask *src, const WorkflowTask *dst);
64 
65  long getNumberOfChildren(const WorkflowTask *task);
66 
67  std::vector<WorkflowTask *> getChildren(const WorkflowTask *task);
68 
69  long getNumberOfParents(const WorkflowTask *task);
70 
71  std::vector<WorkflowTask *> getParents(const WorkflowTask *task);
72 
73  private:
74 
78  class custom_bfs_visitor : public boost::default_bfs_visitor {
79  public:
80 
81  const WorkflowTask *target_task;
82 
83  explicit custom_bfs_visitor(const WorkflowTask *target_task) : boost::default_bfs_visitor() {
84  this->target_task = target_task;
85  }
86 
87  template<typename Vertex, typename Graph>
88  void discover_vertex(Vertex u, Graph &g) {
89  if (g[u].task == target_task) {
90  throw std::runtime_error("path found");
91  }
92  }
93  };
94 
95  std::vector<const WorkflowTask*> task_list;
96  std::unordered_map<const WorkflowTask *, unsigned long> task_map;
97 
98  DAG dag;
99 
100  };
101 
102 /***********************/
104 /***********************/
105 
106 }
107 
108 
109 #endif //WRENCH_DAGOFTASKS_H
wrench
Definition: Action.cpp:28