Annotation of OpenXM/src/ox_math/ox.h, Revision 1.3
1.1 ohara 1: /* -*- mode: C; coding: euc-japan -*- */
1.3 ! ohara 2: /* $OpenXM: OpenXM/src/ox_math/ox.h,v 1.2 1999/11/02 06:11:58 ohara Exp $ */
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.3 ! ohara 115:
! 116: /* cmo_list の派生. append_cmo_list を使ってよい. */
! 117: typedef struct {
! 118: int tag;
! 119: int length; /* number of monomials */
! 120: cell *head; /* a list of monomials */
! 121: cmo *ringdef;
! 122: } cmo_distributed_polynomial;
1.1 ohara 123:
124: typedef cmo ox;
125:
126: typedef struct {
127: int tag;
128: int command;
129: } ox_command;
130:
131: typedef struct {
132: int tag;
133: cmo *cmo;
134: } ox_data;
135:
136: cell* new_cell(cmo* newcmo);
1.2 ohara 137: cmo_null* new_cmo_null();
1.1 ohara 138: cmo_int32* new_cmo_int32(int i);
1.2 ohara 139: cmo_string* new_cmo_string(char* s);
140: cmo_mathcap* new_cmo_mathcap(cmo* ob);
1.1 ohara 141: cmo_list* new_cmo_list();
1.2 ohara 142: cmo_monomial32* new_cmo_monomial32();
143: cmo_monomial32* new_cmo_monomial32_size(int size);
1.1 ohara 144: cmo_zz* new_cmo_zz();
145: cmo_zz* new_cmo_zz_size(int size);
146: cmo_zz* new_cmo_zz_set_si(int integer);
147: cmo_zz* new_cmo_zz_noinit();
1.2 ohara 148: cmo_zero* new_cmo_zero();
149: cmo_dms_generic* new_cmo_dms_generic();
150: cmo_ring_by_name* new_cmo_ring_by_name(cmo* ob);
151: cmo_indeterminate* new_cmo_indeterminate(cmo* ob);
152: cmo_error2* new_cmo_error2(cmo* ob);
153:
1.1 ohara 154: ox_data* new_ox_data(cmo* c);
155: ox_command* new_ox_command(int sm_code);
156:
1.2 ohara 157: cmo_error2* gen_error_object(int err_code);
1.1 ohara 158: cmo* make_mathcap_object(int version, char *id_string);
159:
160: void resize_mpz(mpz_ptr mpz, int size);
161: cmo* receive_cmo(int fd);
162: cmo* receive_cmo2(int fd);
163: int receive_int32(int fd);
164: int receive_ox_tag(int fd);
165:
166: int send_cmo(int fd, cmo* m);
167: int send_int32(int fd, int integer);
168: int send_ox(ox_file_t s, ox* m);
169: int send_ox_cmo(int fd, cmo* m);
170: void send_ox_command(int fd, int sm_command);
171: int send_ox_tag(int fd, int tag);
172:
173: int append_cmo_list(cmo_list* this, cmo *newcmo);
174: int length_cmo_list(cmo_list* this);
175: cell* next_cell(cell *this);
176: int cmolen_cmo(cmo* m);
177:
178: void ox_close(ox_file_t sv);
179: void ox_executeStringByLocalParser(ox_file_t sv, char* str);
180: cmo_mathcap* ox_mathcap(ox_file_t sv);
181: char* ox_popString(ox_file_t sv, int fd);
182: cmo* ox_pop_cmo(ox_file_t sv, int fd);
183: void ox_reset(ox_file_t sv);
184: ox_file_t ox_start(char* host, char* prog1, char* prog2);
185:
186: char* dump_cmo(char* array, cmo* m);
187: char* dump_ox_command(char* array, ox_command* m);
188: char* dump_ox_data(char* array, ox_data* m);
189:
190: int print_cmo(cmo* c);
191: int print_cmo_int32(cmo_int32* c);
192: int print_cmo_list(cmo_list* li);
193: int print_cmo_mathcap(cmo_mathcap* c);
194: int print_cmo_string(cmo_string* c);
195:
196: int decideByteOrder(int fd_read, int fd_write, int order);
197: int decideByteOrder2(int fd_read, int fd_write, int order);
198: int next_serial();
199: void setCmotypeDisable(int type);
200:
201: cmo_zz* new_cmo_zz_set_string(char *s);
1.2 ohara 202: char* convert_zz_to_cstring(cmo_zz *c);
203: char* convert_cmo_to_cstring(cmo *m);
204: char* convert_null_to_cstring();
205: char* convert_int_to_cstring(int integer);
1.1 ohara 206:
207: #endif /* _OX_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>