Index: src/compiler/graph.h |
diff --git a/src/compiler/graph.h b/src/compiler/graph.h |
index 9b0d234818a46abe79ab9b275f49fc96e47c7914..9e4cb70ea5d7f45f3e93b8e3a37ba3317964f5c0 100644 |
--- a/src/compiler/graph.h |
+++ b/src/compiler/graph.h |
@@ -19,6 +19,35 @@ namespace compiler { |
class GraphDecorator; |
+template <typename LocalState> |
Michael Starzinger
2014/11/28 11:27:27
nit: Can we use s/LocalState/State/ here for reada
|
+class GraphTraversal : public ZoneObject { |
Michael Starzinger
2014/11/28 11:27:27
As discussed offline: Since this is not really a "
|
+ public: |
+ LocalState GetState(Node* node) { |
+ TraversalState state = node->traversal_state(); |
+ if (state < traversal_state_min_) { |
+ state = traversal_state_min_; |
+ node->set_traversal_state(traversal_state_min_); |
+ } |
+ DCHECK_LT(state, traversal_state_max_); |
+ return static_cast<LocalState>(state - traversal_state_min_); |
+ } |
+ |
+ void SetState(Node* node, LocalState state) { |
+ TraversalState local = static_cast<TraversalState>(state); |
+ DCHECK(local >= 0 && local < (traversal_state_max_ - traversal_state_min_)); |
+ DCHECK_LT(node->traversal_state(), traversal_state_max_); |
+ node->set_traversal_state(local + traversal_state_min_); |
+ } |
+ |
+ private: |
+ GraphTraversal(TraversalState min, TraversalState max) |
+ : traversal_state_min_(min), traversal_state_max_(max) {} |
+ |
+ TraversalState traversal_state_min_; |
+ TraversalState traversal_state_max_; |
+ |
+ friend class Graph; |
+}; |
class Graph : public GenericGraph<Node> { |
public: |
@@ -83,7 +112,16 @@ class Graph : public GenericGraph<Node> { |
decorators_.erase(it, it + 1); |
} |
+ template <typename LocalState> |
Michael Starzinger
2014/11/28 11:27:27
nit: Can we use s/LocalState/State/ here for reada
|
+ GraphTraversal<LocalState>* NewTraversal(Zone* local_zone, |
+ uint32_t num_states) { |
+ TraversalState min = traversal_state_max_; |
+ TraversalState max = (traversal_state_max_ += num_states); |
+ return new (local_zone) GraphTraversal<LocalState>(min, max); |
+ } |
+ |
private: |
+ TraversalState traversal_state_max_; |
ZoneVector<GraphDecorator*> decorators_; |
}; |