前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXMemory
メモリ ストリームのためのストレージ クラスです。
#include <SFXMemory.h.hpp>
class SFXMemory : public SFXStorage;
SFMTYPEDEFCLASS(SFXMemory)

継承図

SFXMemory クラスの継承図

協調図

SFXMemory クラスの協調図

解説

メモリ ストレージ ( SFXMemory クラス ) は、 SFXMemory::GetStreamReader 関数、SFXMemory::GetStreamWriter 関数で 取得するストリームを使って、その内部バッファを読み書きします。

SFXMemory クラスは、読み書きポインタを 1 つ持ちます。 SFXMemory::Read 関数や SFXMemory::Write 関数は、 ポインタの位置からデータを読み書きし、その分ポインタを移動します。

■ SFXMemory クラスの使用手順

  1. SFXMemory クラスのインスタンスを生成します。
  2. SFXMemory::Open 関数を使ってメモリ ストレージをオープンします。
  3. SFXMemory::GetStreamReader 関数と SFXMemory::GetStreamWriter 関数を使ってそれぞれ読み込み用ストリームと書き込み用ストリームを取得します。
  4. ストリームを使ってデータを読み書きします。
  5. ストリームを使い終わったら、 SFXMemory::Close 関数を呼び出してリソースを解放します。

例 756. メモリ ストリームの使用方法

SFXMemory memory;
SFXBinaryStreamWriter writer;   // 書き込み用ストリーム 
SFXBinaryStreamReader reader;   // 読み込み用ストリーム
SFXAnsiString string;           // メモリ ストレージから読み込む変数

// メモリ ストレージをオープンする
if (memory.Open() == SFERR_NO_ERROR) {

    // 書き込み用ストリームを取得する
    if (memory.GetStreamWriter(1024, &writer)== SFERR_NO_ERROR) {

        writer << "abc";  // 書き込み用ストリームに "abc" を書き込む
        writer.Flush();   // 書き込み用ストリームからメモリ ストレージに "abc" を書き込む

        // メモリに書き込んだ内容を表示する
        TRACE("size = %d", memory.GetSize());    // バッファ サイズを表示する: "size = 4" 
        TRACE("wrire = %s", memory.GetBuffer()); // 内部バッファを表示する: "write = abc + '\0'" 
        
        writer.Release();  // 書き込み用ストリームを解放する
    }

    // 先頭へシークする
    memory.SeekStart(0);

    // 読み込み用ストリームを取得する
    if (memory.GetStreamReader(1024, &reader) == SFERR_NO_ERROR) {

        reader.Fetch();  // メモリ ストレージから読み込み用ストリームにデータを読み込む 
        reader >> string; // 読み込み用ストリームから string にデータを読み込む

        // メモリ ストレージから読み込んだ内容を表示する
        TRACE("size = %d", string.GetLength());   // 文字列の長さを表示する: "size = 3"
        TRACE("read = %s", string.GetCString());  // 文字列を表示する: "read = abc"

        reader.Release();  // 読み込み用ストリームを解放する
    }
    memory.Close();  // メモリ ストレージをクローズする
}

参照

SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter

メンバ

