[BACK]Return to README CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Annotation of OpenXM/src/ox_toolkit/README, Revision 1.3

1.1       ohara       1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
                      2: # URI:    http://omega.s.kanazawa-u.ac.jp/ohara/
1.3     ! ohara       3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.2 1999/12/15 01:59:58 ohara Exp $
1.1       ohara       4:
                      5: ☆ libox.a マニュアル。
                      6:
                      7: libox.a を利用するには次のヘッダファイルをインクルードする必要があります。
                      8:
                      9: #include <oxtag.h>
                     10: #include <ox.h>
                     11: #include <parse.h>
                     12:
                     13: 各構造体および関数の宣言はそれぞれのヘッダファイルを見てください。
                     14: ここでは基本的な考え方について説明します。
                     15:
                     16: まず、すべての CMO データはそのデータ型に対応した new 関数によって生成
                     17: します。たとえば CMO_ZZ 型のオブジェクトは new_cmo_zz() 関数によって生
                     18: 成されます。
                     19:
                     20: CMO データを送受信するには、CMO の種類によらず send_cmo(),
                     21: receive_cmo() を用います。これらの関数は OX ヘッダを扱いませんので、OX
                     22: メッセージを送受信するときには send_ox_tag(), receive_ox_tag() をその
                     23: 前に呼ぶ必要があります。
                     24:
1.2       ohara      25: 1. データ型
1.1       ohara      26:
1.2       ohara      27: このツールキットで定義されている各構造体の生成については次節を参照せよ。
                     28:
                     29: 1.1 CMO (Common Math Object)
1.1       ohara      30: 次のデータ型(構造体)が用意されている。
                     31:
                     32: cmo
                     33: cmo_null
                     34: cmo_int32
                     35: cmo_datum
                     36: cmo_string
                     37: cmo_mathcap
                     38: cmo_list
                     39: cmo_monomial32
                     40: cmo_zz
                     41: cmo_qq
                     42: cmo_zero
                     43: cmo_dms_generic
                     44: cmo_ring_by_name
                     45: cmo_distributed_polynomial
                     46: cmo_indeterminate
                     47: cmo_error2
                     48:
                     49: このうち cmo 型はいわば抽象基底クラスに相当するものであり、この型のオ
1.2       ohara      50: ブジェクトを明示的には生成されない。このクラスはポインタ型のキャストの
                     51: ために用意されている。また cmo_distributed_polynomial は cmo_list の派
                     52: 生クラスであると思ってもよい。
                     53:
                     54: 1.2 OX オブジェクト
                     55: 次のデータ型(構造体)が用意されている。
                     56:
                     57: ox
                     58: ox_command
                     59: ox_data
                     60:
                     61: このうち、ox 型は抽象基底クラスなので、オブジェクトをつくってはいけない。
                     62:
                     63: 2. オブジェクトの生成
                     64:
                     65: オブジェクトを生成するために、new 関数群が用意されている。それぞれの関
                     66: 数はオブジェクトを生成して、そのオブジェクトへのポインタを返す。
1.1       ohara      67:
                     68: new_cmo_null();
                     69: new_cmo_int32(int i);
                     70: new_cmo_string(char* s);
                     71: new_cmo_mathcap(cmo* ob);
                     72: new_cmo_list();
                     73: new_cmo_monomial32();
                     74: new_cmo_monomial32_size(int size);
                     75: new_cmo_zz();
                     76: new_cmo_zz_size(int size);
                     77: new_cmo_zz_set_si(int integer);
                     78: new_cmo_zz_noinit();
                     79: new_cmo_zero();
                     80: new_cmo_distributed_polynomial();
                     81: new_cmo_dms_generic();
                     82: new_cmo_ring_by_name(cmo* ob);
                     83: new_cmo_indeterminate(cmo* ob);
                     84: new_cmo_error2(cmo* ob);
                     85:
