reman3/Rayman_X/cpa/tempgrp/AI/AIBase/specif/ActTable.h

103 lines
4.5 KiB
C

/*---------------------------------------------------------------------------*/
/* Action table functions and macros for intelligence engine*/
/* author : 22/12/96 Olivier Couvreur*/
/* modify : 07/11/96 Olivier Couvreur */
/* modify : 03/02/97 Olivier Couvreur Lint 0 warnings */
/* modify : 26/02/97 Olivier Couvreur added Schedule support + Lint 0 warnings*/
/* modify : 05/03/97 Olivier Couvreur added Schedule function + Lint 0 warnings*/
/* modify : 25/03/97 Olivier Couvreur added REVERSE_RULES support + optimizations (not yet activated)*/
/*---------------------------------------------------------------------------*/
#if !defined(__ACTTABLE_H__)
#define __ACTTABLE_H__
#define DEFAULT_ACTION_TABLE_NB_ENTRIES 3
#define MIN_ACTION_TABLE_NB_ENTRIES 2
#define MAX_ACTION_TABLE_NB_ENTRIES 5
#if defined(U64)
#include "AIUseCPA.h"
#include "StrIntel.h"
#endif
#include "ActParam.h"
typedef struct tdstActionTableEntry_
{
/* action parameter*/
struct tdstActionParam_ stActionParam;
/* action node pointer*/
struct tdstNodeInterpret_ *p_stNode;
/* 1 if entry is used*/
unsigned char bUsed;
/* rule number*/
unsigned char ucNumRule;
unsigned char bUseDefaultActionReturn;
unsigned char ucNewActionReturn;
} tdstActionTableEntry;
typedef struct tdstActionTable_
{
struct tdstActionTableEntry_ *p_stEntry;
/* nb possible actions*/
unsigned char ucNbEntries;
/* nb actions not immediate*/
unsigned char ucNbEntriesUsed;
/* for parameter acces : cf actparam.cpp*/
unsigned char ucCurrentEntry;
} tdstActionTable;
#define M_ActionTable(p_stInt) ((p_stInt)->p_stActionTable)
#define M_ActionTableCurrentEntry(p_stInt) (M_ActionTable(p_stInt)->ucCurrentEntry)
#define M_ActionTableNbEntriesUsed(p_stInt) (M_ActionTable(p_stInt)->ucNbEntriesUsed)
#define M_TableNbEntries(p_stTable) ((p_stTable)->ucNbEntries)
#define M_ActionTableNbEntries(p_stInt) (M_TableNbEntries(M_ActionTable(p_stInt)))
#define M_IsActionTableUsed(p_stInt) ((M_ActionTableNbEntriesUsed(p_stInt)!=0)?TRUE:FALSE)
#define M_TableEntry(p_stTable) ((p_stTable)->p_stEntry)
#define M_ActionTableEntry(p_stInt) (M_TableEntry(M_ActionTable(p_stInt)))
#define M_ActionTableEntryN(p_stInt, N) (M_TableEntry(M_ActionTable(p_stInt))[(N)])
#define M_ActionTableNumRule(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).ucNumRule)
#define M_ActionTableNumNode(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).p_stNode)
#define M_ActionTableUseFlag(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).bUsed)
#define M_ActionTableParam(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).stActionParam)
#define M_ActionTableUseActionReturn(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).bUseDefaultActionReturn)
#define M_ActionTableNewActionReturn(p_stInt, N) (M_ActionTableEntryN(p_stInt, N).ucNewActionReturn)
unsigned char fn_ucIsRuleInActionTable(struct tdstIntelligence_ *p_stIntelligence,unsigned char ucNumRule);
unsigned char fn_ucIsRuleAndNodeInActionTable(struct tdstIntelligence_ *p_stIntelligence,unsigned char ucNumRule,struct tdstNodeInterpret_ *p_stNode);
unsigned char fn_ucFindPlaceInActionTable(struct tdstIntelligence_ *p_stIntelligence);
void fn_vUseCurrentActionTableEntry(struct tdstIntelligence_ *p_stIntelligence,unsigned char ucNRule,struct tdstNodeInterpret_ *p_stNode);
void fn_vUnuseCurrentActionTableEntry(struct tdstIntelligence_ *p_stIntelligence);
void fn_vUnuseAllRulesWhichHaveGreaterNumRule(struct tdstIntelligence_ *p_stIntelligence,unsigned char ucNumRule);
void fn_vUnuseAllRulesFromSchedule(struct tdstIntelligence_ *p_stIntelligence);
struct tdstNodeInterpret_ *fn_p_stGetScheduleFromActionTableAndClearIt(struct tdstIntelligence_ *p_stIntelligence);
struct tdstNodeInterpret_ *fn_p_stGetTableAction(struct tdstIntelligence_ *p_stIntelligence, unsigned char ucNEntry);
/**************************************/
#if !defined(CPA_EXPORT)
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else
#define CPA_EXPORT
#endif /*CPA_WANTS_IMPORT || CPA_WANTS_EXPORT*/
#endif /*CPA_EXPORT*/
/**************************************/
#undef extern
#define EXTERN_AI_DLL extern
/***********************************************************************/
EXTERN_AI_DLL CPA_EXPORT void fn_vInitActionTable(struct tdstIntelligence_ *p_stIntelligence);
/*******************************************************************************/
#undef EXTERN_AI_DLL
#endif