reman3/Rayman_X/cpa/public/AI/AIBase/Array.h

79 lines
3.1 KiB
C

/*---------------------------------------------------------------------------*/
/* Array.h : Typed array for AI.*/
/* author : Olivier Couvreur 28/11/1997*/
/*---------------------------------------------------------------------------*/
#if !defined(__ARRAY_H__)
#define __ARRAY_H__
#define C_ucSizeOfMinimalArray 2
#define C_ucSizeOfMaximalArray 255
#define C_TypeOfArray1 struct tdstArray1_
#define C_SizeOfArray1 (sizeof (C_TypeOfArray1))
#define M_ARRAY_TYPE(array) ((array)->eType)
#define M_ARRAY_SIZE(array) ((array)->ucMaxSize)
//FB120399
// to optimize memory usage of array
#ifndef ACTIVE_EDITOR
#define OPTIMIZED_ARRAY
#endif
// magic or not ?
#if defined(OPTIMIZED_ARRAY)
#define ARRAY_FACTOR 3
#define C_TypeOfArrayElement tduGetSetParamForNode
#define C_SizeOfArrayElement (sizeof(C_TypeOfArrayElement))
#define M_ARRAY_ELEMENT(array,n) (&((array)->d_ArrayElement[(M_ARRAY_TYPE(array)==eDsgVarType_Vector)?ARRAY_FACTOR*n:n]))
#define M_ARRAY_CLEAR(array) memset(&((array)->d_ArrayElement[0]),0, (M_ARRAY_TYPE(array)==eDsgVarType_Vector) ? ARRAY_FACTOR*M_ARRAY_SIZE(array)*C_SizeOfArrayElement : M_ARRAY_SIZE(array)*C_SizeOfArrayElement)
#else
#define C_TypeOfArrayElement tduGetSetParam
#define C_SizeOfArrayElement (sizeof(C_TypeOfArrayElement))
#define M_ARRAY_ELEMENT(array,n) (&((array)->d_ArrayElement[n]))
#define M_ARRAY_CLEAR(array) memset(M_ARRAY_ELEMENT(array,0),0, M_ARRAY_SIZE(array)*C_SizeOfArrayElement)
#endif // OPTIMIZED_ARRAY
/* BEGIN ROMTEAM Cristi Petrescu 98-11-*/
#define M_ARRAY_COPY(pstDest,pstSource) \
{ M_ARRAY_SIZE (pstDest) = M_ARRAY_SIZE (pstSource); \
M_ARRAY_TYPE (pstDest) = M_ARRAY_TYPE (pstSource); \
memcpy (M_ARRAY_ELEMENT (pstDest, 0), M_ARRAY_ELEMENT (pstSource, 0), M_ARRAY_SIZE (pstSource) * C_SizeOfArrayElement);}
#define M_ARRAY_COMPARE(pstArray1,pstArray2) \
((M_ARRAY_SIZE (pstArray1) == M_ARRAY_SIZE (pstArray2)) && \
(M_ARRAY_TYPE (pstArray1) != M_ARRAY_TYPE (pstArray2)) && \
(memcmp (M_ARRAY_ELEMENT (pstArray1, 0), M_ARRAY_ELEMENT (pstArray2, 0), M_ARRAY_SIZE (pstArray1) * C_SizeOfArrayElement) == 0))
/* END ROMTEAM Cristi Petrescu 98-11-*/
typedef struct tdstArray1_
{
/*enum tdeVariableType_ eType;*/
enum tdeDsgVarTypeId_ eType;
/*unsigned char ucNbElement;*/
unsigned char ucMaxSize;
// OPTIMIZED_ARRAY
C_TypeOfArrayElement d_ArrayElement[1];
} tdstArray1;/* used to know the size of the an array with one element*/
typedef struct tdstArray_
{
/*enum tdeVariableType_ eType;*/
enum tdeDsgVarTypeId_ eType;
/*unsigned char ucNbElement; */
unsigned char ucMaxSize;
// OPTIMIZED_ARRAY
C_TypeOfArrayElement d_ArrayElement[C_ucSizeOfMaximalArray];
} tdstArray;/* use for every array pointer, easy to watch all element in debug mode*/
/*void fn_vPutInArray (struct tdstArray_ *p_stArray, unsigned char ucIndex, struct tdstGetSetParam_ *p_stParam);*/
/*void fn_vGetFromArray(struct tdstArray_ *p_stArray, unsigned char ucIndex, struct tdstGetSetParam_ *p_stParam);*/
void fn_vInitArray(struct tdstArray_ *p_stArray,enum tdeDsgVarTypeId_ eDsgVarType,unsigned char ucNbElements,char *szParams[]);
#endif