=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/cmo.c,v retrieving revision 1.14 retrieving revision 1.22 diff -u -p -r1.14 -r1.22 --- OpenXM/src/ox_toolkit/cmo.c 2003/08/21 12:44:06 1.14 +++ OpenXM/src/ox_toolkit/cmo.c 2007/03/14 10:30:54 1.22 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM: OpenXM/src/ox_toolkit/cmo.c,v 1.13 2003/06/05 21:12:07 ohara Exp $ */ +/* $OpenXM: OpenXM/src/ox_toolkit/cmo.c,v 1.21 2005/10/12 04:03:37 takayama Exp $ */ /* This module includes functions for sending/receiveng CMO's. @@ -165,6 +165,26 @@ cmo_list* new_cmo_list() return c; } +cmo_list* new_cmo_list_array(void *array[], int n) +{ + int i; + cmo_list* c = new_cmo_list(); + for(i=0; itag = CMO_QQ; + mpq_init(c->mpq); + return c; +} + +cmo_qq* new_cmo_qq_set_mpq(mpq_ptr q) +{ + cmo_qq* c = new_cmo_qq(); + mpq_set(c->mpq, q); + return c; +} + +cmo_qq* new_cmo_qq_set_mpz(mpz_ptr num, mpz_ptr den) +{ + cmo_qq* c = new_cmo_qq(); + mpq_set_num(c->mpq, num); + mpq_set_den(c->mpq, den); + return c; +} + cmo_zero* new_cmo_zero() { cmo_zero* m = MALLOC_ATOMIC(sizeof(cmo_zero)); @@ -235,7 +278,7 @@ cmo_zero* new_cmo_zero() cmo_double *new_cmo_double(double d) { cmo_double* m = MALLOC_ATOMIC(sizeof(cmo_double)); - m->tag = CMO_64BIT_MACHINE_DOUBLE; + m->tag = CMO_IEEE_DOUBLE_FLOAT; m->d = d; return m; } @@ -285,7 +328,7 @@ cmo_polynomial_in_one_variable* new_cmo_polynomial_in_ return c; } -cmo_recursive_polynomial* new_cmo_recursive_polynomial(cmo* ringdef, cmo* coef) +cmo_recursive_polynomial* new_cmo_recursive_polynomial(cmo_list* ringdef, cmo* coef) { cmo_recursive_polynomial* c = MALLOC(sizeof(cmo_recursive_polynomial)); c->tag = CMO_RECURSIVE_POLYNOMIAL; @@ -294,6 +337,25 @@ cmo_recursive_polynomial* new_cmo_recursive_polynomial return c; } +cmo_tree* new_cmo_tree(cmo_string* name, cmo_list* attributes, cmo_list* leaves) +{ + cmo_tree* c = MALLOC(sizeof(cmo_tree)); + c->tag = CMO_TREE; + c->name= name; + c->attributes = attributes; + c->leaves = leaves; + return c; +} + +cmo_lambda* new_cmo_lambda(cmo_list* args, cmo_tree* body) +{ + cmo_lambda* c = MALLOC(sizeof(cmo_lambda)); + c->tag = CMO_LAMBDA; + c->args = args; + c->body = body; + return c; +} + cmo_error2* new_cmo_error2(cmo* ob) { cmo_error2* c = MALLOC(sizeof(cmo_error2)); @@ -347,7 +409,8 @@ static char *new_string_set_cmo_list(cmo_list *m) strcat(s, sp[i]); strcat(s, " , "); } - strcat(s, sp[len-1]); + if (len > 0) + strcat(s, sp[len-1]); strcat(s, " ]"); return s; } @@ -377,8 +440,9 @@ char *new_string_set_cmo(cmo *m) return new_string_set_cmo_null(); case CMO_LIST: return new_string_set_cmo_list((cmo_list *)m); - case CMO_64BIT_MACHINE_DOUBLE: - return new_string_set_cmo_int32(m); + case CMO_64BIT_MACHINE_DOUBLE: + case CMO_IEEE_DOUBLE_FLOAT: + return new_string_set_cmo_double((cmo_double *)m); default: ox_printf("unconvertible <%s>\n", get_symbol_by_tag(m->tag)); /* yet not implemented. */