=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/include/ca.h,v retrieving revision 1.54 retrieving revision 1.62 diff -u -p -r1.54 -r1.62 --- OpenXM_contrib2/asir2000/include/ca.h 2004/12/10 07:36:34 1.54 +++ OpenXM_contrib2/asir2000/include/ca.h 2005/11/27 00:07:05 1.62 @@ -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.53 2004/12/02 13:48:43 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.61 2005/11/16 23:42:54 noro Exp $ */ #include #include @@ -125,6 +125,10 @@ typedef void * pointer; #define O_DPV 22 #define O_QUOTEARG 23 #define O_VOID -1 +/* IMAT */ +#define O_IMAT 24 +/* IMAT */ +#define O_NBP 25 #define N_Q 0 #define N_R 1 @@ -323,6 +327,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; @@ -419,6 +445,30 @@ typedef struct oTB { char **body; } *TB; +typedef struct oNBP { + short id; + short pad; + struct oNODE *body; +} *NBP; + +/* non-commutative bivariate monomial */ + +typedef struct oNBM { + int d; + Q c; + unsigned int *b; +} *NBM; + +#define NEWNBM(p) ((p)=(NBM)MALLOC(sizeof(struct oNBM))) +#define NEWNBMBDY(p,d) \ +((p)->b=(unsigned int *)MALLOC((((d)+31)/32)*sizeof(unsigned int))) +#define NEWNBP(p) ((p)=(NBP)MALLOC(sizeof(struct oNBP)),OID(p)=O_NBP) +#define MKNBP(p,b) (NEWNBP(p),BDY(p)=(b)) + +#define NBM_GET(a,j) (((a)[(j)>>5]&(1<<((j)&31)))?1:0) +#define NBM_SET(a,j) ((a)[(j)>>5]|=(1<<((j)&31))) +#define NBM_CLR(a,j) ((a)[(j)>>5]&=(~(1<<((j)&31)))) + typedef struct oObj { short id; short pad; @@ -600,6 +650,7 @@ struct modorder_spec { typedef struct oNumberField { int n; + int psn; int dim; VL vl; P *defpoly; @@ -788,6 +839,10 @@ 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) @@ -993,9 +1048,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[])(); @@ -1266,7 +1318,7 @@ void copyn(N,int,int *); void kmulnmain(N,N,N *); int qcoefp(Obj); int qcoefr(Obj); -int get_allocwords(void); +long get_allocwords(void); double get_clock(void); void get_eg(struct oEGT *); void printtime(struct oEGT *,struct oEGT *,double); @@ -2532,6 +2584,28 @@ 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); Z qtoz(Q n); @@ -2558,3 +2632,10 @@ void bzero(const void *,int); void bcopy(const void *,void *,int); char *index(char *,int); #endif + +void chsgnnbp(NBP p,NBP *rp); +void subnbp(VL vl,NBP p1,NBP p2, NBP *rp); +void addnbp(VL vl,NBP p1,NBP p2, NBP *rp); +void mulnbp(VL vl,NBP p1,NBP p2, NBP *rp); +void pwrnbp(VL vl,NBP p1,Q n, NBP *rp); +int compnbp(VL vl,NBP p1,NBP p2);