Пример #1
0
void japron_tcons0_clear(ap_tcons0_t* t)
{
  if (t->scalar) {
    ap_scalar_free(t->scalar);
    t->scalar = NULL;
  }
}
Пример #2
0
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;
  }
}
Пример #3
0
/* 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;
}
Пример #4
0
  /* 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;
  }
Пример #5
0
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);
}