1.2       ohara      86: 3. 高水準 API
                     87:
                     88: 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。
                     89:
                     90: 3.1 通信の開始
                     91:
                     92: 通信を開始する場合には、次の関数のいずれかを利用する。
                     93:
                     94: ox_file_t ox_start(char* host, char* prog1, char* prog2);
                     95: ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream);
                     96:
                     97: 第一の関数は、ローカルマシン上に OpenXM サーバを起動し、そのサーバとの
                     98: 間に"reverse モード"で通信路を開設する。通信に使われるポート番号は自動
                     99: 的に生成される。host はローカルマシンのホスト名(あるいは "localhost")、
                    100: prog1 はコントロールサーバの実行ファイル名、
                    101: prog2 は計算サーバの実行ファイル名でなければならない。
                    102:
                    103: 第二の関数は、リモートマシン上に既に起動されている OpenXM サーバとの間に
                    104: 通信路を開設する。通信に使われるポート番号は明示的に与えなければならない。
                    105: host はリモートマシンのホスト名、
                    106: portControl はコントロールサーバとの通信のためのポート番号、
                    107: portStream は計算サーバとの通信のためのポート番号である。
                    108:
                    109: それぞれの関数はサーバ(正確には二つのサーバの組)の識別子を返す。
                    110: この識別子は高水準 API の各関数で利用される。
                    111:
                    112: 3.2 通信の終了
                    113:
                    114: 通信の終了のためには次の二つの関数が用意されている。
                    115:
                    116: void ox_close(ox_file_t sv);
                    117: void ox_shutdown(ox_file_t sv);
                    118:
                    119: 第一の関数はコントロールサーバに SM_control_kill を送ることによって、
                    120: サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに
                    121: よって、サーバを終了させる(予定)。
                    122:
                    123: 3.3 SM コマンドの送信
                    124:
                    125: void  ox_push_cmd(ox_file_t sv, int sm_code);
                    126:
                    127: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.1       ohara     128:
1.2       ohara     129: 3.4 CMO の送受信
                    130:
                    131: void  ox_push_cmo(ox_file_t sv, cmo *c);
                    132: cmo*  ox_pop_cmo(ox_file_t sv);
                    133: char* ox_popString(ox_file_t sv);
                    134:
                    135: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
                    136: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
                    137: なる。
                    138:
                    139: 3.5 スタック処理
                    140:
                    141: int ox_pops(ox_file_t sv, int num);
                    142:
                    143: スタック上の num 個のオブジェクトを廃棄する。
                    144:
                    145: 3.6
                    146:
                    147: int ox_flush(ox_file_t sv);
                    148:
                    149: 通信路を flush する(実際には何もしない)。
                    150:
                    151: 3.7
                    152:
                    153: void ox_reset(ox_file_t sv);
                    154:
                    155: 計算を中断する。
                    156:
                    157: 3.8
                    158:
                    159: void ox_execute_string(ox_file_t sv, char* str);
                    160:
                    161: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
                    162:
                    163: 3.9
                    164:
                    165: int   ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]);
                    166:
                    167: function(argv[1], ...) を計算し、結果をスタックに積む。
                    168:
                    169: 3.10
                    170:
                    171: cmo_mathcap* ox_mathcap(ox_file_t sv);
                    172:
                    173: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
                    174: いずれこの関数は廃止される予定。
1.1       ohara     175:
1.2       ohara     176: 4. 低水準 API
1.1       ohara     177:
1.3     ! ohara     178: 低水準 API はファイルディスクリプタを直接利用する。
1.1       ohara     179:
1.3     ! ohara     180: 4.1 通信に使われるバイトオーダの決定
        !           181:
        !           182: int decideByteOrderServer(int fd, int order);
        !           183:
        !           184: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
        !           185: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
        !           186: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
        !           187:
        !           188: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
        !           189:
        !           190: 4.2
        !           191:
        !           192: int send_int32(int fd, int integer);
        !           193:
        !           194: fd に 32bit 整数を書き込む。
        !           195:
        !           196: int receive_int32(int fd);
        !           197:
        !           198: fd から 32bit 整数を読み込む。
        !           199:
        !           200: 4.3
        !           201:
        !           202: int  send_cmo(int fd, cmo* m);
        !           203:
        !           204: fd に cmo を書き込む。
        !           205:
        !           206: cmo* receive_cmo(int fd);
        !           207:
        !           208: fd から cmo を読み込む。
        !           209:
        !           210: 4.4
        !           211:
        !           212: int next_serial();
        !           213:
        !           214: シリアルナンバを生成する。
        !           215:
        !           216: 4.5
        !           217:
        !           218: int  send_ox_tag(int fd, int tag);
        !           219:
        !           220: fd に OX メッセージのヘッダ(tag+id)を書き込む。
        !           221: シリアル番号は自動的に生成される。
        !           222:
        !           223: int  receive_ox_tag(int fd);
        !           224:
        !           225: fd から OX メッセージのヘッダ(tag+id)を読み込む。
        !           226:
        !           227: 4.6
        !           228:
        !           229: int  send_ox(int fd, ox* m);
        !           230: int  send_ox_cmo(int fd, cmo* m);
        !           231: void send_ox_command(int fd, int sm_command);
        !           232:
        !           233: ox メッセージを送信する。

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>