コンストラクタ/デストラクタ
SFXMemory( Void )
SFXMemory( UInt16 threshold , UInt16 cluster )
SFXMemory クラスのコンストラクタです。
~SFXMemory( Void )
SFXMemory クラスのデストラクタです。
パブリック関数
SFCError AsSFBAStream( SFBAStreamSmpPtr result )
内部で管理されている SFXBuffer クラスのインスタンスを SFBAStream クラスのインスタンスに変換します。
SFCError AsSFBSource( SFBSourceSmpPtr result )
内部で管理されている SFXBuffer クラスのインスタンスを SFBSource クラスのインスタンスに変換します。
Void Cancel( Void )
【 現在、この関数は使えません。 】
SFCError Close( SFXBufferPtr buffer )
メモリをクローズします。
Void Close( Void )
メモリをクローズします。
VoidConstPtr GetBuffer( Void )
内部バッファへのポインタを取得します。
UInt16 GetCluster( Void )
内部バッファ メモリのクラスタ サイズを取得します。
UInt32 GetSize( Void )
内部で確保しているバッファ サイズを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
GetStreamReader( SFXStreamReaderPtr result )
メモリ読み込み用ストリームを取得します。
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
GetStreamWriter( SFXStreamWriterPtr result )
メモリ書き込み用ストリームを取得します。
UInt16 GetThreshold( Void )
内部バッファ サイズの最小値を取得します。
SFCError Open( SFXBufferConstRef buffer )
Open( Void )
Open( VoidConstPtr buffer , UInt32 size )
メモリ ストレージをオープンします。
SFCError Read( VoidPtr buffer , UInt32Ptr size )
読み込み用ストリームを使わずにメモリからデータを読み込みます。
SFCError ScheduleRead( CallbackSPP spp , VoidPtr reference )
【 現在、この関数は使えません。 】
SFCError ScheduleWrite( CallbackSPP spp , VoidPtr reference )
【 現在、この関数は使えません。 】
SFCError Seek( SInt32 distance )
現在の位置から指定した移動量だけメモリ ポインタの位置を移動します。
SFCError SeekEnd( SInt32 distance )
終端から指定した移動量だけメモリ ポインタを移動します。
SFCError SeekStart( SInt32 distance )
先頭から指定した移動量だけメモリ ポインタを移動します。
Void SetCluster( UInt16 size )
内部バッファ メモリのクラスタ サイズを設定します。
Void SetThreshold( UInt16 size )
内部バッファ サイズの最小値を設定します。
UInt32 Tell( Void )
読み書きポインタの現在位置を取得します。
SFCError Truncate( UInt32 position )
内部バッファを指定したサイズで切り捨てます。
SFCError Write( VoidConstPtr buffer , UInt32Ptr size )
書き込み用ストリームを使わずにメモリにデータを書き込みます。
DefaultEnum
メモリ ストレージに関する各種パラメーターの初期値から構成される列挙型です。
CallbackSPP (SFXStorage から継承)
コールバック関数を表す型です。

SFXMemory::SFXMemory
SFXMemory クラスのコンストラクタです。
[ public, explicit ]
SFXMemory(Void);
[ public, explicit ]
SFXMemory(
    UInt16 threshold   // 内部バッファの閾値
    UInt16 cluster     // 内部バッファのクラスタ サイズ
);

解説

内部バッファは確保されません。

参照

SFXMemory::SetThreshold | SFXMemory::SetCluster


SFXMemory::~SFXMemory
SFXMemory クラスのデストラクタです。
[ public, virtual ]
virtual ~SFXMemory(Void);

SFXMemory::AsSFBAStream
内部で管理されている SFXBuffer クラスのインスタンスを SFBAStream クラスのインスタンスに変換します。
[ public, virtual, const ]
SFCError AsSFBAStream(
    SFBAStreamSmpPtr result   // 結果の SFBAStream クラスのインスタンスへのポインタ
);

引数

result

変換後の SFBAStream クラスのインスタンスへのポインタを指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ バッファが閉じているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM

解説

メモリ バッファの内容を非同期ストリームとして扱います。


SFXMemory::AsSFBSource
内部で管理されている SFXBuffer クラスのインスタンスを SFBSource クラスのインスタンスに変換します。
[ public, virtual, const ]
SFCError AsSFBSource(
    SFBSourceSmpPtr result   // 結果の SFBSource クラスのインスタンスへのポインタ
);

引数

result

変換後の SFBSource クラスのインスタンスへのポインタを指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ バッファが閉じているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM

解説

メモリ バッファの内容をデータソースとして扱います。


SFXMemory::Cancel
【 現在、この関数は使えません。 】
[ public, virtual ]
Void Cancel(Void);

SFXMemory::Close
メモリをクローズします。
[ public ]
SFCError Close(
    SFXBufferPtr buffer   // 内部バッファをコピーするバッファへのポインタ
);
[ public ]
Void Close(Void);

戻り値

