// IDBi.h : コンソール アプリケーションのエントリ ポイントを定義します。 // #ifndef __IDB_IDBi_H_ #define __IDB_IDBi_H_ #include #include "IDB.h" #include #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_