Japanese | English | Korean

Samples

メモリアロケータとインプットストリーム

MascotCapsule V4(V3互換) では、メモリ確保用のアロケータとデータ読み込み用のストリームに関してはインターフェースのみ定義しており、その実装については各環境に任されています。
これは、データ読み込み方法(ファイル読み込み、ネットワークによるデータ転送等) やメモリ確保の方法を環境によって最適な方法で実装可能にするためです。

これらの実装について、作業プロジェクト内で指定のものがありましたら、そちらをご使用ください。
特に指定のものがない場合は、環境に応じて以下のインターフェースの実装を行う必要があります。
以下よりダウンロード可能なサンプルコードの断片、および各サンプルで実装されているサンプルコードを参考としてください。

目次

1. メモリアロケータ( IAllocator )

メモリアロケータとしては、以下の3つの関数を実装してください。

(1) void* ( *alloc )( IAllocator* This, hi_uint32 size )

引数 size で指定されるだけのメモリを確保するように実装してください。
戻り値として、確保したメモリの先頭アドレスを返してください。
確保できなかった場合は0を返してください。

(2) void* ( *realloc )( IAllocator* This, void* address, hi_uint32 size )

現在のところ使用しておりませんので、特に実装の必要はありません。

(3) void ( *free )( IAllocator* This, void* address )

引数 address で指定されるメモリ空間を解放するように実装してください。
(1) の実装に合わせて、適切な解放処理を行ってください。



2.インプットストリーム( IIstream )

インプットストリームでは、以下の6つの関数を実装してください。

(1) hi_sint8 ( *readSint8 )( IIstream* This )

8bit 符号付き整数値を読み込むように実装してください。
戻り値として読み込んだ 8bit 整数値を返すように実装してください。
読み出した分、ストリームポインタは進めるようにしてください。

(2) hi_sint16 ( *readSint16 )( IIstream* This )

16bit 符号付き整数値を読み込むように実装してください。
戻り値として読み込んだ 16bit 整数値を返すように実装してください。
読み出した分、ストリームポインタは進めるようにしてください。
なお、ストリームが読み出す対象は、リトルエンディアンデータです。

(3) hi_sint32 ( *readSint32 )( IIstream* This )

32bit 符号付き整数値を読み込むように実装してください。
戻り値として読み込んだ 32bit 整数値を返すように実装してください。
読み出した分、ストリームポインタは進めるようにしてください。
なお、ストリームが読み出す対象は、リトルエンディアンデータです。

(4) void ( *readBytes )( IIstream* This, hi_byte* buffer, hi_uint32 n )

n バイト分のデータを読み出し、buffer へ格納するように実装してください。
読み出した分、ストリームポインタは進めるようにしてください。

(5) void ( *skipBytes )( IIstream* This, hi_uint32 n )

n バイト分のデータを読み飛ばすように実装してください。
読み飛ばした分、ストリームポインタは進めるようにしてください。

(6) hi_bool ( *fail )( IIstream* This )

読み込みが終了したかどうかを返すように実装してください。
インプットストリームからの読み込みに成功した場合は HI_FALSE を、失敗した場合は HI_TRUE を返すようにしてください。