X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=effect_chain.h;h=f0d0003e9c87bf0fcfc83da512c6a6dbd2f62998;hb=7221906173f1cf1ce6913cbe9d62d5ca11e9ee0d;hp=666df9e5738b4de515b80a3e67452356f55b6d67;hpb=b10c546f579c7ccb5939161e61a71cd18a3f9bbd;p=movit diff --git a/effect_chain.h b/effect_chain.h index 666df9e..f0d0003 100644 --- a/effect_chain.h +++ b/effect_chain.h @@ -175,12 +175,26 @@ private: // Output the current graph to the given file in a Graphviz-compatible format; // only useful for debugging. void output_dot(const char *filename); + std::vector get_labels_for_edge(const Node *from, const Node *to); + void output_dot_edge(FILE *fp, + const std::string &from_node_id, + const std::string &to_node_id, + const std::vector &labels); // Some of the graph algorithms assume that the nodes array is sorted // topologically (inputs are always before outputs), but some operations // (like graph rewriting) can change that. This function restores that order. - void sort_nodes_topologically(); - void topological_sort_visit_node(Node *node, std::set *visited_nodes, std::vector *sorted_list); + void sort_all_nodes_topologically(); + + // Do the actual topological sort. must be a connected, acyclic subgraph; + // links that go to nodes not in the set will be ignored. + std::vector topological_sort(const std::vector &nodes); + + // Utility function used by topological_sort() to do a depth-first search. + // The reason why we store nodes left to visit instead of a more conventional + // list of nodes to visit is that we want to be able to limit ourselves to + // a subgraph instead of all nodes. The set thus serves a dual purpose. + void topological_sort_visit_node(Node *node, std::set *nodes_left_to_visit, std::vector *sorted_list); // Used during finalize(). void find_color_spaces_for_inputs();