X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fhungarian.c;h=e6a74ff3246c88c3d60b503987af133c52f389fb;hb=04906225f6fe1bc22f73b5d6a98eb9c0992a9b54;hp=7d08c437ea65ce3f393c6f8dcd24cd9987d44a89;hpb=ed9c74ceca0655fb484f0537dbea43afa2ca0a7e;p=libfirm diff --git a/ir/adt/hungarian.c b/ir/adt/hungarian.c index 7d08c437e..e6a74ff32 100644 --- a/ir/adt/hungarian.c +++ b/ir/adt/hungarian.c @@ -24,11 +24,12 @@ ******************************************************************** ********************************************************************/ -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif +/** + * @file + * @brief Solving the Minimum Assignment Problem using the Hungarian Method. + * @version $Id$ + */ +#include "config.h" #include #include @@ -86,9 +87,7 @@ void hungarian_print_costmatrix(hungarian_problem_t *p) { */ hungarian_problem_t *hungarian_new(int rows, int cols, int width, int match_type) { int i; - hungarian_problem_t *p = xmalloc(sizeof(*p)); - - memset(p, 0, sizeof(p)); + hungarian_problem_t *p = XMALLOCZ(hungarian_problem_t); FIRM_DBG_REGISTER(p->dbg, "firm.hungarian"); @@ -152,6 +151,7 @@ void hungarian_prepare_cost_matrix(hungarian_problem_t *p, int mode) { void hungarian_add(hungarian_problem_t *p, int left, int right, int cost) { assert(p->num_rows > left && "Invalid row selected."); assert(p->num_cols > right && "Invalid column selected."); + assert(cost >= 0); p->cost[left][right] = cost; p->max_cost = MAX(p->max_cost, cost); @@ -203,15 +203,15 @@ int hungarian_solve(hungarian_problem_t* p, int *assignment, int *final_cost, in m = p->num_rows; n = p->num_cols; - col_mate = xcalloc(p->num_rows, sizeof(col_mate[0])); - unchosen_row = xcalloc(p->num_rows, sizeof(unchosen_row[0])); - row_dec = xcalloc(p->num_rows, sizeof(row_dec[0])); - slack_row = xcalloc(p->num_rows, sizeof(slack_row[0])); + col_mate = XMALLOCNZ(int, p->num_rows); + unchosen_row = XMALLOCNZ(int, p->num_rows); + row_dec = XMALLOCNZ(int, p->num_rows); + slack_row = XMALLOCNZ(int, p->num_rows); - row_mate = xcalloc(p->num_cols, sizeof(row_mate[0])); - parent_row = xcalloc(p->num_cols, sizeof(parent_row[0])); - col_inc = xcalloc(p->num_cols, sizeof(col_inc[0])); - slack = xcalloc(p->num_cols, sizeof(slack[0])); + row_mate = XMALLOCNZ(int, p->num_cols); + parent_row = XMALLOCNZ(int, p->num_cols); + col_inc = XMALLOCNZ(int, p->num_cols); + slack = XMALLOCNZ(int, p->num_cols); memset(assignment, -1, m * sizeof(assignment[0]));