Annotation of OpenXM/src/ox_math/ox.h, Revision 1.2
1.1 ohara 1: /* -*- mode: C; coding: euc-japan -*- */
2: /* $OpenXM$ */
1.2 ! ohara 3: /* $Id: ox.h,v 1.5 1999/11/01 18:00:34 ohara Exp $ */
1.1 ohara 4:
5: #ifndef _OX_H_
6:
7: #define _OX_H_
8:
9: #include <gmp.h>
10: #include "oxtag.h"
11:
12: /*
13: 関数の名前付け規約(その2)
14: (1) receive_cmo 関数はCMOタグとデータ本体を受信する. この関数は CMOタグの
15: 値が事前に分からないときに使用する. 返り値として、cmo へのポインタを返す。
16: (2) receive_cmo_XXX 関数は, CMOタグを親の関数で受信してから呼び出される関
17: 数で、データ本体のみを受信し、cmo_XXX へのポインタを返す。しかも、
18: 関数内部で new_cmo_XXX 関数を呼び出す。
19: (3) send_cmo 関数はCMOタグとデータ本体を送信する.
20: (4) send_cmo_XXX 関数はCMOタグを親の関数で送信してから呼び出される関数で、
21: データ本体のみを送信する.
22:
23: ----
24: (5) receive_ox_XXX 関数は存在しない(作らない). receive_cmo を利用する.
25: (6) send_ox_XXX 関数は OX タグを含めて送信する.
26: (7) ox_XXX 関数は一連の送受信を含むより抽象的な操作を表現する.
27: ox_XXX 関数は、第一引数として、ox_file_t型の変数 sv をとる.
28:
29: (8) YYY_cmo 関数と YYY_cmo_XXX 関数の関係は次の通り:
30: まず YYY_cmo 関数で cmo のタグを処理し、タグを除いた残りの部分を
31: YYY_cmo_XXX 関数が処理する。cmo の内部に cmo_ZZZ へのポインタが
32: あるときには、その種類によらずに YYY_cmo 関数を呼び出す
33: */
34:
35:
36: #define DEFAULT_LOGFILE "/tmp/result"
37:
38: /* サーバーとの通信路に用いるファイルディスクリプタのペア. */
39: typedef struct {
40: int stream;
41: int control;
42: } __ox_file_struct;
43:
44: typedef __ox_file_struct *ox_file_t;
45:
46: /*
47: 警告:
48: cmo_list 型のリストには破壊的な代入をしてはいけない.
49: cmo_list の各メンバに直接アクセスしてはいけない.
50: メソッド(..._cmo_list 関数)を用いること.
51: */
52:
53: /* ここからは新しい定義 */
54: typedef struct {
55: int tag;
56: } cmo;
57:
58: typedef cmo cmo_null;
1.2 ! ohara 59: typedef cmo cmo_zero;
! 60: typedef cmo cmo_dms_generic;
1.1 ohara 61:
62: typedef struct {
63: int tag;
64: int i;
65: } cmo_int32;
66:
67: typedef struct {
68: int tag;
1.2 ! ohara 69: int size;
! 70: char *body;
! 71: } cmo_datum;
! 72:
! 73: typedef struct {
! 74: int tag;
1.1 ohara 75: char *s;
76: } cmo_string;
77:
78: typedef struct {
79: int tag;
1.2 ! ohara 80: cmo *ob;
! 81: } cmo_mathcap;
! 82:
! 83: typedef cmo_mathcap cmo_error2;
! 84: typedef cmo_mathcap cmo_ring_by_name;
! 85: typedef cmo_mathcap cmo_indeterminate;
1.1 ohara 86:
87: typedef struct cell {
88: struct cell *next;
89: cmo *cmo;
90: } cell;
91:
92: typedef struct {
93: int tag;
94: int length; /* リストの長さ(必要??) */
95: cell *head;
96: } cmo_list;
97:
98: typedef struct {
1.2 ! ohara 99: int tag;
! 100: int length;
! 101: int *exps;
! 102: cmo *coef;
! 103: } cmo_monomial32;
! 104:
! 105: typedef struct {
1.1 ohara 106: int tag;
1.2 ! ohara 107: mpz_t mpz;
! 108: } cmo_zz;
1.1 ohara 109:
110: typedef struct {
111: int tag;
1.2 ! ohara 112: cmo *num; /* 分子 (cmo_zz) */
! 113: cmo *den; /* 分母 (cmo_zz) */
! 114: } cmo_qq;
1.1 ohara 115:
116: typedef cmo ox;
117:
118: typedef struct {
119: int tag;
120: int command;
121: } ox_command;
122:
123: typedef struct {
124: int tag;
125: cmo *cmo;
126: } ox_data;
127:
128: cell* new_cell(cmo* newcmo);
1.2 ! ohara 129: cmo_null* new_cmo_null();
1.1 ohara 130: cmo_int32* new_cmo_int32(int i);
1.2 ! ohara 131: cmo_string* new_cmo_string(char* s);
! 132: cmo_mathcap* new_cmo_mathcap(cmo* ob);
1.1 ohara 133: cmo_list* new_cmo_list();
1.2 ! ohara 134: cmo_monomial32* new_cmo_monomial32();
! 135: cmo_monomial32* new_cmo_monomial32_size(int size);
1.1 ohara 136: cmo_zz* new_cmo_zz();
137: cmo_zz* new_cmo_zz_size(int size);
138: cmo_zz* new_cmo_zz_set_si(int integer);
139: cmo_zz* new_cmo_zz_noinit();
1.2 ! ohara 140: cmo_zero* new_cmo_zero();
! 141: cmo_dms_generic* new_cmo_dms_generic();
! 142: cmo_ring_by_name* new_cmo_ring_by_name(cmo* ob);
! 143: cmo_indeterminate* new_cmo_indeterminate(cmo* ob);
! 144: cmo_error2* new_cmo_error2(cmo* ob);
! 145:
1.1 ohara 146: ox_data* new_ox_data(cmo* c);
147: ox_command* new_ox_command(int sm_code);
148:
1.2 ! ohara 149: cmo_error2* gen_error_object(int err_code);
1.1 ohara 150: cmo* make_mathcap_object(int version, char *id_string);
151:
152: void resize_mpz(mpz_ptr mpz, int size);
153: cmo* receive_cmo(int fd);
154: cmo* receive_cmo2(int fd);
155: int receive_int32(int fd);
156: int receive_ox_tag(int fd);
157:
158: int send_cmo(int fd, cmo* m);
159: int send_int32(int fd, int integer);
160: int send_ox(ox_file_t s, ox* m);
161: int send_ox_cmo(int fd, cmo* m);
162: void send_ox_command(int fd, int sm_command);
163: int send_ox_tag(int fd, int tag);
164:
165: int append_cmo_list(cmo_list* this, cmo *newcmo);
166: int length_cmo_list(cmo_list* this);
167: cell* next_cell(cell *this);
168: int cmolen_cmo(cmo* m);
169:
170: void ox_close(ox_file_t sv);
171: void ox_executeStringByLocalParser(ox_file_t sv, char* str);
172: cmo_mathcap* ox_mathcap(ox_file_t sv);
173: char* ox_popString(ox_file_t sv, int fd);
174: cmo* ox_pop_cmo(ox_file_t sv, int fd);
175: void ox_reset(ox_file_t sv);
176: ox_file_t ox_start(char* host, char* prog1, char* prog2);
177:
178: char* dump_cmo(char* array, cmo* m);
179: char* dump_ox_command(char* array, ox_command* m);
180: char* dump_ox_data(char* array, ox_data* m);
181:
182: int print_cmo(cmo* c);
183: int print_cmo_int32(cmo_int32* c);
184: int print_cmo_list(cmo_list* li);
185: int print_cmo_mathcap(cmo_mathcap* c);
186: int print_cmo_string(cmo_string* c);
187:
188: int decideByteOrder(int fd_read, int fd_write, int order);
189: int decideByteOrder2(int fd_read, int fd_write, int order);
190: int next_serial();
191: void setCmotypeDisable(int type);
192:
193: cmo_zz* new_cmo_zz_set_string(char *s);
1.2 ! ohara 194: char* convert_zz_to_cstring(cmo_zz *c);
! 195: char* convert_cmo_to_cstring(cmo *m);
! 196: char* convert_null_to_cstring();
! 197: char* convert_int_to_cstring(int integer);
1.1 ohara 198:
199: #endif /* _OX_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>