void japron_tcons0_clear(ap_tcons0_t* t) { if (t->scalar) { ap_scalar_free(t->scalar); t->scalar = NULL; } }
void japron_lincons0_array_clear(ap_lincons0_array_t* t) { size_t i; for (i=0;i<t->size;i++) if (t->p[i].scalar) ap_scalar_free(t->p[i].scalar); if (t->p) { free(t->p); t->p = NULL; } }
/* Tcons0 -> ap_tcons0_t */ int japron_tcons0_init_set(JNIEnv *env, ap_tcons0_t* t, jobject c) { t->texpr0 = NULL; t->scalar = NULL; check_nonnull(c,0); t->constyp = (*env)->GetIntField(env, c, japron_tcons0_kind); jobject e = (*env)->GetObjectField(env, c, japron_tcons0_expr); check_nonnull(e,0); t->texpr0 = as_texpr0(e); jobject s = (*env)->GetObjectField(env, c, japron_tcons0_scalar); if (s) { t->scalar = ap_scalar_alloc(); if (!japron_scalar_set(env, t->scalar, s)) { ap_scalar_free(t->scalar); t->scalar = NULL; return 0; } } return 1; }
/* var1 := expr */ static ap_abstract1_t assignExpr(ap_abstract1_t abst, char *var, std::vector<char *> *exprItems, std::vector<int> *coeffs) { ap_linexpr1_t expr = ap_linexpr1_make(env, AP_LINEXPR_SPARSE, exprItems->size() + 2); ap_scalar_t *scalar = ap_scalar_alloc_set_double(1); char *src[strlen(var) + 1]; ap_linexpr1_set_coeff_scalar(&expr, src, scalar); assert(exprItems->size() == coeffs->size()); for (int i = 0; i < (int)exprItems->size(); ++i) { scalar = ap_scalar_alloc_set_double(coeffs->at(i)); ap_linexpr1_set_coeff_scalar(&expr, exprItems->at(i), scalar); } abst = ap_abstract1_assign_linexpr(man, true, &abst, var, &expr, NULL); ap_scalar_free(scalar); ap_linexpr1_clear(&expr); return abst; }
void ap_linexpr0_fprint(FILE* stream, ap_linexpr0_t* a, char** name_of_dim) { size_t i; ap_scalar_t* pscalar = 0; ap_scalar_t* scalar; ap_coeff_t* coeff; ap_dim_t dim; bool first; int sgn; scalar = ap_scalar_alloc(); first = true; ap_linexpr0_ForeachLinterm(a,i,dim,coeff){ if (! ap_coeff_zero(coeff)){ switch(coeff->discr){ case AP_COEFF_SCALAR: pscalar = coeff->val.scalar; sgn = ap_scalar_sgn(pscalar); if (sgn > 0){ ap_scalar_set(scalar,pscalar); if (!first) fprintf(stream," + "); } else { ap_scalar_neg(scalar,pscalar); fprintf(stream, first ? "-" : " - "); } if (!ap_scalar_equal_int(scalar,1)) ap_scalar_fprint(stream,scalar); break; case AP_COEFF_INTERVAL: if (!first) fprintf(stream," + "); ap_interval_fprint(stream,coeff->val.interval); break; } if (name_of_dim) fprintf(stream,"%s",name_of_dim[dim]); else fprintf(stream,"x%lu",(unsigned long)dim); first = false; } } /* Constant */ if (first || !ap_coeff_zero(&a->cst)){ switch (a->cst.discr){ case AP_COEFF_SCALAR: pscalar = a->cst.val.scalar; sgn = ap_scalar_sgn(pscalar); if (sgn >= 0){ ap_scalar_set(scalar,pscalar); if (!first) fprintf(stream," + "); } else { ap_scalar_neg(scalar,pscalar); fprintf(stream, first ? "-" : " - "); } ap_scalar_fprint(stream,scalar); break; case AP_COEFF_INTERVAL: if (!first) fprintf(stream," + "); ap_interval_fprint(stream, a->cst.val.interval); break; } } ap_scalar_free(scalar); }