ctr_Repair/trunk/SkipFirstLaunch/idb/include/IDBi.h
N2614 0d5bf9a14e UIG製のコードを追加
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@651 385bec56-5757-e545-9c3a-d8741f4650f1
2012-02-22 02:25:50 +00:00

118 lines
4.2 KiB
C

// IDBi.h : コンソール アプリケーションのエントリ ポイントを定義します。
//
#ifndef __IDB_IDBi_H_
#define __IDB_IDBi_H_
#include <nn/types.h>
#include "IDB.h"
#include <nn/assert.h>
#ifdef __cplusplus
extern "C" {
#endif // ifdef __cplusplus
// IDBi_Time型
// 2000年1月1日 UTCの真夜中からの閏秒を考慮しない経過秒数
// 最大で2133年前後まで記録できる
typedef u32 IDBi_Time;
// データベースを取得するためのキーとなるインデックス
typedef u16 IDBi_Index;
#define IDBi_INDEX_INVALID 0xffff // 無効なインデックス
// アプレットをマスクするときのID
static const nn::ProgramId IDBi_MASK_PROGRAM_ID = 0xffffffffffffff00ull;
// データ比較用のテーブル
typedef struct
{
bit64 programID;
u32 lastAccess; // IDBi_Time lastAccess : 最終アクセス日時
u16 remasterVersion; // リマスターバージョン
u8 reserved0; // 予約領域(必ず0で埋める)
u8 reserved1; // 予約領域(必ず0で埋める)
} IDBi_IconTable;
// 1つのアイコンのデータ本体
typedef struct
{
u16 region; // IDB_Region region : リージョン
u8 format; // IDB_IconFormat format : フォーマット
u8 padding[1]; // パディング
u8 rating[IDB_RATING_MAX]; // レーティング情報
u32 matchMakeGameCode; // マッチメイクゲームコード
u64 matchMakeGameCodeBit; // マッチメイクゲームコードビット
IDB_SoftwareInfo info[IDB_LANGUAGE_MAX];
IDB_IconData data; // アイコン画像
} IDBi_IconData;
// アイコンのデータベース、テーブルファイルフォーマット
typedef struct
{
u16 ownerDataCount; // 保存されているオーナーデータ数
u8 padding[6]; // パディング
IDBi_IconTable iconTable[IDB_ICON_DATA_MAX]; // 比較用のテーブル
} IDBi_TableFile;
// アイコンのデータベース、アイコンファイルフォーマット
typedef struct
{
IDBi_IconData iconData[IDB_ICON_DATA_MAX]; // データ本体
} IDBi_DataFile;
// データ区分
typedef enum
{
IDBi_DIVISION_OWNER, // オーナー枠
IDBi_DIVISION_FRIEND, // フレンド枠
IDBi_DIVISION_NONE, // 区分に無い
IDBi_DIVISION_INVALID = 0x7fffffff
} IDBi_Division;
/////////////////////////////////////////////////////////////////////////////////
// コンパイル時アサート(静的アサート)
/////////////////////////////////////////////////////////////////////////////////
// NW_COMPILER_ASSERT( sizeof(u8)==1 ); // 8bit
// NW_COMPILER_ASSERT( sizeof(u16)==2 ); // 16bit
// NW_COMPILER_ASSERT( sizeof(u32)==4 ); // 32bit
// NW_COMPILER_ASSERT( sizeof(int)>=4 ); // intは32bit以上
// NW_COMPILER_ASSERT( (1ULL<<(8*sizeof(s8)-1)) > IDB_FORMAT_MAX ); // IDB_FORMAT_MAXはs8で表せる最大サイズ以下
// NW_COMPILER_ASSERT( (1ULL<<(8*sizeof(IDBi_Index))) > IDB_ICON_DATA_MAX ); // IDBi_IndexはIDB_ICON_DATA_MAX分のindexを表現できる
// NW_COMPILER_ASSERT( (1ULL<<(8*sizeof(IDBi_Time ))) > 60ULL*60*24*(365+1)*100 ); // IDBi_Timeは秒単位で100年以上表現できる
// // 秒 分 時 日 年
/////////////////////////////////////////////////////////////////////////////////
// 関数宣言
/////////////////////////////////////////////////////////////////////////////////
void IDBi_Initialize( u8 * buffer, bool onMemory, bool readOnly );
u8 * IDBi_Finalize( void );
u32 IDBi_GetBufferSize( bool onMemory );
BOOL IDBi_IsInitialized( void );
IDBi_Index IDBi_Update( IDB_Icon * inIcon, IDBi_Division division );
BOOL IDBi_Select( IDB_Icon * outIcon, IDB_Key * key, BOOL updateLastAccess = TRUE );
BOOL IDBi_SelectFromIndex( IDB_Icon * outIcon, IDBi_Index index, BOOL updateLastAccess = TRUE );
BOOL IDBi_IsContains( IDB_Key * key );
void IDBi_MaskProgramID( nn::ProgramId* programID );
IDBi_Index IDBi_GetIndex( const IDB_Key * restrict inKey );
nn::ProgramId IDBi_GetProgramID( const int index );
void IDBi_Save(void);
void IDBi_Load(void);
#ifdef __cplusplus
}
#endif // ifdef __cplusplus
#endif // ifndef __IDB_IDB_H_