バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.


RWBufferedPageHeap

RWBufferedPageHeap RWVirtualPageHeap

形式

#include <rw/bufpage.h>
(抽象基底クラス)

説明

このクラスは抽象基底クラスで、メモリーバッファセットによりバッファリングされる抽象ページヒープを表します。抽象ページヒープを表す抽象基底クラス RWVirtualPageHeap を継承します。

このクラスは、メモリーバッファセットを供給および保持します。特殊化クラスは、純粋仮想関数 swapIn(RWHandle, void*)swapOut(RWHandle, void*) の定義を行うことによって、メモリーバッファとの間でページをスワップする実際の物理的メカニズムを提供しなければなりません。

また特殊化クラスは、公開関数 allocate()deallocate(RWHandle) を適切に定義する必要もあります。

特殊化クラスの実装例については、RWDiskPageHeap を参照してください。

持続性

なし

公開コンストラクタ

RWBufferedPageHeap(unsigned pgsize, unsigned nbufs=10);

ページサイズ pgsize のバッファリングされたページヒープを作成します。ヒープ上に割り当てられる、サイズ pgsize のバッファの数は nbufs 個になります。要求を満たすだけの十分なメモリーがない場合は、メンバー関数 isValid() が返すオブジェクトの状態は FALSE になります。十分なメモリーがある場合は、TRUE になります。

限定公開メンバー関数

virtual RWBoolean
swapIn(RWHandle h, void* buf)  = 0;
virtual RWBoolean
swapOut(RWHandle, h void* buf) = 0;

上記の 2 つの純粋仮想関数を定義するのは特殊化クラスです。関数 swapOut() はハンドル h を持つページを buf が指すバッファからスワップ媒体にコピーし、関数 swapIn() はハンドル h を持つページを buf が指すバッファにコピーします。

公開メンバー関数

virtual RWHandle
allocate() = 0;

この純粋仮想関数を定義するのは特殊化クラスです。特殊化クラスはページを割り当て、そのページの一意のハンドルを返します。要求を満足できないときはゼロを返します。ページのサイズはコンストラクタで設定します。

virtual
~RWBufferedPageHeap();

すべての内部バッファを解放します。

RWBoolean
isValid();

自分自身が有効であれば、TRUE を返します。オブジェクトが無効になるのは、バッファを割り当てるだけのメモリーがない場合です。

virtual void
deallocate(RWHandle h);

クラス RWVirtualPageHeap から再定義した関数。引数をゼロとしてこの関数を呼び出してもエラーにはなりません。この関数は純粋仮想関数ではありませんが、この関数を適切に定義するのは特殊化クラスです。この定義で行うべきことは、ハンドル h に対応したバッファをすべて解放することです。実際のページ割り当ては仮想関数 allocate() によって特殊化クラスが行うように、実際の解放は deallocate() を変更することによって行います。

virtual void
dirty(RWHandle h);

クラス RWVirtualPageHeap から再定義した関数。

virtual void*
lock(RWHandle h);

クラス RWVirtualPageHeap から再定義した関数。

virtual void
unlock(RWHandle h);

クラス RWVirtualPageHeap から再定義した関数。