| 109 | } |
| 110 | |
| 111 | int32 GraphCycles::NewNode() { |
| 112 | if (rep_->free_nodes_.empty()) { |
| 113 | Node* n = new Node; |
| 114 | n->visited = false; |
| 115 | n->data = nullptr; |
| 116 | n->rank = rep_->nodes_.size(); |
| 117 | rep_->nodes_.push_back(n); |
| 118 | return n->rank; |
| 119 | } else { |
| 120 | // Preserve preceding rank since the set of ranks in use must be |
| 121 | // a permutation of [0,rep_->nodes_.size()-1]. |
| 122 | int32 r = rep_->free_nodes_.back(); |
| 123 | rep_->nodes_[r]->data = nullptr; |
| 124 | rep_->free_nodes_.pop_back(); |
| 125 | return r; |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | void GraphCycles::RemoveNode(int32 node) { |
| 130 | Node* x = rep_->nodes_[node]; |