/*---------------------------------------------------------------------------* Project: Horizon File: fnd_DetailHeapCommon.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: 18703 $ *---------------------------------------------------------------------------*/ #ifndef NN_FND_DETAIL_FND_DETAIL_HEAPCOMMON_H_ #define NN_FND_DETAIL_FND_DETAIL_HEAPCOMMON_H_ #include #include #include "./fnd_DetailList.h" #ifdef __cplusplus namespace nn { namespace fnd { namespace detail { /*! @addtogroup os os @{ */ /*! @defgroup os_Heap Heap @{ */ /// @cond /* ======================================================================== マクロ定数 ======================================================================== */ // 無効なヒープハンドル #define NN_OS_HEAP_INVALID_HANDLE NULL // ヒープからメモリを割り当てるときのデフォルトのアライメントサイズ #define NN_OS_HEAP_DEFAULT_ALIGNMENT 4 #define NNSI_CREATE_HEAP_SIGNATURE(a,b,c,d) ( ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0) ) // 拡張ヒープのシグネチャ #define NNSI_EXPHEAP_SIGNATURE NNSI_CREATE_HEAP_SIGNATURE('E','X','P','H') // フレームヒープのシグネチャ #define NNSI_FRMHEAP_SIGNATURE NNSI_CREATE_HEAP_SIGNATURE('F','R','M','H') // ユニットヒープのシグネチャ #define NNSI_UNTHEAP_SIGNATURE NNSI_CREATE_HEAP_SIGNATURE('U','N','T','H') /* ------------------------------------------------------------------------ フィル関係 ------------------------------------------------------------------------ */ // メモリ確保時にメモリを0でクリア #define NN_OS_HEAP_OPT_0_CLEAR (1 <<0) // ヒープ作成時・メモリ確保・解放時にメモリ充填 #define NN_OS_HEAP_OPT_DEBUG_FILL (1 <<1) /* ------------------------------------------------------------------------ ヒープチェック関係 ------------------------------------------------------------------------ */ // このビットが立っているとエラー出力 #define NN_OS_HEAP_ERROR_PRINT (1 <<0) /* ======================================================================== enum定数 ======================================================================== */ enum { NN_OS_HEAP_FILL_NOUSE, // デバッグフィル未使用時 NN_OS_HEAP_FILL_ALLOC, // デバッグフィル確保時 NN_OS_HEAP_FILL_FREE, // デバッグフィル解放時 NN_OS_HEAP_FILL_MAX }; /* ======================================================================= 型定義 ======================================================================== */ /*! @typedef Heap @brief ヒープのハンドルを表す型 */ typedef ExpHeapImpl NNSiFndHeapHead; typedef NNSiFndHeapHead* Heap; // ヒープのハンドルを表す型 typedef NNSiFndHeapHead const * ConstHeap; /*---------------------------------------------------------------------------* Name: MemGetHeapTotalSize Description: ヒープに割り当てられているメモリサイズ(ヘッダ部分も含む全体のメモリサイズ) を取得します。 Arguments: heap ヒープハンドル。 Returns: ヒープに割り当てられているメモリサイズ(ヘッダ部分も含む全体のメモリサイズ) を返します。 *---------------------------------------------------------------------------*/ static inline s32 GetHeapTotalSize(ConstHeap heap) { return ((s32)(heap->heapEnd) - (s32)(heap->heapStart)); } /* ======================================================================== マクロ関数 ======================================================================== */ /*---------------------------------------------------------------------------* Name: GetHeapStartAddress Description: ヒープが利用するメモリ領域の開始アドレスを取得します。 Arguments: heap: ヒープハンドル。 Returns: ヒープが利用するメモリ領域の開始アドレスを返します。 *---------------------------------------------------------------------------*/ #define GetHeapStartAddress(heap) \ ((void*)(((nn::fnd::detail::NNSiFndHeapHead*)(heap))->heapStart)) /*---------------------------------------------------------------------------* Name: GetHeapEndAddress Description: ヒープが利用するメモリ領域の終了アドレス +1 を取得します。 Arguments: heap: ヒープハンドル。 Returns: ヒープが利用するメモリ領域の終了アドレス +1 を返します。 *---------------------------------------------------------------------------*/ #define GetHeapEndAddress(heap) \ (((nn::fnd::detail::NNSiFndHeapHead*)(heap))->heapEnd) /* ======================================================================= 関数プロトタイプ ======================================================================== */ Heap FindContainHeap( const void* memBlock); #if defined(NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK) #define DumpHeap(heap) ((void)0) #else void DumpHeap( Heap heap); #endif #ifndef NN_BUILD_VERBOSE #define SetFillValForHeap(type, val) (0) #else u32 SetFillValForHeap( int type, u32 val); #endif #ifndef NN_BUILD_VERBOSE #define GetFillValForHeap(type) (0) #else u32 GetFillValForHeap( int type); #endif /// @endcond /*! @} */ /*! @} */ }}} // namespace nn::os #endif // __cplusplus /* NN_OS_HEAPCOMMON_H_ */ #endif /* NN_OS_OS_HEAPCOMMON_H_ */