/*---------------------------------------------------------------------------* Project: Horizon File: tpl_crc32.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 19639 $ *---------------------------------------------------------------------------*/ #ifndef NN_TPL_CTR_TPL_CRC32_H_ #define NN_TPL_CTR_TPL_CRC32_H_ #ifdef __cplusplus extern "C" { #endif namespace nn { namespace tpl { namespace CTR { // テクスチャパッケージ(.ctpk)のヘッダ情報からハッシュ(search_crc32_data())を // 用いてテクスチャを検索するための実装。 struct TPK_SEARCH_DATA { const char *szFileName; // 検索するテクスチャファイル名 int fileNameLen; // 比較する文字数(拡張子を比較するかでかわる) const void *infoData; // テクスチャパッケージのヘッダ情報 }; /** データブロックに対してCRC32コードを計算する。 */ unsigned int calculate_crc32( const void *data, unsigned int size); /** 先頭にCRC32コードを持つ構造体を検索する。(バイナリサーチ) \param base データ配列へのポインタ(ソート済み) \param num データ数 \param width 1要素のサイズ \param crc 検索キーとなるCRCコード \return 一致する最初のデータのインデックス。 一致するデータがなければ-1を返す。 */ int search_crc32_index( const void *base, unsigned int num, unsigned int width, unsigned int crc); /** 先頭にCRC32コードを持つ構造体を検索する。(バイナリサーチ) \param base データ配列へのポインタ(ソート済み) \param num データ数 \param width 1要素のサイズ \param crc 検索キーとなるCRCコード \param cmpFunc 比較関数 \param value 比較関数に渡す比較値 \return 一致するデータのインデックス。 一致するデータがなければ-1を返す。 \par 解説:  crcでバイナリーサーチをした後、 cmpFuncに渡された比較関数と値valueを使って実際に一致するデータを検索する。 偶然複数のデータが同じCRC32コードを持った場合にも対応できる。 \par  cmpFuncの第一引数には base 上にある構造体データのポインタ、 第二引数には value 引数の値が渡される。 データが検索対象であれば true を返す。 */ int search_crc32_data( const void *base, unsigned int num, unsigned int width, unsigned int crc, const void *value); }}} // namespace #ifdef __cplusplus } #endif #endif // NN_TPL_CTR_TPL_CRC32_H_