isl_seq.c File Reference

#include "isl_seq.h"

Include dependency graph for isl_seq.c:

Go to the source code of this file.

Functions

void isl_seq_clr (isl_int *p, unsigned len)
void isl_seq_neg (isl_int *dst, isl_int *src, unsigned len)
void isl_seq_cpy (isl_int *dst, isl_int *src, unsigned len)
void isl_seq_submul (isl_int *dst, isl_int f, isl_int *src, unsigned len)
void isl_seq_swp_or_cpy (isl_int *dst, isl_int *src, unsigned len)
void isl_seq_scale (isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_scale_down (isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_fdiv_q (isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_fdiv_r (isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_combine (isl_int *dst, isl_int m1, isl_int *src1, isl_int m2, isl_int *src2, unsigned len)
void isl_seq_elim (isl_int *dst, isl_int *src, unsigned pos, unsigned len, isl_int *m)
int isl_seq_eq (isl_int *p1, isl_int *p2, unsigned len)
int isl_seq_cmp (isl_int *p1, isl_int *p2, unsigned len)
int isl_seq_is_neg (isl_int *p1, isl_int *p2, unsigned len)
int isl_seq_first_non_zero (isl_int *p, unsigned len)
int isl_seq_abs_min_non_zero (isl_int *p, unsigned len)
void isl_seq_gcd (isl_int *p, unsigned len, isl_int *gcd)
void isl_seq_normalize (isl_int *p, unsigned len)
void isl_seq_lcm (isl_int *p, unsigned len, isl_int *lcm)
void isl_seq_inner_product (isl_int *p1, isl_int *p2, unsigned len, isl_int *prod)
uint32_t isl_seq_hash (isl_int *p, unsigned len, uint32_t hash)
uint32_t isl_seq_get_hash (isl_int *p, unsigned len)
uint32_t isl_seq_get_hash_bits (isl_int *p, unsigned len, unsigned bits)


Function Documentation

int isl_seq_abs_min_non_zero ( isl_int p,
unsigned  len 
)

Definition at line 156 of file isl_seq.c.

00157 {
00158         int i, min = isl_seq_first_non_zero(p, len);
00159         if (min < 0)
00160                 return -1;
00161         for (i = min + 1; i < len; ++i) {
00162                 if (isl_int_is_zero(p[i]))
00163                         continue;
00164                 if (isl_int_abs_lt(p[i], p[min]))
00165                         min = i;
00166         }
00167         return min;
00168 }

Here is the call graph for this function:

void isl_seq_clr ( isl_int p,
unsigned  len 
)

Definition at line 3 of file isl_seq.c.

00004 {
00005         int i;
00006         for (i = 0; i < len; ++i)
00007                 isl_int_set_si(p[i], 0);
00008 }

int isl_seq_cmp ( isl_int p1,
isl_int p2,
unsigned  len 
)

Definition at line 121 of file isl_seq.c.

00122 {
00123         int i;
00124         int cmp;
00125         for (i = 0; i < len; ++i)
00126                 if ((cmp = isl_int_cmp(p1[i], p2[i])) != 0)
00127                         return cmp;
00128         return 0;
00129 }

void isl_seq_combine ( isl_int dst,
isl_int  m1,
isl_int src1,
isl_int  m2,
isl_int src2,
unsigned  len 
)

Definition at line 66 of file isl_seq.c.

00068 {
00069         int i;
00070         isl_int tmp;
00071 
00072         isl_int_init(tmp);
00073         for (i = 0; i < len; ++i) {
00074                 isl_int_mul(tmp, m1, src1[i]);
00075                 isl_int_addmul(tmp, m2, src2[i]);
00076                 isl_int_set(dst[i], tmp);
00077         }
00078         isl_int_clear(tmp);
00079 }

void isl_seq_cpy ( isl_int dst,
isl_int src,
unsigned  len 
)

Definition at line 17 of file isl_seq.c.

00018 {
00019         int i;
00020         for (i = 0; i < len; ++i)
00021                 isl_int_set(dst[i], src[i]);
00022 }

void isl_seq_elim ( isl_int dst,
isl_int src,
unsigned  pos,
unsigned  len,
isl_int m 
)

Definition at line 85 of file isl_seq.c.

00087 {
00088         isl_int a;
00089         isl_int b;
00090 
00091         if (isl_int_is_zero(dst[pos]))
00092                 return;
00093 
00094         isl_int_init(a);
00095         isl_int_init(b);
00096 
00097         isl_int_gcd(a, src[pos], dst[pos]);
00098         isl_int_divexact(b, dst[pos], a);
00099         if (isl_int_is_pos(src[pos]))
00100                 isl_int_neg(b, b);
00101         isl_int_divexact(a, src[pos], a);
00102         isl_int_abs(a, a);
00103         isl_seq_combine(dst, a, dst, b, src, len);
00104 
00105         if (m)
00106                 isl_int_mul(*m, *m, a);
00107 
00108         isl_int_clear(a);
00109         isl_int_clear(b);
00110 }

Here is the call graph for this function:

int isl_seq_eq ( isl_int p1,
isl_int p2,
unsigned  len 
)

Definition at line 112 of file isl_seq.c.

00113 {
00114         int i;
00115         for (i = 0; i < len; ++i)
00116                 if (isl_int_ne(p1[i], p2[i]))
00117                         return 0;
00118         return 1;
00119 }

void isl_seq_fdiv_q ( isl_int dst,
isl_int src,
isl_int  m,
unsigned  len 
)

Definition at line 52 of file isl_seq.c.

00053 {
00054         int i;
00055         for (i = 0; i < len; ++i)
00056                 isl_int_fdiv_q(dst[i], src[i], m);
00057 }

void isl_seq_fdiv_r ( isl_int dst,
isl_int src,
isl_int  m,
unsigned  len 
)

Definition at line 59 of file isl_seq.c.

00060 {
00061         int i;
00062         for (i = 0; i < len; ++i)
00063                 isl_int_fdiv_r(dst[i], src[i], m);
00064 }

int isl_seq_first_non_zero ( isl_int p,
unsigned  len 
)

Definition at line 146 of file isl_seq.c.

00147 {
00148         int i;
00149 
00150         for (i = 0; i < len; ++i)
00151                 if (!isl_int_is_zero(p[i]))
00152                         return i;
00153         return -1;
00154 }

void isl_seq_gcd ( isl_int p,
unsigned  len,
isl_int gcd 
)

Definition at line 170 of file isl_seq.c.

00171 {
00172         int i, min = isl_seq_abs_min_non_zero(p, len);
00173 
00174         if (min < 0) {
00175                 isl_int_set_si(*gcd, 0);
00176                 return;
00177         }
00178         isl_int_abs(*gcd, p[min]);
00179         for (i = 0; isl_int_cmp_si(*gcd, 1) > 0 && i < len; ++i) {
00180                 if (i == min)
00181                         continue;
00182                 if (isl_int_is_zero(p[i]))
00183                         continue;
00184                 isl_int_gcd(*gcd, *gcd, p[i]);
00185         }
00186 }

Here is the call graph for this function:

uint32_t isl_seq_get_hash ( isl_int p,
unsigned  len 
)

Definition at line 240 of file isl_seq.c.

00241 {
00242         uint32_t hash = isl_hash_init();
00243 
00244         return isl_seq_hash(p, len, hash);
00245 }

Here is the call graph for this function:

uint32_t isl_seq_get_hash_bits ( isl_int p,
unsigned  len,
unsigned  bits 
)

Definition at line 247 of file isl_seq.c.

00248 {
00249         uint32_t hash;
00250 
00251         hash = isl_seq_get_hash(p, len);
00252         return isl_hash_bits(hash, bits);
00253 }

Here is the call graph for this function:

uint32_t isl_seq_hash ( isl_int p,
unsigned  len,
uint32_t  hash 
)

Definition at line 227 of file isl_seq.c.

00228 {
00229         int i;
00230         for (i = 0; i < len; ++i) {
00231                 if (isl_int_is_zero(p[i]))
00232                         continue;
00233                 hash *= 16777619;
00234                 hash ^= (i & 0xFF);
00235                 hash = isl_int_hash(p[i], hash);
00236         }
00237         return hash;
00238 }

void isl_seq_inner_product ( isl_int p1,
isl_int p2,
unsigned  len,
isl_int prod 
)

Definition at line 214 of file isl_seq.c.

00216 {
00217         int i;
00218         if (len == 0) {
00219                 isl_int_set_si(*prod, 0);
00220                 return;
00221         }
00222         isl_int_mul(*prod, p1[0], p2[0]);
00223         for (i = 1; i < len; ++i)
00224                 isl_int_addmul(*prod, p1[i], p2[i]);
00225 }

int isl_seq_is_neg ( isl_int p1,
isl_int p2,
unsigned  len 
)

Definition at line 131 of file isl_seq.c.

00132 {
00133         int i;
00134 
00135         for (i = 0; i < len; ++i) {
00136                 if (isl_int_abs_ne(p1[i], p2[i]))
00137                         return 0;
00138                 if (isl_int_is_zero(p1[i]))
00139                         continue;
00140                 if (isl_int_eq(p1[i], p2[i]))
00141                         return 0;
00142         }
00143         return 1;
00144 }

void isl_seq_lcm ( isl_int p,
unsigned  len,
isl_int lcm 
)

Definition at line 201 of file isl_seq.c.

00202 {
00203         int i;
00204 
00205         if (len == 0) {
00206                 isl_int_set_si(*lcm, 1);
00207                 return;
00208         }
00209         isl_int_set(*lcm, p[0]);
00210         for (i = 1; i < len; ++i)
00211                 isl_int_lcm(*lcm, *lcm, p[i]);
00212 }

void isl_seq_neg ( isl_int dst,
isl_int src,
unsigned  len 
)

Definition at line 10 of file isl_seq.c.

00011 {
00012         int i;
00013         for (i = 0; i < len; ++i)
00014                 isl_int_neg(dst[i], src[i]);
00015 }

void isl_seq_normalize ( isl_int p,
unsigned  len 
)

Definition at line 188 of file isl_seq.c.

00189 {
00190         isl_int gcd;
00191 
00192         if (len == 0)
00193                 return;
00194         isl_int_init(gcd);
00195         isl_seq_gcd(p, len, &gcd);
00196         if (!isl_int_is_zero(gcd))
00197                 isl_seq_scale_down(p, p, gcd, len);
00198         isl_int_clear(gcd);
00199 }

Here is the call graph for this function:

void isl_seq_scale ( isl_int dst,
isl_int src,
isl_int  m,
unsigned  len 
)

Definition at line 38 of file isl_seq.c.

00039 {
00040         int i;
00041         for (i = 0; i < len; ++i)
00042                 isl_int_mul(dst[i], src[i], m);
00043 }

void isl_seq_scale_down ( isl_int dst,
isl_int src,
isl_int  m,
unsigned  len 
)

Definition at line 45 of file isl_seq.c.

00046 {
00047         int i;
00048         for (i = 0; i < len; ++i)
00049                 isl_int_divexact(dst[i], src[i], m);
00050 }

void isl_seq_submul ( isl_int dst,
isl_int  f,
isl_int src,
unsigned  len 
)

Definition at line 24 of file isl_seq.c.

00025 {
00026         int i;
00027         for (i = 0; i < len; ++i)
00028                 isl_int_submul(dst[i], f, src[i]);
00029 }

void isl_seq_swp_or_cpy ( isl_int dst,
isl_int src,
unsigned  len 
)

Definition at line 31 of file isl_seq.c.

00032 {
00033         int i;
00034         for (i = 0; i < len; ++i)
00035                 isl_int_swap_or_set(dst[i], src[i]);
00036 }


Generated on Mon Jul 13 06:57:25 2009 for ISL - Integer Set Library by  doxygen 1.5.7.1