X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flpp%2Flpp.c;h=9ac76f4cf4f3c42eba24a56d5e00c4bb6af8817f;hb=2cfb4be35e6255d7cd59824e9b7a5eea39705227;hp=d6f0a776c9b68a6075402198ca9d1028385e9898;hpb=31d36dd3e8a2b7b513958f005cc555e01b9c3d5b;p=libfirm diff --git a/ir/lpp/lpp.c b/ir/lpp/lpp.c index d6f0a776c..9ac76f4cf 100644 --- a/ir/lpp/lpp.c +++ b/ir/lpp/lpp.c @@ -140,8 +140,7 @@ static int name2nr(set *where, const char *name) { lpp_name_t find, *found; find.name = name; - found - = (lpp_name_t*)set_find(where, &find, sizeof(find), HASH_NAME_T(&find)); + found = set_find(lpp_name_t, where, &find, sizeof(find), HASH_NAME_T(&find)); return (found ? found->nr : -1); } @@ -177,7 +176,7 @@ int lpp_add_cst(lpp_t *lpp, const char *cst_name, lpp_cst_t cst_type, double rhs n.name = get_next_name(lpp); n.nr = -1; - inner = (lpp_name_t*)set_insert(lpp->cst2nr, &n, sizeof(n), HASH_NAME_T(&n)); + inner = set_insert(lpp_name_t, lpp->cst2nr, &n, sizeof(n), HASH_NAME_T(&n)); assert(inner); if (inner->nr == -1) { @@ -207,7 +206,7 @@ int lpp_add_cst_uniq(lpp_t *lpp, const char *cst_name, lpp_cst_t cst_type, doubl n.name = cst_name; n.nr = -1; - assert(!set_find(lpp->cst2nr, &n, sizeof(n), HASH_NAME_T(&n)) && + assert(!set_find(lpp_name_t, lpp->cst2nr, &n, sizeof(n), HASH_NAME_T(&n)) && "constraint already exists"); } return lpp_add_cst(lpp, cst_name, cst_type, rhs); @@ -252,7 +251,7 @@ int lpp_add_var(lpp_t *lpp, const char *var_name, lpp_var_t var_type, double obj n.name = get_next_name(lpp); n.nr = -1; - inner = (lpp_name_t*)set_insert(lpp->var2nr, &n, sizeof(n), HASH_NAME_T(&n)); + inner = set_insert(lpp_name_t, lpp->var2nr, &n, sizeof(n), HASH_NAME_T(&n)); assert(inner); if (inner->nr == -1) { @@ -413,21 +412,35 @@ void lpp_dump_plain(lpp_t *lpp, FILE *f) { int i; + fprintf(f, lpp->opt_type == lpp_minimize ? "Minimize\n" : "Maximize\n"); for(i = 0; i < lpp->cst_next; ++i) { - const matrix_elem_t *elm; lpp_name_t *cst = lpp->csts[i]; + fprintf(f, "%16s: ", cst->name); matrix_foreach_in_row(lpp->m, cst->nr, elm) { lpp_name_t *var = lpp->vars[elm->col]; /* TODO Perhaps better a define LPP_COL_RHS */ if(elm->col > 0) - fprintf(f, "%+4.1f*%-16s ", elm->val, var->name); + fprintf(f, "%+4.1f %-16s ", elm->val, var->name); + } + + if (i == 0) { + fprintf(f, "\nSubject To\n"); + continue; } fprintf(f, "%3s %+4.1f\n", lpp_cst_op_to_str(cst->type.cst_type), matrix_get(lpp->m, cst->nr, 0)); } + + fprintf(f, "Binary\n"); + for(i = 0; i < lpp->var_next; ++i) { + lpp_name_t *var = lpp->vars[i]; + if (var->type.var_type == lpp_binary) + fprintf(f, "%16s\n", var->name); + } + fprintf(f, "End\n"); } /** @@ -471,20 +484,16 @@ void lpp_serialize(lpp_comm_t *comm, const lpp_t *lpp, int with_names) lpp_writes(comm, name->name); } - { - const matrix_elem_t *elm; - n = 0; - - matrix_foreach(lpp->m, elm) - n++; + n = 0; + matrix_foreach(lpp->m, elm) + n++; - assert(n == matrix_get_entries(lpp->m)); - lpp_writel(comm, n); - matrix_foreach(lpp->m, elm) { - lpp_writel(comm, elm->row); - lpp_writel(comm, elm->col); - lpp_writed(comm, elm->val); - } + assert(n == matrix_get_entries(lpp->m)); + lpp_writel(comm, n); + matrix_foreach(lpp->m, elm) { + lpp_writel(comm, elm->row); + lpp_writel(comm, elm->col); + lpp_writed(comm, elm->val); } } @@ -538,7 +547,7 @@ lpp_t *lpp_deserialize(lpp_comm_t *comm) name.name = buf; } - res = (lpp_name_t*)set_insert(lpp->cst2nr, &name, sizeof(name), HASH_NAME_T(&name)); + res = set_insert(lpp_name_t, lpp->cst2nr, &name, sizeof(name), HASH_NAME_T(&name)); lpp->csts[name.nr] = res; } @@ -557,7 +566,7 @@ lpp_t *lpp_deserialize(lpp_comm_t *comm) name.name = buf; } - res = (lpp_name_t*)set_insert(lpp->var2nr, &name, sizeof(name), HASH_NAME_T(&name)); + res = set_insert(lpp_name_t, lpp->var2nr, &name, sizeof(name), HASH_NAME_T(&name)); lpp->vars[name.nr] = res; }