1*5971e316Smrg /*
2*5971e316Smrg * Copyright 2010 INRIA Saclay
3*5971e316Smrg *
4*5971e316Smrg * Use of this software is governed by the MIT license
5*5971e316Smrg *
6*5971e316Smrg * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
7*5971e316Smrg * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
8*5971e316Smrg * 91893 Orsay, France
9*5971e316Smrg */
10*5971e316Smrg
11*5971e316Smrg #include <isl_pw_macro.h>
12*5971e316Smrg
FN(PW,scale)13*5971e316Smrg __isl_give PW *FN(PW,scale)(__isl_take PW *pw, isl_int v)
14*5971e316Smrg {
15*5971e316Smrg int i;
16*5971e316Smrg isl_size n;
17*5971e316Smrg
18*5971e316Smrg if (isl_int_is_one(v))
19*5971e316Smrg return pw;
20*5971e316Smrg if (pw && DEFAULT_IS_ZERO && isl_int_is_zero(v)) {
21*5971e316Smrg PW *zero;
22*5971e316Smrg isl_space *space = FN(PW,get_space)(pw);
23*5971e316Smrg zero = FN(PW,ZERO)(space OPT_TYPE_ARG(pw->));
24*5971e316Smrg FN(PW,free)(pw);
25*5971e316Smrg return zero;
26*5971e316Smrg }
27*5971e316Smrg if (isl_int_is_neg(v))
28*5971e316Smrg pw = FN(PW,negate_type)(pw);
29*5971e316Smrg
30*5971e316Smrg n = FN(PW,n_piece)(pw);
31*5971e316Smrg if (n < 0)
32*5971e316Smrg return FN(PW,free)(pw);
33*5971e316Smrg for (i = 0; i < n; ++i) {
34*5971e316Smrg EL *el;
35*5971e316Smrg
36*5971e316Smrg el = FN(PW,take_base_at)(pw, i);
37*5971e316Smrg el = FN(EL,scale)(el, v);
38*5971e316Smrg pw = FN(PW,restore_base_at)(pw, i, el);
39*5971e316Smrg }
40*5971e316Smrg
41*5971e316Smrg return pw;
42*5971e316Smrg }
43