Lines Matching full:graph
710 static int objagg_tmp_graph_edge_index(struct objagg_tmp_graph *graph, in objagg_tmp_graph_edge_index() argument
713 return index * graph->nodes_count + parent_index; in objagg_tmp_graph_edge_index()
716 static void objagg_tmp_graph_edge_set(struct objagg_tmp_graph *graph, in objagg_tmp_graph_edge_set() argument
719 int edge_index = objagg_tmp_graph_edge_index(graph, index, in objagg_tmp_graph_edge_set()
722 __set_bit(edge_index, graph->edges); in objagg_tmp_graph_edge_set()
725 static bool objagg_tmp_graph_is_edge(struct objagg_tmp_graph *graph, in objagg_tmp_graph_is_edge() argument
728 int edge_index = objagg_tmp_graph_edge_index(graph, index, in objagg_tmp_graph_is_edge()
731 return test_bit(edge_index, graph->edges); in objagg_tmp_graph_is_edge()
734 static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph, in objagg_tmp_graph_node_weight() argument
737 struct objagg_tmp_node *node = &graph->nodes[index]; in objagg_tmp_graph_node_weight()
745 for (j = 0; j < graph->nodes_count; j++) { in objagg_tmp_graph_node_weight()
746 if (!objagg_tmp_graph_is_edge(graph, index, j)) in objagg_tmp_graph_node_weight()
748 node = &graph->nodes[j]; in objagg_tmp_graph_node_weight()
756 static int objagg_tmp_graph_node_max_weight(struct objagg_tmp_graph *graph) in objagg_tmp_graph_node_max_weight() argument
764 for (i = 0; i < graph->nodes_count; i++) { in objagg_tmp_graph_node_max_weight()
765 node = &graph->nodes[i]; in objagg_tmp_graph_node_max_weight()
768 weight = objagg_tmp_graph_node_weight(graph, i); in objagg_tmp_graph_node_max_weight()
780 struct objagg_tmp_graph *graph; in objagg_tmp_graph_create() local
787 graph = kzalloc(sizeof(*graph), GFP_KERNEL); in objagg_tmp_graph_create()
788 if (!graph) in objagg_tmp_graph_create()
791 graph->nodes = kcalloc(nodes_count, sizeof(*graph->nodes), GFP_KERNEL); in objagg_tmp_graph_create()
792 if (!graph->nodes) in objagg_tmp_graph_create()
794 graph->nodes_count = nodes_count; in objagg_tmp_graph_create()
798 graph->edges = kzalloc(alloc_size, GFP_KERNEL); in objagg_tmp_graph_create()
799 if (!graph->edges) in objagg_tmp_graph_create()
804 node = &graph->nodes[i++]; in objagg_tmp_graph_create()
808 /* Assemble a temporary graph. Insert edge X->Y in case Y can be in objagg_tmp_graph_create()
815 pnode = &graph->nodes[i]; in objagg_tmp_graph_create()
816 node = &graph->nodes[j]; in objagg_tmp_graph_create()
820 objagg_tmp_graph_edge_set(graph, i, j); in objagg_tmp_graph_create()
825 return graph; in objagg_tmp_graph_create()
828 kfree(graph->nodes); in objagg_tmp_graph_create()
830 kfree(graph); in objagg_tmp_graph_create()
834 static void objagg_tmp_graph_destroy(struct objagg_tmp_graph *graph) in objagg_tmp_graph_destroy() argument
836 kfree(graph->edges); in objagg_tmp_graph_destroy()
837 kfree(graph->nodes); in objagg_tmp_graph_destroy()
838 kfree(graph); in objagg_tmp_graph_destroy()
846 struct objagg_tmp_graph *graph; in objagg_opt_simple_greedy_fillup_hints() local
852 graph = objagg_tmp_graph_create(objagg); in objagg_opt_simple_greedy_fillup_hints()
853 if (!graph) in objagg_opt_simple_greedy_fillup_hints()
857 * and cross them out of the graph. Save them to the hint list. in objagg_opt_simple_greedy_fillup_hints()
859 while ((index = objagg_tmp_graph_node_max_weight(graph)) != -1) { in objagg_opt_simple_greedy_fillup_hints()
860 node = &graph->nodes[index]; in objagg_opt_simple_greedy_fillup_hints()
871 for (j = 0; j < graph->nodes_count; j++) { in objagg_opt_simple_greedy_fillup_hints()
872 if (!objagg_tmp_graph_is_edge(graph, index, j)) in objagg_opt_simple_greedy_fillup_hints()
874 node = &graph->nodes[j]; in objagg_opt_simple_greedy_fillup_hints()
891 objagg_tmp_graph_destroy(graph); in objagg_opt_simple_greedy_fillup_hints()