/*---------------------------------------------------------------------------*/ /* 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