=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/include/ca.h,v retrieving revision 1.52 retrieving revision 1.56 diff -u -p -r1.52 -r1.56 --- OpenXM_contrib2/asir2000/include/ca.h 2004/10/06 11:58:52 1.52 +++ OpenXM_contrib2/asir2000/include/ca.h 2005/07/03 10:19:23 1.56 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.51 2004/08/18 00:17:02 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.55 2004/12/18 16:50:10 saito Exp $ */ #include #include @@ -125,6 +125,9 @@ typedef void * pointer; #define O_DPV 22 #define O_QUOTEARG 23 #define O_VOID -1 +/* IMAT */ +#define O_IMAT 24 +/* IMAT */ #define N_Q 0 #define N_R 1 @@ -137,6 +140,7 @@ typedef void * pointer; #define N_GFPN 8 #define N_GFS 9 #define N_GFSN 10 +#define N_DA 11 #define ORD_REVGRADLEX 0 #define ORD_GRADLEX 1 @@ -251,6 +255,15 @@ typedef struct oGFPN { struct oUP *body; } *GFPN; +typedef struct oDAlg { + short id; + char nid; + char pad; + struct oDP *nm; + struct oQ *dn; +} *DAlg; + + typedef struct oNum { short id; char nid; @@ -313,6 +326,28 @@ typedef struct oGF2MAT { unsigned int **body; } *GF2MAT, *GFMMAT; +/* IMAT */ +#define IMATCH 64 + +typedef struct oIENT { + int cr; + int row, col; + pointer *body; +} IENT; + +typedef struct oIMATC { + pointer *fore; + pointer *next; + IENT ient[IMATCH]; +} *IMATC; + +typedef struct oIMAT { + short id; + int row, col, clen; + pointer *root; + pointer *toor; +} *IMAT; +/* IMAT */ typedef struct oLIST { short id; short pad; @@ -588,6 +623,18 @@ struct modorder_spec { int *degree_shift; }; +typedef struct oNumberField { + int n; + int dim; + VL vl; + P *defpoly; + DP *mb; + DP *ps; + struct oDAlg *one; + NODE ind; + struct order_spec *spec; +} *NumberField; + /* structure for cputime */ struct oEGT { @@ -766,8 +813,13 @@ bzero((char *)(q)->b,(w)*sizeof(unsigned int))) #define NEWMAT(l) ((l)=(MAT)MALLOC(sizeof(struct oMAT)),OID(l)=O_MAT) #define NEWGF2MAT(l) ((l)=(GF2MAT)MALLOC(sizeof(struct oGF2MAT)),OID(l)=O_GF2MAT) #define NEWGFMMAT(l) ((l)=(GFMMAT)MALLOC(sizeof(struct oGF2MAT)),OID(l)=O_GFMMAT) +/* IMAT */ +#define NEWIMAT(l) ((l)=(IMAT)MALLOC(sizeof(struct oIMAT)),OID(l)=O_IMAT,l->clen=0,l->root=0,l->toor=0) +#define NEWIENT(l) ((l)=(IMATC)MALLOC(sizeof(struct oIMATC)),l->fore=0,l->next=0) +/* IMAT */ #define NEWReal(q) ((q)=(Real)MALLOC_ATOMIC(sizeof(struct oReal)),OID(q)=O_N,NID(q)=N_R) #define NEWAlg(r) ((r)=(Alg)MALLOC(sizeof(struct oAlg)),OID(r)=O_N,NID(r)=N_A) +#define NEWDAlg(r) ((r)=(DAlg)MALLOC(sizeof(struct oDAlg)),OID(r)=O_N,NID(r)=N_DA) #define NEWBF(q,l) ((q)=(BF)MALLOC_ATOMIC(TRUESIZE(oBF,(l)-1,long)),OID(q)=O_N,NID(q)=N_B) #define NEWC(r) ((r)=(C)MALLOC(sizeof(struct oC)),OID(r)=O_N,NID(r)=N_C) #define NEWLM(r) ((r)=(LM)MALLOC(sizeof(struct oLM)),OID(r)=O_N,NID(r)=N_LM) @@ -860,6 +912,7 @@ PL(NM(q))=1,BD(NM(q))[0]=(unsigned int)(n),DN(q)=0,(q) #define MKReal(a,b) (!(a)?((b)=0):(NEWReal(b),BDY(b)=(a),(b))) #define MKAlg(b,r) \ (!(b)?((r)=0):NUM(b)?((r)=(Alg)(b)):(NEWAlg(r),BDY(r)=(Obj)(b),(r))) +#define MKDAlg(dp,den,r) (NEWDAlg(r),(r)->nm = (dp),(r)->dn=(den)) #define IMM_MAX 1073741823 #define IMM_MIN -1073741823 @@ -969,9 +1022,6 @@ extern const int sprime[]; extern int sprime[]; #endif -extern int lprime_size; -extern int *lprime; - extern void (*addnumt[])(); extern void (*subnumt[])(); extern void (*mulnumt[])(); @@ -1450,6 +1500,14 @@ void chsgngfsn(GFSN,GFSN *); void pwrgfsn(GFSN,Q, GFSN *); int cmpgfsn(GFSN,GFSN); +void adddalg(DAlg,DAlg,DAlg *); +void subdalg(DAlg,DAlg,DAlg *); +void muldalg(DAlg,DAlg,DAlg *); +void divdalg(DAlg,DAlg,DAlg *); +void chsgndalg(DAlg,DAlg *); +void pwrdalg(DAlg,Q, DAlg *); +int cmpdalg(DAlg,DAlg); + void addalg(Num,Num,Num *); void addbf(Num,Num,Num *); void addcplx(Num,Num,Num *); @@ -1771,6 +1829,7 @@ void savep(FILE *,P); void savegf2n(FILE *,GF2N); void savegfpn(FILE *,GFPN); void savegfs(FILE *,GFS); +void savedalg(FILE *,DAlg); void savelm(FILE *,LM); void savemi(FILE *,MQ); void savecplx(FILE *,C); @@ -1796,6 +1855,7 @@ void loadgf2n(FILE *,GF2N *); void loadgfpn(FILE *,GFPN *); void loadgfs(FILE *,GFS *); void loadgfsn(FILE *,GFSN *); +void loaddalg(FILE *,DAlg *); void loadlm(FILE *,LM *); void loadmi(FILE *,MQ *); void loadcplx(FILE *,C *); @@ -2497,6 +2557,28 @@ void afctrmain(VL vl,P p0,P p,int init,DCP *dcp); int divtmp(VL vl,int mod,P p1,P p2,P *q); int divtdcmp(VL vl,int mod,P p1,P p2,P *q); void GC_gcollect(); + +/* IMAT */ +void Pnewimat(NODE, IMAT *); +void PChsgnI(NODE, IMAT *); +void Pm2Im(NODE, IMAT *); +void PIm2m(NODE, MAT *); + +void AddMatI(VL, IMAT, IMAT, IMAT *); +void MulMatI(VL, IMAT, IMAT, IMAT *); +void MulMatG(VL, Obj, Obj, Obj *); +void MulrMatI(VL, Obj, Obj, Obj *); +void MulMatS(VL, IMAT, IMAT, IMAT *); +void PutIent(IMAT, int, int, Obj); +void GetIent(IMAT, int, int, Obj); +void GetIbody(IMAT, int, int, Obj *); +void ChsgnI(IMAT, IMAT *c); +void AppendIent(IMAT, int, int, Obj); +void MEnt(int, int, int, Obj, IENT *); +void GetForeIent(IMATC *, IENT *, int *); +void GetNextIent(IMATC *, IENT *, int *); +void SubMatI(VL, IMAT, IMAT, IMAT *); +/* IMAT */ Z stoz(int c); Z utoz(unsigned int c);