예제 #1
0
/*
 * Print a monomial (copied from term_printer.c)
 * - variables v is converted to vertex id i-1
 */
static void print_monomial(int32_t v, rational_t *coeff, bool first) {
  bool negative;
  bool abs_one;

  negative = q_is_neg(coeff);

  if (negative) {
    if (first) {
      printf("- ");
    } else {
      printf(" - ");
    }
    abs_one = q_is_minus_one(coeff);
  } else {
    if (! first) {
      printf(" + ");
    }
    abs_one = q_is_one(coeff);
  }

  if (v == const_idx) {
    q_print_abs(stdout, coeff);
  } else {
    if (! abs_one) {
      q_print_abs(stdout, coeff);
      printf(" * ");
    }
    printf("x!%"PRId32, v-1);
  }
}
예제 #2
0
/*
 * Print stuff
 */
static void print_mono(const char *prefix, rational_t *coeff, int32_t x, bool first) {
  bool negative;
  bool abs_one;

  negative = q_is_neg(coeff);
  if (negative) {
    if (first) {
      printf("-");
      if (x != const_idx) {
	printf(" ");
      }
    } else {
      printf(" - ");
    }
    abs_one = q_is_minus_one(coeff);
  } else {
    if (! first) {
      printf(" + ");
    }
    abs_one = q_is_one(coeff);
  }

  if (x == const_idx) {
    q_print_abs(stdout, coeff);
  } else {
    if (! abs_one) {
      q_print_abs(stdout, coeff);
      printf(" * ");
    }
    printf("%s%"PRId32, prefix, x);
  }
}
예제 #3
0
/*
 * Print buffer b
 */
static void print_monomial(FILE *f, rational_t *coeff, pprod_t *r, bool first) {
  bool negative;
  bool abs_one;

  negative = q_is_neg(coeff);
  if (negative) {
    if (first) {
      fprintf(f, "- ");
    } else {
      fprintf(f, " - ");
    }
    abs_one = q_is_minus_one(coeff);
  } else {
    if (! first) {
      fprintf(f, " + ");
    }
    abs_one = q_is_one(coeff);
  }

  if (pp_is_empty(r)) {
    q_print_abs(f, coeff);
  } else {
    if (! abs_one) {
      q_print_abs(f, coeff);
      fprintf(f, " ");
    }
    print_pprod0(f, r);
  }

}
예제 #4
0
static void print_avar_monomial(FILE *f, arith_vartable_t *table, thvar_t v, rational_t *coeff, bool first) {
  bool negative;
  bool abs_one;

  negative = q_is_neg(coeff);

  if (negative) {
    if (first) {
      fputs("- ", f);
    } else {
      fputs(" - ", f);
    }
    abs_one = q_is_minus_one(coeff);
  } else {
    if (! first) {
      fputs(" + ", f);
    }
    abs_one = q_is_one(coeff);
  }

  if (v == const_idx) {
    q_print_abs(f, coeff);
  } else {
    if (! abs_one) {
      q_print_abs(f, coeff);
      fputs(" * ", f);
    }
    print_avar(f, table, v);
  }
}
예제 #5
0
/*
 * Difference logic triple (x - y + d)
 * - x and y are vertices
 */
void print_idl_triple(FILE *f, dl_triple_t *triple) {
  bool space;

  space = false;
  if (triple->target >= 0) {
    print_idl_vertex(f, triple->target); // x
    space = true;
  }
  if (triple->source >= 0) {
    if (space) fputc(' ', f);
    fputs("- ", f);
    print_idl_vertex(f, triple->source); // y
    space = true;
  }

  if (! space) {
    q_print(f, &triple->constant);
  } else if (q_is_pos(&triple->constant)) {
    fprintf(f, " + ");
    q_print(f, &triple->constant);
  } else if (q_is_neg(&triple->constant)) {
    fprintf(f, " - ");
    q_print_abs(f, &triple->constant);
  }
}
/*
 * DISPLAY CONSTRAINT
 */
static void show_constant(FILE *f, rational_t *a, bool first) {
  if (first) {
    if (q_is_neg(a)) {
      fprintf(f, "- ");
    }
  } else {
    if (q_is_neg(a)) {
      fprintf(f, " - ");
    } else {
      fprintf(f, " + ");
    }
  }
  q_print_abs(f, a);
}
예제 #7
0
static void print_vtable(offset_manager_t *mngr) {
  offset_table_t *table;
  offset_desc_t *d;
  uint32_t i, n;

  table = &mngr->vtable;

  printf("===== vtable ====\n");
  n = table->nvars;
  for (i=0; i<n; i++) {
    d = table->desc + i;
    printf("z%"PRIu32" = z%"PRId32, i, d->root);
    if (q_is_neg(&d->offset)) {
      printf(" - ");
    } else {
      printf(" + ");
    }
    q_print_abs(stdout, &d->offset);
    printf("\n");
    printf("   dep: ");
    print_dep(table->dep[i]);
    printf("\n");
  }
}
예제 #8
0
/*
 * Print a triple
 */
static void print_dl_triple(dl_triple_t *t) {
  bool space;

  space = false;
  if (t->target >= 0) {
    printf("x!%"PRId32, t->target);
    space = true;
  }
  if (t->source >= 0) {
    if (space) printf(" ");
    printf("- x!%"PRId32, t->source);
  }


  if (! space) {
    q_print(stdout, &t->constant);
  } else if (q_is_pos(&t->constant)) {
    printf(" + ");
    q_print(stdout, &t->constant);
  } else if (q_is_neg(&t->constant)) {
    printf(" - ");
    q_print_abs(stdout, &t->constant);
  }
}