1 
2 #ifndef NTL_vec_ZZ__H
3 #define NTL_vec_ZZ__H
4 
5 #include <NTL/ZZ.h>
6 #include <NTL/vector.h>
7 
8 NTL_OPEN_NNS
9 
10 typedef Vec<ZZ> vec_ZZ;
11 
12 void mul(vec_ZZ& x, const vec_ZZ& a, const ZZ& b);
mul(vec_ZZ & x,const ZZ & a,const vec_ZZ & b)13 inline void mul(vec_ZZ& x, const ZZ& a, const vec_ZZ& b)
14    { mul(x, b, a); }
15 
16 void mul(vec_ZZ& x, const vec_ZZ& a, long b);
mul(vec_ZZ & x,long a,const vec_ZZ & b)17 inline void mul(vec_ZZ& x, long a, const vec_ZZ& b)
18    { mul(x, b, a); }
19 
20 void add(vec_ZZ& x, const vec_ZZ& a, const vec_ZZ& b);
21 
22 void sub(vec_ZZ& x, const vec_ZZ& a, const vec_ZZ& b);
23 void clear(vec_ZZ& x);
24 void negate(vec_ZZ& x, const vec_ZZ& a);
25 
26 
27 
28 
29 void InnerProduct(ZZ& x, const vec_ZZ& a, const vec_ZZ& b);
30 
31 long IsZero(const vec_ZZ& a);
32 
33 vec_ZZ operator+(const vec_ZZ& a, const vec_ZZ& b);
34 vec_ZZ operator-(const vec_ZZ& a, const vec_ZZ& b);
35 vec_ZZ operator-(const vec_ZZ& a);
36 
37 inline vec_ZZ operator*(const vec_ZZ& a, const ZZ& b)
38    { vec_ZZ x; mul(x, a, b); NTL_OPT_RETURN(vec_ZZ, x); }
39 
40 inline vec_ZZ operator*(const vec_ZZ& a, long b)
41    { vec_ZZ x; mul(x, a, b); NTL_OPT_RETURN(vec_ZZ, x); }
42 
43 inline vec_ZZ operator*(const ZZ& a, const vec_ZZ& b)
44    { vec_ZZ x; mul(x, a, b); NTL_OPT_RETURN(vec_ZZ, x); }
45 
46 inline vec_ZZ operator*(long a, const vec_ZZ& b)
47    { vec_ZZ x; mul(x, a, b); NTL_OPT_RETURN(vec_ZZ, x); }
48 
49 
50 ZZ operator*(const vec_ZZ& a, const vec_ZZ& b);
51 
52 
53 
54 
55 
56 // assignment operator notation:
57 
58 inline vec_ZZ& operator+=(vec_ZZ& x, const vec_ZZ& a)
59 {
60    add(x, x, a);
61    return x;
62 }
63 
64 inline vec_ZZ& operator-=(vec_ZZ& x, const vec_ZZ& a)
65 {
66    sub(x, x, a);
67    return x;
68 }
69 
70 inline vec_ZZ& operator*=(vec_ZZ& x, const ZZ& a)
71 {
72    mul(x, x, a);
73    return x;
74 }
75 
76 inline vec_ZZ& operator*=(vec_ZZ& x, long a)
77 {
78    mul(x, x, a);
79    return x;
80 }
81 
82 void VectorCopy(vec_ZZ& x, const vec_ZZ& a, long n);
VectorCopy(const vec_ZZ & a,long n)83 inline vec_ZZ VectorCopy(const vec_ZZ& a, long n)
84    { vec_ZZ x; VectorCopy(x, a, n); NTL_OPT_RETURN(vec_ZZ, x); }
85 
86 
87 NTL_CLOSE_NNS
88 
89 
90 #endif
91