引数を指定しない場合は何も返しません。

引数に SFXBufferPtr を指定した場合はエラー値を返します。

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

引数を指定しない場合は内部バッファを解放します。

引数に SFXBufferPtr を指定した場合は内部バッファを指定したバッファにコピーした後、内部バッファを解放します。

参照

SFXMemory::Open


SFXMemory::GetBuffer
内部バッファへのポインタを取得します。
[ public, const ]
VoidConstPtr GetBuffer(Void);

SFXMemory::GetCluster
内部バッファ メモリのクラスタ サイズを取得します。
[ public, const ]
UInt16 GetCluster(Void);

参照

SFXBuffer::GetCluster | SFXMemory::SetCluster


SFXMemory::GetSize
内部で確保しているバッファ サイズを取得します。
[ public, const ]
UInt32 GetSize(Void);

戻り値

  • メモリ ストレージが閉じているとき : 0
  • メモリ ストレージが開いているとき : 内部で確保しているバッファ サイズ

参照

SFXMemory::Tell | SFXMemory::Truncate


SFXMemory::GetStreamReader
メモリ読み込み用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamReader(
    UInt32 size                 // バッファサイズ
    SFXStreamReaderPtr result   // メモリ読み込み用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // メモリ読み込み用ストリームへのポインタ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

メモリ読み込み用ストリームのバッファ サイズを指定することも可能です。 メモリ読み込み用ストリームは、読み込むデータの種類に応じて SFXBinaryStreamReaderSFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。

参照

SFXMemory::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader


SFXMemory::GetStreamWriter
メモリ書き込み用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamWriter(
    UInt32 size                 // サイズ
    SFXStreamWriterPtr result   // メモリ書き込み用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // メモリ書き込み用ストリームへのポインタ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

メモリ書き込み用ストリームのバッファ サイズを指定することも可能です。 メモリ書き込み用ストリームは、書き込むデータのタイプに応じて SFXBinaryStreamWriter クラス、SFXAnsiStringStreamWriter クラス、SFXWideStringStreamWriter クラスを使い分けます。

参照

SFXMemory::GetStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter


SFXMemory::GetThreshold
内部バッファ サイズの最小値を取得します。
[ public, const ]
UInt16 GetThreshold(Void);

参照

SFXBuffer::GetThreshold | SFXMemory::SetThreshold


SFXMemory::Open
メモリ ストレージをオープンします。
[ public ]
SFCError Open(
    SFXBufferConstRef buffer   // コピーするバッファ
);
[ public ]
SFCError Open(
    VoidConstPtr buffer   // コピーするバッファ
    UInt32 size           // コピーするバッファ サイズ
);
[ public ]
SFCError Open(Void);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージが既にオープンしているとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

メモリ ストレージを使えるように初期処理します。引数にバッファを指定した場合はそのバッファを内部バッファにコピーします。引数に何も指定しない場合は内部バッファは空です ( サイズは 0 )。

参照

SFXMemory::Close


SFXMemory::Read
読み込み用ストリームを使わずにメモリからデータを読み込みます。
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // 読み込んだデータを格納するバッファ
    UInt32Ptr size   // バッファのサイズ、読み込んだデータのサイズ
);

引数

buffer

読み込んだデータを格納するバッファを指定します。

size

関数の呼び出し時は、バッファのサイズを指定します。SFXMemory::Read 関数が終了すると、読み込んだデータのサイズが格納されます。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • サイズが null のとき : SFERR_INVALID_PARAM
  • 読み込み位置が終端のとき : EFILEEOF

参照

SFXMemory::Write | SFXMemory::GetSize | SFXMemory::Seek | SFXMemory::Tell


SFXMemory::ScheduleRead
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError ScheduleRead(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバックに渡すデータ
);

解説

SFERR_UNSUPPORTED を返します。


SFXMemory::ScheduleWrite
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError ScheduleWrite(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバックに渡すデータ
);

解説

SFERR_UNSUPPORTED を返します。


SFXMemory::Seek
現在の位置から指定した移動量だけメモリ ポインタの位置を移動します。
[ public ]
SFCError Seek(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージが閉じられているとき : SFERR_INVALID_STATE

解説

メモリ ポインタを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

移動後のメモリ ポインタの位置がバッファの先頭よりも前方または終端よりも後方になる場合、 メモリ ポインタの位置はそれぞれバッファの先頭または終端に設定されます。

参照

SFXMemory::SeekStart | SFXMemory::SeekEnd


SFXMemory::SeekEnd
終端から指定した移動量だけメモリ ポインタを移動します。
[ public ]
SFCError SeekEnd(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE

解説

メモリ ポインタを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

移動後のメモリ ポインタの位置がバッファの先頭よりも前方または終端よりも後方になる場合、 メモリ ポインタの位置はそれぞれバッファの先頭または終端に設定されます。

参照

SFXMemory::Seek | SFXMemory::SeekStart


SFXMemory::SeekStart
先頭から指定した移動量だけメモリ ポインタを移動します。
[ public ]
SFCError SeekStart(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE

解説

メモリ ポインタを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

移動後のメモリ ポインタの位置がバッファの先頭よりも前方または終端よりも後方になる場合、 メモリ ポインタの位置はそれぞれバッファの先頭または終端に設定されます。

参照

SFXMemory::Seek | SFXMemory::SeekEnd


SFXMemory::SetCluster
内部バッファ メモリのクラスタ サイズを設定します。
[ public ]
Void SetCluster(
    UInt16 size   // 設定するクラスタ サイズ
);

解説

内部バッファを確保する時の最小単位を設定します。

参照

SFXBuffer::SetThreshold | SFXMemory::GetThreshold


SFXMemory::SetThreshold
内部バッファ サイズの最小値を設定します。
[ public ]
Void SetThreshold(
    UInt16 size   // 設定する最小値
);

参照

SFXBuffer::SetThreshold | SFXMemory::GetThreshold


SFXMemory::Tell
読み書きポインタの現在位置を取得します。
[ public, const ]
UInt32 Tell(Void);

戻り値

  • メモリ ストレージがオープンしているとき : 読み書きポインタの現在位置
  • メモリ ストレージがクローズしているとき : 0

参照

SFXMemory::Seek | SFXMemory::Truncate


SFXMemory::Truncate
内部バッファを指定したサイズで切り捨てます。
[ public ]
SFCError Truncate(
    UInt32 position   // サイズ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

現在のポインタ位置が切り捨てたバッファの終端を超える場合、読み書き用ポインタはバッファの終端に移動されます。

参照

SFXMemory::Seek | SFXMemory::Tell


SFXMemory::Write
書き込み用ストリームを使わずにメモリにデータを書き込みます。
[ public, virtual ]
SFCError Write(
    VoidConstPtr buffer   // 書き込むデータ
    UInt32Ptr size        // 書き込むデータのサイズ、書き込んだデータのサイズ
);

引数

buffer

書き込むデータを指定します。

size

SFXMemory::Write 関数の呼び出し時は、書き込むデータのサイズを指定します。SFXMemory::Write 関数が終了すると、実際に書き込んだデータのサイズが格納されます。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ ストレージがクローズしているとき : SFERR_INVALID_STATE
  • サイズが null のとき : SFERR_INVALID_PARAM

参照

SFXMemory::Read | SFXMemory::GetSize | SFXMemory::Seek | SFXMemory::Tell


SFXMemory::DefaultEnum
メモリ ストレージに関する各種パラメーターの初期値から構成される列挙型です。
enum DefaultEnum {
    DEFAULT_THRESHOLD               = SFXBuffer::DEFAULT_THRESHOLD,
    DEFAULT_CLUSTER                 = SFXBuffer::DEFAULT_CLUSTER
};

解説

  • DEFAULT_THRESHOLD: 内部バッファ サイズの最小値のデフォルト値。
  • DEFAULT_CLUSTER: 内部バッファ メモリのクラスタ サイズのデフォルト値。

参照

SFXBuffer::DefaultEnum