| 205 | } |
| 206 | |
| 207 | void SimpleGraph::AddEdge(SimpleNode* src, int out_port, SimpleNode* dst, |
| 208 | int in_port) { |
| 209 | int i = edges_.size(); |
| 210 | if (!free_edge_ids_.empty()) { |
| 211 | auto it = free_edge_ids_.begin(); |
| 212 | i = *it; |
| 213 | free_edge_ids_.erase(it); |
| 214 | } else { |
| 215 | edges_.push_back(nullptr); |
| 216 | } |
| 217 | bool is_control = (out_port == Graph::kControlSlot); |
| 218 | is_control |= (in_port == Graph::kControlSlot); |
| 219 | auto edge = new SimpleEdge(i, src, out_port, dst, in_port, is_control); |
| 220 | edges_[i] = edge; |
| 221 | src->out_edges_.push_back(edge); |
| 222 | dst->in_edges_.push_back(edge); |
| 223 | } |
| 224 | |
| 225 | void SimpleGraph::AddControlEdge(SimpleNode* src, SimpleNode* dst) { |
| 226 | AddEdge(src, Graph::kControlSlot, dst, Graph::kControlSlot); |