79 lines
3.1 KiB
C
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
|