Jun Inoue
jun.l****@gmail*****
2005年 10月 9日 (日) 13:51:31 JST
On Sun, 09 Oct 2005 12:14:49 +0900 YamaKen <yamak****@bp*****> wrote: > Schemeのコード上でportの実装を識別したい場合があるという事ですか? Schemeのコード上でportの実装を識別したい場合があるという事じゃなかったん ですか? Soft port の実装が同じ (Scheme level) 関数を使いまわすことを想定してるの かなと思ったんですが、それは soft port 実装側が user data に tag を置い とけば済みますね。 > 私はCレベルでのダウンキャスト向け型情報としか考えてなかったんで > すが(get-output-string等で必要)。 う〜、それなら enum でいいような。STRING ^ FILE ^ SOFT の三つで十分。こ れなら cell も消費しないし、簡単。 > これはSchemeのportオブジェクトレベルでやっとけば十分でしたね。 > > close_input_port(ScmObj port) > { > SCM_PORT_DIRECTION(port) &= ~SCM_PORTDIR_INPUT; > if (SCM_PORT_DIRECTION(port) == SCM_PORTDIR_NONE) > SCM_PORT_CLOSE(port); /* also frees port->cport */ > } そういうネタ元だったのね。そうそう、それは bit mask で十分。 あ、ところで member 変数名は cport より info か desc の方がよいでする。 > > これは get_byte(), peek_byte(), byte_readyp() or number_of_bytes_ready > > () にしましょう。Multibyte port を読むとき次の文字が何 bytes 含むかの判 > > 定は SigScheme 側で書きたいところです。 > > その方がいいですね。3つ目の関数名はbytelen_ready()なんてどうでしょ > う。 意味はわかるけど何か変ですねぇ… ;; number_of_bytes_ready はわかりやすくするためだけの名前だから、 ;; とか言い訳してみる 私としては -bytes_ready() -nbytes_ready() -available_len() あたりを考えているんですが、ちょっと補足。 bytes_ready (port, SCM_MB_MAX_LEN); => SCM_MB_MAX_LEN 以下の非負整数 みたいな使い方を想定しています。File port に毎回 file 終端までのサイズを 返させるわけにはいきませんので。 -- Jun Inoue jun.l****@gmail*****