1 #ifndef MPFQ_VBASE_H_
2 #define MPFQ_VBASE_H_
3 
4 /* MPFQ generated file -- do not edit */
5 
6 #include <stddef.h>
7 #include <stdio.h>
8 #include <gmp.h>
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 struct mpfq_vbase_s;
15 typedef struct mpfq_vbase_s * mpfq_vbase_ptr;
16 typedef struct mpfq_vbase_s const * mpfq_vbase_srcptr;
17 
18 struct mpfq_vbase_tmpl_s;
19 typedef struct mpfq_vbase_tmpl_s * mpfq_vbase_tmpl_ptr;
20 typedef struct mpfq_vbase_tmpl_s const * mpfq_vbase_tmpl_srcptr;
21 
22 struct mpfq_vbase_s {
23     void * obj; /* pointer to global implementation private fields */
24     const char * (*impl_name)();
25     unsigned long (*impl_max_characteristic_bits)();
26     unsigned long (*impl_max_degree)();
27     void (*field_characteristic)(mpfq_vbase_ptr, mpz_ptr);
28     mpz_srcptr (*field_characteristic_srcptr)(mpfq_vbase_ptr);
29     unsigned long (*field_characteristic_bits)(mpfq_vbase_ptr);
30     int (*field_degree)(mpfq_vbase_ptr);
31     void (*field_init)(mpfq_vbase_ptr);
32     void (*field_clear)(mpfq_vbase_ptr);
33     void (*field_specify)(mpfq_vbase_ptr, unsigned long, const void *);
34     void (*field_setopt)(mpfq_vbase_ptr, unsigned long, void *);
35     void (*init)(mpfq_vbase_ptr, void *);
36     void (*clear)(mpfq_vbase_ptr, void *);
37     ptrdiff_t (*elt_stride)(mpfq_vbase_ptr);
38     void (*set)(mpfq_vbase_ptr, void *, const void *);
39     void (*set_ui)(mpfq_vbase_ptr, void *, unsigned long);
40     void (*set_zero)(mpfq_vbase_ptr, void *);
41     unsigned long (*get_ui)(mpfq_vbase_ptr, const void *);
42     void (*set_mpn)(mpfq_vbase_ptr, void *, mp_limb_t *, size_t);
43     void (*set_mpz)(mpfq_vbase_ptr, void *, mpz_srcptr);
44     void (*get_mpn)(mpfq_vbase_ptr, mp_limb_t *, const void *);
45     void (*get_mpz)(mpfq_vbase_ptr, mpz_ptr, const void *);
46     void (*random)(mpfq_vbase_ptr, void *, gmp_randstate_t);
47     void (*random2)(mpfq_vbase_ptr, void *, gmp_randstate_t);
48     void (*add)(mpfq_vbase_ptr, void *, const void *, const void *);
49     void (*sub)(mpfq_vbase_ptr, void *, const void *, const void *);
50     void (*neg)(mpfq_vbase_ptr, void *, const void *);
51     void (*mul)(mpfq_vbase_ptr, void *, const void *, const void *);
52     void (*sqr)(mpfq_vbase_ptr, void *, const void *);
53     int (*is_sqr)(mpfq_vbase_ptr, const void *);
54     int (*sqrt)(mpfq_vbase_ptr, void *, const void *);
55     void (*pow)(mpfq_vbase_ptr, void *, const void *, unsigned long *, size_t);
56     void (*powz)(mpfq_vbase_ptr, void *, const void *, mpz_srcptr);
57     void (*frobenius)(mpfq_vbase_ptr, void *, const void *);
58     void (*add_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
59     void (*sub_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
60     void (*mul_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
61     void (*normalize)(mpfq_vbase_ptr, void *);
62     int (*inv)(mpfq_vbase_ptr, void *, const void *);
63     void (*hadamard)(mpfq_vbase_ptr, void *, void *, void *, void *);
64     void (*elt_ur_init)(mpfq_vbase_ptr, void *);
65     void (*elt_ur_clear)(mpfq_vbase_ptr, void *);
66     ptrdiff_t (*elt_ur_stride)(mpfq_vbase_ptr);
67     void (*elt_ur_set)(mpfq_vbase_ptr, void *, const void *);
68     void (*elt_ur_set_elt)(mpfq_vbase_ptr, void *, const void *);
69     void (*elt_ur_set_zero)(mpfq_vbase_ptr, void *);
70     void (*elt_ur_set_ui)(mpfq_vbase_ptr, void *, unsigned long);
71     void (*elt_ur_add)(mpfq_vbase_ptr, void *, const void *, const void *);
72     void (*elt_ur_neg)(mpfq_vbase_ptr, void *, const void *);
73     void (*elt_ur_sub)(mpfq_vbase_ptr, void *, const void *, const void *);
74     void (*mul_ur)(mpfq_vbase_ptr, void *, const void *, const void *);
75     void (*sqr_ur)(mpfq_vbase_ptr, void *, const void *);
76     void (*reduce)(mpfq_vbase_ptr, void *, void *);
77     void (*addmul_si_ur)(mpfq_vbase_ptr, void *, const void *, long);
78     int (*cmp)(mpfq_vbase_ptr, const void *, const void *);
79     int (*cmp_ui)(mpfq_vbase_ptr, const void *, unsigned long);
80     int (*is_zero)(mpfq_vbase_ptr, const void *);
81     int (*asprint)(mpfq_vbase_ptr, char * *, const void *);
82     int (*fprint)(mpfq_vbase_ptr, FILE *, const void *);
83     int (*print)(mpfq_vbase_ptr, const void *);
84     int (*sscan)(mpfq_vbase_ptr, void *, const char *);
85     int (*fscan)(mpfq_vbase_ptr, FILE *, void *);
86     int (*scan)(mpfq_vbase_ptr, void *);
87     int (*read)(mpfq_vbase_ptr, FILE *, void *);
88     int (*importdata)(mpfq_vbase_ptr, FILE *, void *, int, int);
89     int (*write)(mpfq_vbase_ptr, FILE *, const void *);
90     int (*exportdata)(mpfq_vbase_ptr, FILE *, const void *, int, int);
91     void (*vec_init)(mpfq_vbase_ptr, void *, unsigned long);
92     void (*vec_reinit)(mpfq_vbase_ptr, void *, unsigned long, unsigned long);
93     void (*vec_clear)(mpfq_vbase_ptr, void *, unsigned long);
94     void (*vec_set)(mpfq_vbase_ptr, void *, const void *, unsigned long);
95     void (*vec_set_zero)(mpfq_vbase_ptr, void *, unsigned long);
96     void (*vec_setcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned long);
97     void (*vec_setcoeff_ui)(mpfq_vbase_ptr, void *, unsigned long, unsigned long);
98     void (*vec_getcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned long);
99     void (*vec_add)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
100     void (*vec_neg)(mpfq_vbase_ptr, void *, const void *, unsigned long);
101     void (*vec_rev)(mpfq_vbase_ptr, void *, const void *, unsigned long);
102     void (*vec_sub)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
103     void (*vec_scal_mul)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
104     void (*vec_conv)(mpfq_vbase_ptr, void *, const void *, unsigned long, const void *, unsigned long);
105     void (*vec_random)(mpfq_vbase_ptr, void *, unsigned long, gmp_randstate_t);
106     void (*vec_random2)(mpfq_vbase_ptr, void *, unsigned long, gmp_randstate_t);
107     long (*vec_cmp)(mpfq_vbase_ptr, const void *, const void *, unsigned long);
108     long (*vec_is_zero)(mpfq_vbase_ptr, const void *, unsigned long);
109     void * (*vec_subvec)(mpfq_vbase_ptr, void *, long);
110     const void * (*vec_subvec_const)(mpfq_vbase_ptr, const void *, long);
111     void * (*vec_coeff_ptr)(mpfq_vbase_ptr, void *, long);
112     const void * (*vec_coeff_ptr_const)(mpfq_vbase_ptr, const void *, long);
113     long (*vec_asprint)(mpfq_vbase_ptr, char * *, const void *, unsigned long);
114     long (*vec_fprint)(mpfq_vbase_ptr, FILE *, const void *, unsigned long);
115     long (*vec_print)(mpfq_vbase_ptr, const void *, unsigned long);
116     long (*vec_sscan)(mpfq_vbase_ptr, void *, unsigned long *, const char *);
117     long (*vec_fscan)(mpfq_vbase_ptr, FILE *, void *, unsigned long *);
118     long (*vec_scan)(mpfq_vbase_ptr, void *, unsigned long *);
119     long (*vec_read)(mpfq_vbase_ptr, FILE *, void *, unsigned long);
120     long (*vec_write)(mpfq_vbase_ptr, FILE *, const void *, unsigned long);
121     long (*vec_import)(mpfq_vbase_ptr, void *, unsigned long, long, long);
122     long (*vec_export)(mpfq_vbase_ptr, const void *, unsigned long, long, long);
123     long (*vec_hamming_weight)(mpfq_vbase_ptr, const void *, unsigned long);
124     long (*vec_find_first_set)(mpfq_vbase_ptr, const void *, unsigned long);
125     long (*vec_simd_hamming_weight)(mpfq_vbase_ptr, const void *, unsigned long);
126     long (*vec_simd_find_first_set)(mpfq_vbase_ptr, const void *, unsigned long);
127     void (*vec_ur_init)(mpfq_vbase_ptr, void *, unsigned long);
128     void (*vec_ur_set_zero)(mpfq_vbase_ptr, void *, unsigned long);
129     void (*vec_ur_set_vec)(mpfq_vbase_ptr, void *, const void *, unsigned long);
130     void (*vec_ur_reinit)(mpfq_vbase_ptr, void *, unsigned long, unsigned long);
131     void (*vec_ur_clear)(mpfq_vbase_ptr, void *, unsigned long);
132     void (*vec_ur_set)(mpfq_vbase_ptr, void *, const void *, unsigned long);
133     void (*vec_ur_setcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned long);
134     void (*vec_ur_getcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned long);
135     void (*vec_ur_add)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
136     void (*vec_ur_sub)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
137     void (*vec_ur_neg)(mpfq_vbase_ptr, void *, const void *, unsigned long);
138     void (*vec_ur_rev)(mpfq_vbase_ptr, void *, const void *, unsigned long);
139     void (*vec_scal_mul_ur)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned long);
140     void (*vec_conv_ur)(mpfq_vbase_ptr, void *, const void *, unsigned long, const void *, unsigned long);
141     void (*vec_reduce)(mpfq_vbase_ptr, void *, void *, unsigned long);
142     void * (*vec_ur_subvec)(mpfq_vbase_ptr, void *, long);
143     const void * (*vec_ur_subvec_const)(mpfq_vbase_ptr, const void *, long);
144     void * (*vec_ur_coeff_ptr)(mpfq_vbase_ptr, void *, long);
145     const void * (*vec_ur_coeff_ptr_const)(mpfq_vbase_ptr, const void *, long);
146     ptrdiff_t (*vec_elt_stride)(mpfq_vbase_ptr, long);
147     ptrdiff_t (*vec_ur_elt_stride)(mpfq_vbase_ptr, long);
148     void (*poly_init)(mpfq_vbase_ptr, void *, unsigned int);
149     void (*poly_clear)(mpfq_vbase_ptr, void *);
150     void (*poly_set)(mpfq_vbase_ptr, void *, const void *);
151     void (*poly_setmonic)(mpfq_vbase_ptr, void *, const void *);
152     void (*poly_setcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned int);
153     void (*poly_setcoeff_ui)(mpfq_vbase_ptr, void *, unsigned long, unsigned int);
154     void (*poly_getcoeff)(mpfq_vbase_ptr, void *, const void *, unsigned int);
155     int (*poly_deg)(mpfq_vbase_ptr, const void *);
156     void (*poly_add)(mpfq_vbase_ptr, void *, const void *, const void *);
157     void (*poly_sub)(mpfq_vbase_ptr, void *, const void *, const void *);
158     void (*poly_set_ui)(mpfq_vbase_ptr, void *, unsigned long);
159     void (*poly_add_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
160     void (*poly_sub_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
161     void (*poly_neg)(mpfq_vbase_ptr, void *, const void *);
162     void (*poly_scal_mul)(mpfq_vbase_ptr, void *, const void *, const void *);
163     void (*poly_mul)(mpfq_vbase_ptr, void *, const void *, const void *);
164     int (*poly_divmod)(mpfq_vbase_ptr, void *, void *, const void *, const void *);
165     void (*poly_precomp_mod)(mpfq_vbase_ptr, void *, const void *);
166     void (*poly_mod_pre)(mpfq_vbase_ptr, void *, const void *, const void *, const void *);
167     void (*poly_gcd)(mpfq_vbase_ptr, void *, const void *, const void *);
168     void (*poly_xgcd)(mpfq_vbase_ptr, void *, void *, void *, const void *, const void *);
169     void (*poly_random)(mpfq_vbase_ptr, void *, unsigned int, gmp_randstate_t);
170     void (*poly_random2)(mpfq_vbase_ptr, void *, unsigned int, gmp_randstate_t);
171     int (*poly_cmp)(mpfq_vbase_ptr, const void *, const void *);
172     int (*poly_asprint)(mpfq_vbase_ptr, char * *, const void *);
173     int (*poly_fprint)(mpfq_vbase_ptr, FILE *, const void *);
174     int (*poly_print)(mpfq_vbase_ptr, const void *);
175     int (*poly_sscan)(mpfq_vbase_ptr, void *, const char *);
176     int (*poly_fscan)(mpfq_vbase_ptr, FILE *, void *);
177     int (*poly_scan)(mpfq_vbase_ptr, void *);
178     int (*simd_groupsize)(mpfq_vbase_ptr);
179     int (*simd_hamming_weight)(mpfq_vbase_ptr, const void *);
180     int (*simd_find_first_set)(mpfq_vbase_ptr, const void *);
181     unsigned long (*simd_get_ui_at)(mpfq_vbase_ptr, const void *, int);
182     void (*simd_set_ui_at)(mpfq_vbase_ptr, void *, int, unsigned long);
183     void (*simd_add_ui_at)(mpfq_vbase_ptr, void *, const void *, int, unsigned long);
184     void (*simd_set_ui_all)(mpfq_vbase_ptr, void *, unsigned long);
185     void (*add_dotprod)(mpfq_vbase_ptr, void *, const void *, const void *, unsigned int);
186     void (*mul_constant_ui)(mpfq_vbase_ptr, void *, const void *, unsigned long);
187     void (*oo_field_init)(mpfq_vbase_ptr);
188     void (*oo_field_clear)(mpfq_vbase_ptr);
189 };
190 
191 struct mpfq_vbase_tmpl_s {
192     void (*add_dotprod)(mpfq_vbase_ptr, mpfq_vbase_ptr, void *, const void *, const void *, unsigned int);
193     void (*addmul_tiny)(mpfq_vbase_ptr, mpfq_vbase_ptr, void *, const void *, const void *, unsigned int);
194     void (*transpose)(mpfq_vbase_ptr, mpfq_vbase_ptr, void *, const void *);
195 };
196 typedef struct mpfq_vbase_s mpfq_vbase[1];
197 typedef struct mpfq_vbase_tmpl_s mpfq_vbase_tmpl[1];
198 
199 void mpfq_vbase_oo_field_init_byfeatures(mpfq_vbase_ptr, ...);
200 void mpfq_vbase_oo_init_templates(mpfq_vbase_tmpl_ptr, mpfq_vbase_ptr, mpfq_vbase_ptr);
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif  /* MPFQ_VBASE_H_ */
207 
208 /* vim:set ft=cpp: */
209