# MI_ReadCache

## 構文

  `#include <nitro/mi.h>
  BOOL MI_ReadCache(MICache *cache, void *buffer, u32 offset, u32 length);`

## 引数

cache | アクセスする`MICache`構造体へのポインタ `MI_InitCache()`で初期化されている必要があります。
buffer | 読み込んだデータを格納する転送先メモリ NULLを指定した場合は、指定範囲のキャッシュ先読みを指示します。 詳細は後述の「説明」をご参照ください。
offset | データを読み込むべきデバイス上の先頭アドレス
length | 読み込むサイズ

## 返り値

キャッシュにヒットして読み込みが成功すればTRUE、そうでなければFALSE。

## 説明

`MICache`構造体のキャッシュページリストからデータを読み込みます。

指定された範囲のデータがすでに`MI_LoadCache()`によってロード済みであれば、 キャッシュページリストからデータをコピーしてTRUEを返します。

指定された範囲の一部または全てがキャッシュページリストに存在しない場合は、 キャッシュページリスト内のもっとも使用されていないページを破棄してロード待ち状態にし、FALSEを返します。

ロード待ち状態になったページは、次回の`MI_LoadCache()`呼び出しで実際にロードされます。

転送先メモリであるbufferにNULLを指定した場合はキャッシュにヒットしても何もしませんが、 ヒットしなかった範囲のページをロード待ち状態にする処理は同様です。よって、指定範囲を「先読み準備」するよう指示する目的で利用することができます。

この関数はスレッドセーフです。 別のスレッドが`MI_LoadCache()`などを呼び出している間でも使用することが出来ます。

この機能は、デバイス読み込みアクセスを効率よく行うためのユーティリティです。
詳細は`MICache`構造体のリファレンスをご参照ください。

## 参照

`MI_InitCache, MI_LoadCache, MI_IsCacheLoading
MICache`

## 履歴

2007/05/16 初版