reman3/Rayman_X/cpa/public/SCR/SCR_Mem.h

174 lines
5.8 KiB
C

/*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
* SCR_Mem.h
* Scripts, Beaudet Christophe
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
*/
#ifndef __SCR_Mem_h__Types
#define __SCR_Mem_h__Types
#ifndef __Only_Types__
#define __SCR_Mem_h__Undef
#define __Only_Types__
#endif /* !__Only_Types__ */
/*
*=================================================================================================
* Includes.
*=================================================================================================
*/
#include "ErrScr.h" /* ERM */
#include "MmgScr.h" /* MMG */
#include "Malloc.h"
#ifdef __SCR_Mem_h__Undef
#undef __Only_Types__
#undef __SCR_Mem_h__Undef
#endif /* __SCR_Mem_h__Undef */
/*
*=================================================================================================
* Constants.
*=================================================================================================
*/
/*
* To export code.
*/
#undef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else /* CPA_WANTS_IMPORT */
#define CPA_EXPORT
#endif /* CPA_WANTS_IMPORT */
#endif /* !__SCR_Mem_h__Types */
/*
*=================================================================================================
* Global variables.
*=================================================================================================
*/
#if !defined(__SCR_Mem_h__Globals) && !defined(__Only_Types__)
#define __SCR_Mem_h__Globals
extern unsigned char g_uc_Mem_CurrentAllocationType;
extern unsigned long g_a_ul_Mem_BlocAllocationSize[E_ucScrMaxBlocksNb];
extern unsigned long g_a_ul_Mem_MemoryAllocated[256];
extern unsigned char g_uc_Mem_CurrentMemLevel;
extern unsigned char g_uc_Mem_CurrentLinkLevel;
extern unsigned char g_uc_Mem_LastMemLevel;
#endif /* !__SCR_Mem_h__Globals && !__Only_Types__ */
/*
*=================================================================================================
* Macros.
*=================================================================================================
*/
#if !defined(__SCR_Mem_h__Macros) && !defined(__Only_Types__)
#define __SCR_Mem_h__Macros
/*
* A macro for a simple malloc.
* A macro for a simple malloc with an init of allocated memory.
* A macro for a realloc.
* A macro to free.
*/
#define SCR_M_Mem_Alloc(_Cast, _Pointer, _Size)\
{\
_Pointer = NULL;\
if(_Size)\
{\
g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] += (_Size * sizeof(_Cast));\
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
MMG_fn_vAddMemoryInfo(MMG_C_lTypeScript, MMG_C_lSubTypeScript, NULL);\
_Pointer = (_Cast *) Mmg_fn_p_vAlloc4Ch(_Size * sizeof(_Cast), C_ucMmgDefaultChannel);\
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
if(_Pointer == NULL)\
{\
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
}\
}\
}
#define SCR_M_Mem_AllocAndSet(_Cast, _Pointer, _Size)\
{\
SCR_M_Mem_Alloc(_Cast, _Pointer, _Size);\
if(_Pointer == NULL)\
{\
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
}\
memset(_Pointer, 0, _Size * sizeof(_Cast));\
}
#define SCR_M_Mem_Realloc(_Cast, _PointerSrc, _PointerDest, _Size, _AddSize)\
{\
g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] += (_AddSize * sizeof(_Cast));\
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
_PointerSrc = (_Cast *) Mmg_fn_p_vRealloc4Ch(_PointerDest, _Size * sizeof(_Cast), C_ucMmgDefaultChannel);\
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
if(_PointerSrc == NULL)\
{\
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
}\
}
#define SCR_M_Mem_Free(_Pointer)\
{\
if(_Pointer)\
{\
/*g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] -= _msize(((char *) _Pointer) - 1);*/\
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
Mmg_fn_vFree4Ch(_Pointer, C_ucMmgDefaultChannel);\
_Pointer = NULL;\
}\
}
#endif /* !__SCR_Mem_h__Macros && !__Only_Types__ */
/*
*=================================================================================================
* Protos.
*=================================================================================================
*/
#if !defined(__SCR_Mem_h__Protos) && !defined(__Only_Types__)
#define __SCR_Mem_h__Protos
extern void fn_v_Mem_InitModule(void);
extern void fn_v_Mem_CloseModule(void);
CPA_EXPORT extern void SCR_fn_v_Mem_InitWithMemLevel(unsigned long *);
CPA_EXPORT extern void SCR_fn_v_Mem_DeleteWithMemLevel(unsigned char, unsigned char);
CPA_EXPORT extern void SCR_fn_v_Mem_ReduceMemory(void);
CPA_EXPORT extern unsigned char SCR_fn_uc_Mem_GetCurrentLevel(void);
CPA_EXPORT extern void SCR_fn_v_Mem_SetCurrentLevel(unsigned char);
CPA_EXPORT extern unsigned char SCR_fn_uc_Mem_GetCurrentLinkLevel(void);
CPA_EXPORT extern void SCR_fn_v_Mem_SetCurrentLinkLevel(unsigned char);
extern void fn_v_Mem_SetMode(unsigned char);
CPA_EXPORT extern unsigned long SCR_fn_ul_Mem_GetAllocationSize(unsigned char, unsigned long);
CPA_EXPORT extern void Scr_PrintUsedStaticMemory(void);
#endif /* !__SCR_Mem_h__Protos && !__Only_Types__ */