LCOV - code coverage report
Current view: top level - metalib_isl - isl_pw_eval.c (source / functions) Hit Total Coverage
Test: 2018-10-31_point_maint_greina16.lcov Lines: 0 36 0.0 %
Date: 2018-11-01 11:27:00 Functions: 0 6 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright 2010      INRIA Saclay
       3             :  * Copyright 2013      Ecole Normale Superieure
       4             :  *
       5             :  * Use of this software is governed by the MIT license
       6             :  *
       7             :  * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
       8             :  * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
       9             :  * 91893 Orsay, France
      10             :  * and Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
      11             :  */
      12             : 
      13             : #include <isl/val.h>
      14             : #include <isl_space_private.h>
      15             : #include <isl_point_private.h>
      16             : 
      17             : #include <isl_pw_macro.h>
      18             : 
      19             : /* Evaluate "pw" in the void point "pnt".
      20             :  * In particular, return the value NaN.
      21             :  */
      22           0 : static __isl_give isl_val *FN(PW,eval_void)(__isl_take PW *pw,
      23             :         __isl_take isl_point *pnt)
      24             : {
      25             :         isl_ctx *ctx;
      26             : 
      27           0 :         ctx = isl_point_get_ctx(pnt);
      28           0 :         FN(PW,free)(pw);
      29           0 :         isl_point_free(pnt);
      30           0 :         return isl_val_nan(ctx);
      31             : }
      32             : 
      33             : /* Evaluate the piecewise function "pw" in "pnt".
      34             :  * If the point is void, then return NaN.
      35             :  * If the point lies outside the domain of "pw", then return 0 or NaN
      36             :  * depending on whether 0 is the default value for this type of function.
      37             :  */
      38           0 : __isl_give isl_val *FN(PW,eval)(__isl_take PW *pw, __isl_take isl_point *pnt)
      39             : {
      40             :         int i;
      41             :         isl_bool is_void;
      42             :         isl_bool found;
      43             :         isl_ctx *ctx;
      44             :         isl_bool ok;
      45             :         isl_space *pnt_space, *pw_space;
      46             :         isl_val *v;
      47             : 
      48           0 :         pnt_space = isl_point_peek_space(pnt);
      49           0 :         pw_space = FN(PW,peek_space)(pw);
      50           0 :         ok = isl_space_is_domain_internal(pnt_space, pw_space);
      51           0 :         if (ok < 0)
      52           0 :                 goto error;
      53           0 :         ctx = isl_point_get_ctx(pnt);
      54           0 :         if (!ok)
      55           0 :                 isl_die(ctx, isl_error_invalid,
      56             :                         "incompatible spaces", goto error);
      57           0 :         is_void = isl_point_is_void(pnt);
      58           0 :         if (is_void < 0)
      59           0 :                 goto error;
      60           0 :         if (is_void)
      61           0 :                 return FN(PW,eval_void)(pw, pnt);
      62             : 
      63           0 :         found = isl_bool_false;
      64           0 :         for (i = 0; i < pw->n; ++i) {
      65           0 :                 found = isl_set_contains_point(pw->p[i].set, pnt);
      66           0 :                 if (found < 0)
      67           0 :                         goto error;
      68           0 :                 if (found)
      69           0 :                         break;
      70             :         }
      71           0 :         if (found) {
      72           0 :                 v = FN(EL,eval)(FN(EL,copy)(pw->p[i].FIELD),
      73             :                                             isl_point_copy(pnt));
      74             :         } else if (DEFAULT_IS_ZERO) {
      75           0 :                 v = isl_val_zero(ctx);
      76             :         } else {
      77           0 :                 v = isl_val_nan(ctx);
      78             :         }
      79           0 :         FN(PW,free)(pw);
      80           0 :         isl_point_free(pnt);
      81           0 :         return v;
      82             : error:
      83           0 :         FN(PW,free)(pw);
      84           0 :         isl_point_free(pnt);
      85           0 :         return NULL;
      86             : }

Generated by: LCOV version 1.12