[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