Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-07 10:15:15

0001 /*
0002     Copyright (C) 2023 Albin Ahlbäck
0003 
0004     This file is part of FLINT.
0005 
0006     FLINT is free software: you can redistribute it and/or modify it under
0007     the terms of the GNU Lesser General Public License (LGPL) as published
0008     by the Free Software Foundation; either version 3 of the License, or
0009     (at your option) any later version.  See <https://www.gnu.org/licenses/>.
0010 */
0011 
0012 #ifndef FMPZ_MOD_TYPES_H
0013 #define FMPZ_MOD_TYPES_H
0014 
0015 #include "fmpz_types.h"
0016 
0017 #ifdef __cplusplus
0018 extern "C" {
0019 #endif
0020 
0021 typedef struct fmpz_mod_ctx
0022 {
0023     fmpz_t n;
0024     void (* add_fxn)(fmpz_t, const fmpz_t, const fmpz_t, const struct fmpz_mod_ctx *);
0025     void (* sub_fxn)(fmpz_t, const fmpz_t, const fmpz_t, const struct fmpz_mod_ctx *);
0026     void (* mul_fxn)(fmpz_t, const fmpz_t, const fmpz_t, const struct fmpz_mod_ctx *);
0027     nmod_t mod;
0028     ulong n_limbs[3];
0029     ulong ninv_limbs[3];
0030     fmpz_preinvn_struct * ninv_huge;
0031 }
0032 fmpz_mod_ctx_struct;
0033 
0034 typedef fmpz_mod_ctx_struct fmpz_mod_ctx_t[1];
0035 
0036 typedef fmpz_mat_struct fmpz_mod_mat_struct;
0037 
0038 typedef fmpz_mod_mat_struct fmpz_mod_mat_t[1];
0039 
0040 typedef struct
0041 {
0042     fmpz * coeffs;
0043     slong alloc;
0044     slong length;
0045 }
0046 fmpz_mod_poly_struct;
0047 
0048 typedef fmpz_mod_poly_struct fmpz_mod_poly_t[1];
0049 
0050 typedef struct
0051 {
0052     fmpz_mod_poly_struct * poly;
0053     slong *exp;
0054     slong num;
0055     slong alloc;
0056 }
0057 fmpz_mod_poly_factor_struct;
0058 
0059 typedef fmpz_mod_poly_factor_struct fmpz_mod_poly_factor_t[1];
0060 
0061 typedef struct
0062 {
0063     fmpz * coeffs;
0064     ulong * exps;
0065     slong length;
0066     flint_bitcnt_t bits;    /* number of bits per exponent */
0067     slong coeffs_alloc;     /* abs size in ulong units */
0068     slong exps_alloc;       /* abs size in ulong units */
0069 }
0070 fmpz_mod_mpoly_struct;
0071 
0072 typedef fmpz_mod_mpoly_struct fmpz_mod_mpoly_t[1];
0073 
0074 typedef struct
0075 {
0076     fmpz_t constant;
0077     fmpz_mod_mpoly_struct * poly;
0078     fmpz * exp;
0079     slong num;
0080     slong alloc;
0081 }
0082 fmpz_mod_mpoly_factor_struct;
0083 
0084 typedef fmpz_mod_mpoly_factor_struct fmpz_mod_mpoly_factor_t[1];
0085 
0086 typedef struct
0087 {
0088     fmpz_mod_mpoly_struct num;
0089     fmpz_mod_mpoly_struct den;
0090 }
0091 fmpz_mod_mpoly_q_struct;
0092 
0093 typedef fmpz_mod_mpoly_q_struct fmpz_mod_mpoly_q_t[1];
0094 
0095 #ifdef __cplusplus
0096 }
0097 #endif
0098 
0099 #endif /* FMPZ_MOD_TYPES_H */