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