[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 1077] Re: C++ とGUI+α
/* In [b-free: 1068] Re: C++ とGUI+α
Hideaki Suzuki <h1suzuki@bridgew.edu> Wrote: */
|今頃、返答をしても遅いという向きには、耳を傾けず、、、。
そんなに実装は進んでいないので、
全然遅くないですよ。
|> TADParser は byte列から segment を切り出す class で、
|> 読み書き対象の ByteStream に readBytes() writeBytes() が
|> 実装されている、というしくみです。
:
|> RealObjectStream と TrayStream はTADStream と ByteStream の両方を
|> 継承していますが、ByteStream は抽象class であり、java で言う
|> interface のようなものと考えてください。
|>
|> RealObjectStream は読み書きの処理をほとんど TADParser に
|> 任せてしまいますが、link だけは自前で処理します。
|> TrayStream は segment ごとに区切って送られてきた場合は
|> 自前で処理しますが、区切られていない文章レコード・図形レコードの
|> 場合は TADParser を利用します。
|
|なるほど。TADstream は ByteStream の Interface を持つ Instance を扱うわけですね。
|Buffering などはどうします? fseek に近い物を導入するんでしょうか?「現在 Segment」や
|「現在 Byte」という file pointer の概念をどっかに導入すると良いのでしょうが、、、。
|で、現在の Segment type が調べられるとか、先読みできるとか。
前にメールに書いたものから、かなり変更しました(計画性がない...)。
クラス名には接頭辞'B'を付けることにしました。
一応 BTRON の B です。(TAD は BTRON だけのものではない、という話も)
TADStream と ByteStream の多重継承はやめました。
さらに、Input と Output に分けました。
クラス名としては、BTADInputStream,BTADOutputStream,
BByteInputStream,BByteOutputStream としました。
(我ながら、名前のセンスのなさに悲しくなります)
で、file pointer は ByteStream も TADStream も
内部的には持っていることになりますが、利用者が直接接っする
ことはないです。
BByteInputStream には先読みの機能を付けました。
BTADStream には付けていません。たしかにあっても良いかと思います。
| TADstream >> TADSegment;
| TADstream << TADSegment;
|
|はあると便利でしょうね。(これは、TADSegment の実装でしょうが、、、)
">>"のほうは、TADStream から先読みして ID を調べておいて
ID に合った Segment を作っておいてそれに読み込む、
という感じになりますね。
私は、ユーザーが自力で ID に合った Segment を作るのではなく、
TADStream が適切な Segment を作成してそれに読み込んで、
読み込まれた Segment のポインタを返すようにしました。
どちらでも良いような気がします。両方あるほうが良いかな。
TAD の Segment は ID だけでなく sub ID があって、
同じ ID でも sub ID が異なるとまったく別物になるので
(文字修飾指定付箋を除く)、sub ID ごとに別クラスにしてます。
全ての Segment の基底になる BSegment に sub ID と ATTR を
入れてしまいました。sub ID を使わない Segment だと
無駄ですが、まあいいんじゃないかな、と。
ID と sub ID を指定すると、それに合った BSegment の
サブクラスを作成する BSegmentMaker というクラスも
作りました。
言葉で説明しても分かりにくいですね。
もしなんでしたら作りかけのソースを送りますよ。
STL 使っているのでコンパイラと環境を選びますが。
===
落合秀俊 名古屋大学工学部情報工学科
h953046b@ice.nuie.nagoya-u.ac.jp