1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: tpl_crc32.h 4 5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 19639 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_TPL_CTR_TPL_CRC32_H_ 17 #define NN_TPL_CTR_TPL_CRC32_H_ 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 namespace nn { namespace tpl { namespace CTR { 24 25 // テクスチャパッケージ(.ctpk)のヘッダ情報からハッシュ(search_crc32_data())を 26 // 用いてテクスチャを検索するための実装。 27 struct TPK_SEARCH_DATA 28 { 29 const char *szFileName; // 検索するテクスチャファイル名 30 int fileNameLen; // 比較する文字数(拡張子を比較するかでかわる) 31 const void *infoData; // テクスチャパッケージのヘッダ情報 32 }; 33 34 /** 35 データブロックに対してCRC32コードを計算する。 36 */ 37 unsigned int calculate_crc32( 38 const void *data, 39 unsigned int size); 40 41 42 /** 43 先頭にCRC32コードを持つ構造体を検索する。(バイナリサーチ) 44 \param base データ配列へのポインタ(ソート済み) 45 \param num データ数 46 \param width 1要素のサイズ 47 \param crc 検索キーとなるCRCコード 48 \return 一致する最初のデータのインデックス。 49 一致するデータがなければ-1を返す。 50 */ 51 int search_crc32_index( 52 const void *base, unsigned int num, unsigned int width, unsigned int crc); 53 54 55 /** 56 先頭にCRC32コードを持つ構造体を検索する。(バイナリサーチ) 57 \param base データ配列へのポインタ(ソート済み) 58 \param num データ数 59 \param width 1要素のサイズ 60 \param crc 検索キーとなるCRCコード 61 \param cmpFunc 比較関数 62 \param value 比較関数に渡す比較値 63 \return 一致するデータのインデックス。 64 一致するデータがなければ-1を返す。 65 \par 解説: 66 crcでバイナリーサーチをした後、 67 cmpFuncに渡された比較関数と値valueを使って実際に一致するデータを検索する。 68 偶然複数のデータが同じCRC32コードを持った場合にも対応できる。 69 \par 70 cmpFuncの第一引数には base 上にある構造体データのポインタ、 71 第二引数には value 引数の値が渡される。 72 データが検索対象であれば true を返す。 73 */ 74 int search_crc32_data( 75 const void *base, unsigned int num, unsigned int width, unsigned int crc, 76 const void *value); 77 78 }}} // namespace 79 80 #ifdef __cplusplus 81 } 82 #endif 83 84 85 #endif // NN_TPL_CTR_TPL_CRC32_H_ 86