[BACK]Return to ox.h CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Annotation of OpenXM/src/ox_toolkit/ox.h, Revision 1.4

1.1       ohara       1: /* -*- mode: C; coding: euc-japan -*- */
1.4     ! ohara       2: /* $OpenXM: OpenXM/src/ox_toolkit/ox.h,v 1.3 1999/12/14 09:29: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:
                     34: #define DEFAULT_LOGFILE  "/tmp/result"
                     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>