
KonoeStreamableObject
クラス概要
オブジェクト入出力が可能なクラスの属性を定義する抽象クラスです。
継承関係
ストリーム可能なクラスは必ずこのクラスを継承し、抽象メソッドを
実装し実質化する必要があります。
メンバー関数
-
KonoeStreamableObject( KInt category_id,
KInt class_id, KInt class_version = 0 )
- コンストラクタ。デフォールトコンストラクタを持たないので、必ず
このコンストラクタを呼ぶことになります。引数としてカテゴリー識別コード、
クラス識別コードを与えます。クラスバージョンは省略すると0です。クラス
識別コードはカテゴリー内ではユニークでなければならないので、通常
カテゴリーマネージャのヘッダーファイルで定義します。
KInt getCategoryID( )
- カテゴリー識別コードを返します。
KInt getClassID( )
- クラス識別コードを返します。
KInt getClassVersion( )
- クラスバージョンを返します。
KInt getStreamHeader( KChar level )
- このオブジェクトをストリームとするためののヘッダーワードを返します。
levelは記録構造の中での深さを表す文字で、'A'で始まり、深くなるほど
増えていきます。(なぜAかということですが、オブジェクトストリームの
最初のヘッダーの最高位バイトが'A'という文字であるというルールとします。
それにより、例えばバイトスワップの必要性が判断できます。)

KInt put( KonoeOutputObjectStream * outstream, KChar level, KInt memberid )
- 純粋仮想関数。outstreamにこのオブジェクトを書き出します。そのときの
記憶深さがlevel、このオブジェクト自身に割り当てられたメンバー識別コードは
memberidです。

KInt getStreamSize( )
- 純粋仮想関数。このオブジェクトの記憶域の長さをKIntのサイズを基準に
返します。例えばKInt型のメンバーはそれのためのヘッダーのサイズが
HEADER_SIZEで、KIntの記憶域サイズは1ですから(HEADER_SIZE+1)ということに
なります。メンバーがさらにオブジェクトの場合、そのgetStreamSizeを
呼び出して寸法を決める必要があります。例えば
HEADER_SIZE+member_object->getStreamSize( )といった記述になります。

KInt fillPrimitiveMember( KInt memberid, KInt datatype,
KInt datacount, void * data )
- 純粋仮想関数。オブジェクトを受信した場合これらfill*Memberメソッドを
使ってオブジェクトの中身を埋めていきます。メンバー識別コードと
値が与えられるので、そのメンバーの値をセットすることが期待されています。
メソッドを実装する必要がない場合単に-1を返すメンバーメソッドを定義
してください。それにより不必要なメソッドが呼ばれたことが検出されます。
fillPrimitiveMemberはプリミティブ型のメンバーをフィルするのに用いられます。
datatypeで型を、datacountでその型で測ったデータ数を、実際のデータ
へのポインタをdataで与えます。データはnewで与えられたものなので
deleteはKonoeStreamableObject側で責任をもって行なう必要があります。

KInt fillObjectMember( KInt memberid, KonoeStreamableObject * obj )
- 純粋仮想関数。オブジェクトである(プリミティブでない)メンバーを
フィルします。
メンバーデータ
定数
HEADER_SIZE
- ストリームにするときのヘッダーのサイズをKIntの長さを単位に数えた
ものです。getStreamSizeを実装するとき、各々のメンバーはHEADER_SIZEと
その実体の寸法を加えた値をもつとして計算します。
[File = KonoeStreamableObject.html] last modified = 01-Nov-1997
KONOEコラボレーション
konoe-req@konoe.kek.jp