=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/cmo.c,v retrieving revision 1.7 retrieving revision 1.12 diff -u -p -r1.7 -r1.12 --- OpenXM/src/ox_toolkit/cmo.c 2003/01/17 07:40:10 1.7 +++ OpenXM/src/ox_toolkit/cmo.c 2003/06/03 16:06:48 1.12 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM: OpenXM/src/ox_toolkit/cmo.c,v 1.6 2003/01/17 06:49:53 ohara Exp $ */ +/* $OpenXM: OpenXM/src/ox_toolkit/cmo.c,v 1.11 2003/06/02 10:25:56 ohara Exp $ */ /* This module includes functions for sending/receiveng CMO's. @@ -14,7 +14,7 @@ #include "ox_toolkit.h" #include "parse.h" -static cell* new_cell(); +static cell* new_cell(cmo *ob, int e); static char* new_string_set_cmo_null(); static char* new_string_set_cmo_int32(int integer); static char* new_string_set_cmo_list(cmo_list *c); @@ -22,12 +22,13 @@ static char* new_string_set_cmo_zz(cmo_zz *c); static char* new_string_set_cmo_double(cmo_double *m); /* functions for a cmo_list */ -static cell* new_cell(cmo *ob) +static cell* new_cell(cmo *ob, int e) { - cell* h = malloc(sizeof(cell)); + cell* h = MALLOC(sizeof(cell)); h->next = NULL; h->prev = NULL; h->cmo = ob; + h->exp = e; return h; } @@ -63,11 +64,18 @@ static void list_cons(cell *head, cell *new) cmo_list *list_append(cmo_list* this, cmo* ob) { - list_cons(this->head, new_cell(ob)); + list_cons(this->head, new_cell(ob, 0)); this->length++; return this; } +cmo_list *list_append_monomial(cmo_list* this, cmo* coef, int exp) +{ + list_cons(this->head, new_cell(coef, exp)); + this->length++; + return this; +} + /* call as list_appendl(List, ob1, ob2, ob3, NULL) */ cmo_list *list_appendl(cmo_list* this, ...) { @@ -112,7 +120,7 @@ void resize_mpz(mpz_ptr mpz, int size) /* functions named new_cmo_*. */ cmo_null* new_cmo_null() { - cmo_null* m = malloc(sizeof(cmo_null)); + cmo_null* m = MALLOC(sizeof(cmo_null)); m->tag = CMO_NULL; return m; } @@ -120,7 +128,7 @@ cmo_null* new_cmo_null() cmo_int32* new_cmo_int32(int i) { cmo_int32* c; - c = malloc(sizeof(cmo_int32)); + c = MALLOC(sizeof(cmo_int32)); c->tag = CMO_INT32; c->i = i; return c; @@ -128,10 +136,10 @@ cmo_int32* new_cmo_int32(int i) cmo_string* new_cmo_string(char* s) { - cmo_string* c = malloc(sizeof(cmo_string)); + cmo_string* c = MALLOC(sizeof(cmo_string)); c->tag = CMO_STRING; if (s != NULL) { - c->s = malloc(strlen(s)+1); + c->s = MALLOC(strlen(s)+1); strcpy(c->s, s); }else { c->s = NULL; @@ -141,7 +149,7 @@ cmo_string* new_cmo_string(char* s) cmo_mathcap* new_cmo_mathcap(cmo* ob) { - cmo_mathcap* c = malloc(sizeof(cmo_mathcap)); + cmo_mathcap* c = MALLOC(sizeof(cmo_mathcap)); c->tag = CMO_MATHCAP; c->ob = ob; return c; @@ -149,7 +157,7 @@ cmo_mathcap* new_cmo_mathcap(cmo* ob) cmo_list* new_cmo_list() { - cmo_list* c = malloc(sizeof(cmo_list)); + cmo_list* c = MALLOC(sizeof(cmo_list)); c->tag = CMO_LIST; c->length = 0; c->head->next = c->head; @@ -159,7 +167,7 @@ cmo_list* new_cmo_list() cmo_monomial32* new_cmo_monomial32() { - cmo_monomial32* c = malloc(sizeof(cmo_monomial32)); + cmo_monomial32* c = MALLOC(sizeof(cmo_monomial32)); c->tag = CMO_MONOMIAL32; return c; } @@ -169,14 +177,14 @@ cmo_monomial32* new_cmo_monomial32_size(int size) cmo_monomial32* c = new_cmo_monomial32(); if (size>0) { c->length = size; - c->exps = malloc(sizeof(int)*size); + c->exps = MALLOC(sizeof(int)*size); } return c; } cmo_zz* new_cmo_zz() { - cmo_zz* c = malloc(sizeof(cmo_zz)); + cmo_zz* c = MALLOC(sizeof(cmo_zz)); c->tag = CMO_ZZ; mpz_init(c->mpz); return c; @@ -184,7 +192,7 @@ cmo_zz* new_cmo_zz() cmo_zz* new_cmo_zz_noinit() { - cmo_zz* c = malloc(sizeof(cmo_zz)); + cmo_zz* c = MALLOC(sizeof(cmo_zz)); c->tag = CMO_ZZ; return c; } @@ -219,14 +227,14 @@ cmo_zz* new_cmo_zz_size(int size) cmo_zero* new_cmo_zero() { - cmo_zero* m = malloc(sizeof(cmo_zero)); + cmo_zero* m = MALLOC(sizeof(cmo_zero)); m->tag = CMO_ZERO; return m; } cmo_double *new_cmo_double(double d) { - cmo_double* m = malloc(sizeof(cmo_double)); + cmo_double* m = MALLOC(sizeof(cmo_double)); m->tag = CMO_64BIT_MACHINE_DOUBLE; m->d = d; return m; @@ -234,14 +242,14 @@ cmo_double *new_cmo_double(double d) cmo_dms_generic* new_cmo_dms_generic() { - cmo_dms_generic* m = malloc(sizeof(cmo_dms_generic)); + cmo_dms_generic* m = MALLOC(sizeof(cmo_dms_generic)); m->tag = CMO_DMS_GENERIC; return m; } cmo_ring_by_name* new_cmo_ring_by_name(cmo* ob) { - cmo_ring_by_name* c = malloc(sizeof(cmo_ring_by_name)); + cmo_ring_by_name* c = MALLOC(sizeof(cmo_ring_by_name)); c->tag = CMO_RING_BY_NAME; c->ob = ob; return c; @@ -249,7 +257,7 @@ cmo_ring_by_name* new_cmo_ring_by_name(cmo* ob) cmo_indeterminate* new_cmo_indeterminate(cmo* ob) { - cmo_indeterminate* c = malloc(sizeof(cmo_indeterminate)); + cmo_indeterminate* c = MALLOC(sizeof(cmo_indeterminate)); c->tag = CMO_INDETERMINATE; c->ob = ob; return c; @@ -257,7 +265,7 @@ cmo_indeterminate* new_cmo_indeterminate(cmo* ob) cmo_distributed_polynomial* new_cmo_distributed_polynomial() { - cmo_distributed_polynomial* c = malloc(sizeof(cmo_distributed_polynomial)); + cmo_distributed_polynomial* c = MALLOC(sizeof(cmo_distributed_polynomial)); c->tag = CMO_DISTRIBUTED_POLYNOMIAL; c->length = 0; c->head->next = c->head; @@ -268,7 +276,7 @@ cmo_distributed_polynomial* new_cmo_distributed_polyno cmo_error2* new_cmo_error2(cmo* ob) { - cmo_error2* c = malloc(sizeof(cmo_error2)); + cmo_error2* c = MALLOC(sizeof(cmo_error2)); c->tag = CMO_ERROR2; c->ob = ob; return c; @@ -293,7 +301,7 @@ static char *new_string_set_cmo_int32(int integer) char *s; sprintf(buff, "%d", integer); - s = malloc(strlen(buff)+1); + s = MALLOC(strlen(buff)+1); strcpy(s, buff); return s; @@ -305,7 +313,7 @@ static char *new_string_set_cmo_list(cmo_list *m) int i; int size = 0; int len = list_length(m); - char **sp = malloc(len*sizeof(cmo *)); + char **sp = ALLOCA(len*sizeof(cmo *)); cell* cp = list_first(m); for(i = 0; i < len; i++) { @@ -313,7 +321,7 @@ static char *new_string_set_cmo_list(cmo_list *m) size += strlen(sp[i]) + 3; cp = list_next(cp); } - s = malloc(size+2); + s = MALLOC(size+2); strcpy(s, "[ "); for(i = 0; i < len - 1; i++) { strcat(s, sp[i]); @@ -321,7 +329,6 @@ static char *new_string_set_cmo_list(cmo_list *m) } strcat(s, sp[len-1]); strcat(s, " ]"); - free(sp); return s; } @@ -331,7 +338,7 @@ static char *new_string_set_cmo_double(cmo_double *m) char *s; sprintf(buff, "%lf", m->d); - s = malloc(strlen(buff)+1); + s = MALLOC(strlen(buff)+1); strcpy(s, buff); return s; @@ -339,7 +346,6 @@ static char *new_string_set_cmo_double(cmo_double *m) char *new_string_set_cmo(cmo *m) { - symbol_t symp; switch(m->tag) { case CMO_ZZ: return new_string_set_cmo_zz((cmo_zz *)m); @@ -354,10 +360,7 @@ char *new_string_set_cmo(cmo *m) case CMO_64BIT_MACHINE_DOUBLE: return new_string_set_cmo_int32(m); default: -#ifdef DEBUG - symp = lookup_by_tag(m->tag); - ox_printf("I do not know how to convert %s to a string.\n", symp->key); -#endif + ox_printf("unconvertible <%s>\n", get_symbol_by_tag(m->tag)); /* yet not implemented. */ return NULL; }