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
786 graph = kzalloc(sizeof(*graph), GFP_KERNEL); in objagg_tmp_graph_create()
787 if (!graph) in objagg_tmp_graph_create()
790 graph->nodes = kcalloc(nodes_count, sizeof(*graph->nodes), GFP_KERNEL); in objagg_tmp_graph_create()
791 if (!graph->nodes) in objagg_tmp_graph_create()
793 graph->nodes_count = nodes_count; in objagg_tmp_graph_create()
795 graph->edges = bitmap_zalloc(nodes_count * nodes_count, GFP_KERNEL); in objagg_tmp_graph_create()
796 if (!graph->edges) in objagg_tmp_graph_create()
801 node = &graph->nodes[i++]; in objagg_tmp_graph_create()
805 /* Assemble a temporary graph. Insert edge X->Y in case Y can be in objagg_tmp_graph_create()
812 pnode = &graph->nodes[i]; in objagg_tmp_graph_create()
813 node = &graph->nodes[j]; in objagg_tmp_graph_create()
817 objagg_tmp_graph_edge_set(graph, i, j); in objagg_tmp_graph_create()
822 return graph; in objagg_tmp_graph_create()
825 kfree(graph->nodes); in objagg_tmp_graph_create()
827 kfree(graph); in objagg_tmp_graph_create()
831 static void objagg_tmp_graph_destroy(struct objagg_tmp_graph *graph) in objagg_tmp_graph_destroy() argument
833 bitmap_free(graph->edges); in objagg_tmp_graph_destroy()
834 kfree(graph->nodes); in objagg_tmp_graph_destroy()
835 kfree(graph); in objagg_tmp_graph_destroy()
843 struct objagg_tmp_graph *graph; in objagg_opt_simple_greedy_fillup_hints() local
849 graph = objagg_tmp_graph_create(objagg); in objagg_opt_simple_greedy_fillup_hints()
850 if (!graph) in objagg_opt_simple_greedy_fillup_hints()
854 * and cross them out of the graph. Save them to the hint list. in objagg_opt_simple_greedy_fillup_hints()
856 while ((index = objagg_tmp_graph_node_max_weight(graph)) != -1) { in objagg_opt_simple_greedy_fillup_hints()
857 node = &graph->nodes[index]; in objagg_opt_simple_greedy_fillup_hints()
868 for (j = 0; j < graph->nodes_count; j++) { in objagg_opt_simple_greedy_fillup_hints()
869 if (!objagg_tmp_graph_is_edge(graph, index, j)) in objagg_opt_simple_greedy_fillup_hints()
871 node = &graph->nodes[j]; in objagg_opt_simple_greedy_fillup_hints()
888 objagg_tmp_graph_destroy(graph); in objagg_opt_simple_greedy_fillup_hints()