Jun Inoue
jun.l****@gmail*****
2005年 10月 8日 (土) 09:37:09 JST
On Sat, 08 Oct 2005 01:55:36 +0900 YamaKen <yamak****@bp*****> wrote: > ヤマケンです。 > > SigSchemeにstring portが追加されましたが、インタプリタ側がこれを > 認知して個別対応する必要があるのでメンテナンス性や今後の拡張に難 > があると感じています。また、Schemeで書かれたportへの対応が不十分 > です。 > > そこで以下のような抽象化によりタイプ依存コードを隠蔽する事を提案 > します。どうでしょうか。 大体賛成。細かい点をいくつか。 > enum ScmPortDirection { > SCM_PORTDIR_NONE = 0, > SCM_PORTDIR_OUTPUT = 1 << 0, > SCM_PORTDIR_INPUT = 1 << 1 > }; > > struct ScmPortCell { > enum ScmPortDirection direction; > ScmCPort *cport; > } port; > struct ScmCPortVTbl { > ScmObj (*type)(ScmCPort cport); /* returns a symbol */ 変数にした方がいいでしょう。途中でコロコロ変わる必要は無いし、変わられて も困る。 > int (*finalize)(ScmCPort cport); > int (*close_input)(ScmCPort cport); > int (*close_output)(ScmCPort cport); 全部 close 一つでまとめたらいいのでは? 入出力 port の一方向だけ塞がなく てはいけない場面というのを思いつかないんですが。 > /* input */ > int (*getc)(ScmCPort cport); > int (*peek_char)(ScmCPort cport); > int (*char_readyp)(ScmCPort cport); > /* output */ > int (*vprintf)(ScmCPort cport, const char *str, va_list args); > int (*display)(ScmCPort cport, const char *str); > size_t (*ndisplay)(ScmCPort cport, size_t size, const char *str); ndisplay は要らないと思う。Port の許容量は無制限が普通 (ですよね?)。 -- Jun Inoue jun.l****@gmail*****