Class CriFsLoader
CriFsLoaderオブジェクト
Implements
Inherited Members
Namespace: CriWare
Assembly: CriWare.CriFs.dll
Syntax
public class CriFsLoader : IDisposable
Constructors
CriFsLoader()
CriFsLoaderの作成
Declaration
public CriFsLoader()
Remarks
説明: CriFsLoaderを作成します。
Properties
LoadEndCallback
コールバックイベントオブジェクト
Declaration
public CriFsLoader.LoadEndCbFunc LoadEndCallback { get; }
Property Value
Type | Description |
---|---|
CriFsLoader.LoadEndCbFunc |
See Also
NativeHandle
ネイティブハンドル
Declaration
public NativeHandleIntPtr NativeHandle { get; }
Property Value
Type | Description |
---|---|
NativeHandleIntPtr |
Methods
CreateWithWork(out CriFsLoader, IntPtr, int)
CriFsLoaderの作成
Declaration
public static CriErr.Error CreateWithWork(out CriFsLoader loader, IntPtr work = default, int workSize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsLoader | loader | CriFsLoaderオブジェクト |
IntPtr | work | ワーク領域 |
int | workSize | ワーク領域サイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CriFsLoaderを作成します。 ローダーを作成する際、ワーク領域を指定する点が CriFsLoader(IntPtr) 関数と異なります。 本関数で作成したローダーは、ライブラリ初期化時に指定したワーク領域とは異なる領域に配置されます。 そのため、 CriFs.Config::num_loaders の制限を受けません。 ( CriFs.Config::num_loaders に指定した数のローダーを作成した状態であっても、 本関数でさらにローダーを作成することが可能です。) ワーク領域のサイズは GetWorkSize(out int) 関数で取得可能です。 ローダー作成前に GetWorkSize(out int) 関数で取得したサイズ分のメモリを確保し、本関数に指定してください。
注意: ローダーを破棄する( Dispose() 関数を実行する)までは、ワーク領域に対する読み書きが発生します。 ワーク領域として指定したメモリは、ローダーを破棄するまでは解放しないでください。
See Also
DecompressData(IntPtr, long, IntPtr, long)
メモリ上に配置された圧縮データの展開
Declaration
public CriErr.Error DecompressData(IntPtr src, long srcSize, IntPtr dst, long dstSize)
Parameters
Type | Name | Description |
---|---|---|
IntPtr | src | 圧縮データアドレス |
long | srcSize | 圧縮データサイズ |
IntPtr | dst | 展開先メモリアドレス |
long | dstSize | 展開先メモリ領域サイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: メモリ上に配置された圧縮データを、別のメモリ領域に展開します。 本関数は即時復帰関数です。 ロードの完了状態を取得するには GetStatus(out Status)関数を使用してください。
備考: 入力データが圧縮されていない場合、 本関数は入力データを出力アドレスへそのままコピーします。
注意: 本関数を使用するには、Ver.2.19.21以降のCRI File System Toolsを使用してデータを作成する必要があります。 (データを作成したツールが古い場合、データが展開されません。) 本関数は、CRI独自のソフトウェア圧縮コーデックにしか対応していません。 ハードウェアデコーダーを使用する場合や、プラットフォーム固有のコーデックを使用している場合、 本関数ではデータを展開できません。
See Also
Dispose()
CriFsLoaderの破棄
Declaration
public void Dispose()
Remarks
説明: CriFsLoaderを破棄します。
注意: 本関数をロード完了コールバック内で実行しないでください。
See Also
GetIoError(out IoError)
I/Oエラーコードの取得
Declaration
public CriErr.Error GetIoError(out CriFs.IoError ioErr)
Parameters
Type | Name | Description |
---|---|---|
CriFs.IoError | ioErr | I/Oエラーコード |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: I/Oのエラーコードを取得します。 GetStatus(out Status) 関数がステータスがエラー状態になった場合、 本関数を実行することでI/Oインターフェイスから返されたエラーコードを 取得することが可能です。
See Also
GetLoadSize(out long)
ロードサイズの取得
Declaration
public CriErr.Error GetLoadSize(out long size)
Parameters
Type | Name | Description |
---|---|---|
long | size | ロードサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ロードされたサイズを取得します。
GetPriority(out Priority)
プライオリティの取得
Declaration
public CriErr.Error GetPriority(out CriFsLoader.Priority prio)
Parameters
Type | Name | Description |
---|---|---|
CriFsLoader.Priority | prio | 読み込みプライオリティ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: データロードのプライオリティを取得します。
See Also
GetProgress(out long, out long)
ロード進行状況の取得
Declaration
public CriErr.Error GetProgress(out long progress, out long requestSize)
Parameters
Type | Name | Description |
---|---|---|
long | progress | ロード進行状況(読み込み済みサイズ) |
long | requestSize | ロード要求サイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ロード進行状況を取得します。 本関数で取得できる値は、ロード進行状況の確認、ロード失敗時のリジューム処理などに利用できます。
GetStatus(out Status)
ロードステータスの取得
Declaration
public CriErr.Error GetStatus(out CriFsLoader.Status status)
Parameters
Type | Name | Description |
---|---|---|
CriFsLoader.Status | status | ロードステータス |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ロードステータスを取得します。
GetWorkSize(out int)
ローダー作成用ワーク領域サイズの取得
Declaration
public static CriErr.Error GetWorkSize(out int workSize)
Parameters
Type | Name | Description |
---|---|---|
int | workSize | ワーク領域サイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ローダーの作成に必要なワーク領域のサイズを取得します。 CreateWithWork(out CriFsLoader, IntPtr, int) 関数でローダーを作成する場合、 本関数でワーク領域のサイズを取得し、取得したサイズ分のメモリを確保する必要があります。
備考: CriFsLoader(IntPtr) 関数を使用してローダーを作成する場合、本関数を使用する必要はありません。
See Also
Load(CriFsBinder, ArgString, long, long, IntPtr, long)
データのロード
Declaration
public CriErr.Error Load(CriFsBinder binder, ArgString path, long offset, long loadSize, IntPtr buffer, long bufferSize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | binder | CriFsBinderオブジェクト |
ArgString | path | ファイルパス名 |
long | offset | ファイルの先頭からのオフセット位置 |
long | loadSize | ロードサイズ |
IntPtr | buffer | バッファーへのポインター |
long | bufferSize | バッファーのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインダーとファイル名で、データの読み込みを開始します。 ファイル内の offset バイト目から、load_size バイト分読み込みます。 本関数は即時復帰関数です。ロードの完了状態を取得するには GetStatus(out Status)関数を使用してください。 また、本関数は指定された CriFsBinder オブジェクトを介して CPK ファイル内の圧縮コンテンツを読み込むこともできます。
注意: 圧縮コンテンツの読み込みに際して、0 より大きなオフセット位置を指定した場合はエラーになります。 また、圧縮コンテンツコンテンツを先頭から一部分だけ読み込むということもできません。コンテンツ全体を読み込んでください。
See Also
LoadById(CriFsBinder, int, long, long, IntPtr, long)
データのロード (CPKファイル内のファイルIDを指定)
Declaration
public CriErr.Error LoadById(CriFsBinder binder, int id, long offset, long loadSize, IntPtr buffer, long bufferSize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | binder | CriFsBinderオブジェクト |
int | id | ファイルID |
long | offset | ファイルの先頭からのオフセット位置 |
long | loadSize | ロードサイズ |
IntPtr | buffer | バッファーへのポインター |
long | bufferSize | バッファーのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインダーとファイルIDで、データの読み込みを開始します。 ファイル内の offset バイト目から、load_size バイト分読み込みます。 本関数は即時復帰関数です。ロードの完了状態を取得するには GetStatus(out Status)関数を使用してください。
See Also
LoadWithoutDecompression(CriFsBinder, ArgString, long, long, IntPtr, long)
圧縮データを展開せずにメモリ上にロード
Declaration
public CriErr.Error LoadWithoutDecompression(CriFsBinder binder, ArgString path, long offset, long loadSize, IntPtr buffer, long bufferSize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | binder | CriFsBinderオブジェクト |
ArgString | path | ファイルパス名 |
long | offset | ファイルの先頭からのオフセット位置 |
long | loadSize | ロードサイズ |
IntPtr | buffer | バッファーへのポインター |
long | bufferSize | バッファーのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインダーとファイル名で、データの読み込みを開始します。 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数と異なり、データが圧縮されている場合でも、 データを展開せずにメモリ上にロードします。 本関数は即時復帰関数です。 ロードの完了状態を取得するには GetStatus(out Status)関数を使用してください。
See Also
LoadWithoutDecompressionById(CriFsBinder, int, long, long, IntPtr, long)
圧縮データを展開せずにメモリ上にロード(CPKファイル内のファイルIDを指定)
Declaration
public CriErr.Error LoadWithoutDecompressionById(CriFsBinder binder, int id, long offset, long loadSize, IntPtr buffer, long bufferSize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | binder | CriFsBinderオブジェクト |
int | id | ファイルID |
long | offset | ファイルの先頭からのオフセット位置 |
long | loadSize | ロードサイズ |
IntPtr | buffer | バッファーへのポインター |
long | bufferSize | バッファーのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインダーとファイルIDで、データの読み込みを開始します。 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数と異なり、データが圧縮されている場合でも、 データを展開せずにメモリ上にロードします。 本関数は即時復帰関数です。 ロードの完了状態を取得するには GetStatus(out Status)関数を使用してください。
See Also
SetLoadEndCallback(delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void>, IntPtr)
ロード完了コールバックの登録
Declaration
public CriErr.Error SetLoadEndCallback(delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void> func, IntPtr obj)
Parameters
Type | Name | Description |
---|---|---|
delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void> | func | コールバック関数 |
IntPtr | obj | コールバック関数へ渡す引数 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ロード完了時に実行されるコールバック関数を登録します。 ロード完了コールバックは、ローダーのステータスが Loading から 他のステータスに遷移した直後に呼び出されます。 ( Complete 以外にも、 Stop や Error に遷移する際にもコールバックは実行されます。)
備考: 厳密には、ステータス遷移~コールバック実行までの間に他の処理が割り込みで動作する 余地があるため、ステータス遷移とコールバック実行のタイミングがズレる可能性があります。
注意: ロード完了コールバックは、 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数が Ok を返す場合にのみ呼び出されます。 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数に不正な引数を渡した場合等、 ロード処理自体が開始されない場合(ローダーのステータスが Loading にならない場合)には、ロード完了コールバック自体が実行されません。 ロード処理やロード完了コールバックの呼び出しは、 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数を実行したスレッドとは別のスレッドで実行される可能性があります。 ほとんどの場合、他スレッドでのファイル読み込みが完了する前に Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数から処理は復帰しますが、 何らしかの理由で Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数を実行するスレッドの動作が遅れた(または別スレッドでの処理が瞬時に完了した)場合、 Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数から復帰する前にロード完了コールバックが呼び出される形になります。 ロード完了後に呼び出されるロード完了コールバック関数は、 『ロード開始時点で登録済みのコールバック関数』です。 そのため、ロード処理開始~ロード完了までの間にロード完了コールバックを登録し直したとしても、 呼び出される関数は変更されません。 (登録し直したロード完了コールバック関数が使用されるのは、次回ロード処理実行時となります。) ロード完了コールバック内で参照されるオブジェクトは、 ローダーのステータスが完了状態(または停止状態)になった場合でも、 ロード完了コールバックが実行されるまでは解放しないでください。 (ステータス遷移後、ロード完了コールバックが実行されるまでは、 登録済みのコールバックパラメータが参照される可能性があります。) コールバックを登録した状態でロード処理を行っているローダーを Dispose() 関数で破棄した場合、 Dispose() 関数内でロード完了コールバックが実行される可能性があります。 ロード完了コールバックを実行している間、他のファイルのロードがブロックされます。 そのため、ロード完了コールバック内で負荷の高い処理を行なわないよう、ご注意ください。 ロード完了コールバック内でローダーのステータス遷移を待つ処理を行わないでください。 ローダーのステータス更新は、ロード完了コールバックと同一のスレッド上で行われます。 そのため、ロード完了コールバック内でステータス遷移を待つ処理を行うと、 デッドロックが発生し、処理が進まなくなります。 コールバック関数はローダー内のメモリ領域に対して登録されます。 そのため、ロード完了コールバック内でローダーを破棄することはできません。 (ロード完了コールバック内で Dispose() 関数を実行すると、 エラーが発生します。) コールバック関数は1つしか登録できません。 登録操作を複数回行った場合、既に登録済みのコールバック関数が、 後から登録したコールバック関数により上書きされてしまいます。 funcにnullを指定するとことで登録済み関数の登録解除が行えます。
See Also
SetLoadLimiter(LoadLimiterNo)
ロードリミッタ番号の設定
Declaration
public CriErr.Error SetLoadLimiter(CriFs.LoadLimiterNo limiterNo)
Parameters
Type | Name | Description |
---|---|---|
CriFs.LoadLimiterNo | limiterNo | ロードリミッタ番号 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CriFsLoaderオブジェクトにロードリミッタ番号を割り当てます。 共通のリミッタ番号を割り当てた全てのローダー、グループローダー、バッチローダーの合計読み込みサイズが制限されます。
注意: ゲーム機向けではロードリミッタ機能は非サポートです。この関数は呼び出さないでください。
See Also
SetPriority(Priority)
プライオリティの設定
Declaration
public CriErr.Error SetPriority(CriFsLoader.Priority prio)
Parameters
Type | Name | Description |
---|---|---|
CriFsLoader.Priority | prio | 読み込みプライオリティ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: データロードのプライオリティを設定します。 複数のローダーに対し、同時に Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数でロードを実行した場合、 プライオリティの高いローダーが先に読み込みを行います。 また、既に低プライオリティのローダーが巨大なデータを読み込んでいる最中でも、 後から高プライオリティのローダーの読み込みを開始すれば、低プライオリティのローダーの処理に割り込んで、 高プライオリティのローダーの読み込みが先に実行されます。
備考: 複数のローダーが全て同一プライオリティであった場合、 データの読み込みは Load(CriFsBinder, ArgString, long, long, IntPtr, long) 関数を実行した順に処理されます。
注意: ファイルの読み込みが行なわれていない状態でロードを開始した場合、 プライオリティに関係なく、そのロード処理が即座に開始されます。 そのため、ファイルの読み込みが行なわれていない状態で低プライオリティローダーの読み込みを行なった場合、 直後に高プライオリティのローダーで読み込みを開始したとしても、 低プライオリティローダーの読み込みがある程度行なわれることになります。 (単位読み込みサイズ分のデータを処理するまでは、他のローダーに処理がスイッチすることはありません。)
See Also
SetReadUnitSize(long)
単位読み込みサイズの設定
Declaration
public CriErr.Error SetReadUnitSize(long unitSize)
Parameters
Type | Name | Description |
---|---|---|
long | unitSize | 単位読み込みサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 単位読み込みサイズを設定します。 CriFsLoaderは、大きなサイズのリード要求を処理する際、それを複数の小さな単位のリード処理に分割して連続実行します。 この関数を使用することで単位リード処理サイズを変更することが可能です。 リード要求のキャンセルや、高プライオリティのリード処理の割り込み等は、単位リードサイズ境界でのみ処理されます。 そのため、ユニットサイズを小さく設定すると、I/O処理のレスポンスが向上します。逆に、ユニットサイズを大きく設定すると、ファイル単位の読み込み速度が向上します。
Stop()
ロードの停止
Declaration
public CriErr.Error Stop()
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ロードを停止します。 本関数は即時復帰関数です。停止状態を取得するには GetStatus(out Status) 関数を使用してください。
注意: 本関数を実行しても、ローダーのステータスが Stop に変わるまでは、バッファーへのデータ転送が続いている可能性があります。 ステータスが更新されるまでは、データロード先のバッファーを解放しないでください。