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