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

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>