Add rayman2 source files
This commit is contained in:
163
Rayman_X/cpa/public/LST/CpaList.hpp
Normal file
163
Rayman_X/cpa/public/LST/CpaList.hpp
Normal file
@@ -0,0 +1,163 @@
|
||||
/* (c) Ubi Studios 1996*/
|
||||
/* See Vincent Greco for any comment or question*/
|
||||
|
||||
#ifndef __CPALST_HPP__
|
||||
#define __CPALST_HPP__
|
||||
|
||||
#include "afxtempl.h"
|
||||
|
||||
template<class TYPE>
|
||||
class CPA_List : public CList<TYPE*, TYPE*>
|
||||
{
|
||||
public:
|
||||
CPA_List(){}
|
||||
~CPA_List(){}
|
||||
|
||||
|
||||
|
||||
/* TYPE* FindElementFromPos (POSITION& rPosition) const; */
|
||||
TYPE* FindElementFromIndex(int nIndex) const;/*nIndex is int (not tIndex) because of MFC compatibility...*/
|
||||
|
||||
|
||||
/*Position based Iteration*/
|
||||
|
||||
TYPE* GetAtElement (POSITION& rPosition) const;
|
||||
TYPE* GetHeadElement (POSITION& rPosition) const;
|
||||
TYPE* GetTailElement (POSITION& rPosition) const;
|
||||
TYPE* GetNextElement (POSITION& rPosition) const;
|
||||
TYPE* GetPrevElement (POSITION& rPosition) const;
|
||||
BOOL AvailableElement(POSITION& rPosition) const;
|
||||
|
||||
/*Element based Iteration*/
|
||||
|
||||
TYPE* GetHeadElement (void) const;
|
||||
TYPE* GetTailElement (void) const;
|
||||
TYPE* GetNextElement (TYPE* pElement) const;
|
||||
TYPE* GetPrevElement (TYPE* pElement) const;
|
||||
BOOL AvailableElement(TYPE* pElement) const;
|
||||
};
|
||||
|
||||
/*inline functions*/
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetAtElement(POSITION& rPosition) const
|
||||
{
|
||||
return rPosition!=NULL ? GetAt(rPosition) : NULL;
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::FindElementFromIndex(int nIndex) const
|
||||
{
|
||||
POSITION Position=FindIndex(nIndex);
|
||||
return GetAtElement(Position);
|
||||
}
|
||||
|
||||
|
||||
/*Position based Iteration*/
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetHeadElement(POSITION& rPosition) const
|
||||
{
|
||||
rPosition = GetHeadPosition();
|
||||
return GetAtElement(rPosition);
|
||||
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetTailElement(POSITION& rPosition) const
|
||||
{
|
||||
rPosition = GetTailPosition();
|
||||
return GetAtElement(rPosition);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetNextElement(POSITION& rPosition) const
|
||||
{
|
||||
if(rPosition)
|
||||
{
|
||||
GetNext(rPosition);
|
||||
return GetAtElement(rPosition);
|
||||
}
|
||||
else
|
||||
return GetHeadElement(rPosition);
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetPrevElement(POSITION& rPosition) const
|
||||
{
|
||||
if(rPosition)
|
||||
{
|
||||
GetPrev(rPosition);
|
||||
return GetAtElement(rPosition);
|
||||
}
|
||||
else
|
||||
return GetTailElement(rPosition);
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline BOOL CPA_List<TYPE>::AvailableElement(POSITION& rPosition) const
|
||||
{
|
||||
return (rPosition != NULL);
|
||||
}
|
||||
|
||||
|
||||
/*Element based Iteration*/
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetHeadElement(void) const
|
||||
{
|
||||
POSITION Position;
|
||||
return GetHeadElement(Position);
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetTailElement(void) const
|
||||
{
|
||||
POSITION Position;
|
||||
return GetTailElement(Position);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetNextElement(TYPE* pElement) const
|
||||
{
|
||||
POSITION Position=NULL;
|
||||
if(!pElement) return GetNextElement(Position);/*return head*/
|
||||
Position=Find(pElement);
|
||||
return Position?GetNextElement(Position):NULL;/*if not found return NULL*/
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline TYPE* CPA_List<TYPE>::GetPrevElement(TYPE* pElement) const
|
||||
{
|
||||
POSITION Position=NULL;
|
||||
if(!pElement) return GetPrevElement(Position);/*return tail*/
|
||||
Position=Find(pElement);
|
||||
return Position?GetPrevElement(Position):NULL;/*if not found return NULL*/
|
||||
}
|
||||
|
||||
template<class TYPE>
|
||||
inline BOOL CPA_List<TYPE>::AvailableElement(TYPE* pElement) const
|
||||
{
|
||||
return (pElement != NULL);
|
||||
}
|
||||
|
||||
|
||||
#define M_ForAllTheElementsInList(pElement, pListe, Position) \
|
||||
for \
|
||||
( \
|
||||
pElement=(pListe)->GetHeadElement(Position); \
|
||||
(pListe)->AvailableElement(Position); \
|
||||
pElement=(pListe)->GetNextElement(Position) \
|
||||
)
|
||||
|
||||
|
||||
#endif/*__CPALST_HPP__*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
699
Rayman_X/cpa/public/LST/LstDef2.h
Normal file
699
Rayman_X/cpa/public/LST/LstDef2.h
Normal file
@@ -0,0 +1,699 @@
|
||||
/* (c) Ubi Studios 1996-97*/
|
||||
/* See Vincent Greco for any comment or question*/
|
||||
|
||||
|
||||
#ifndef __LSTDEF2_H__
|
||||
#define __LSTDEF2_H__
|
||||
|
||||
/*//////////////////////////////////*/
|
||||
#ifndef U64
|
||||
|
||||
#if defined(_DEBUG)
|
||||
/* Debug version : Static lists are Double link List*/
|
||||
#undef LST2_StaticIsOptimised
|
||||
#undef LST2_StaticIsSemiOptimised
|
||||
#undef LST2_StaticIsSingleLink
|
||||
#else
|
||||
/* Release version : Static lists are Single link List*/
|
||||
#undef LST2_StaticIsOptimised
|
||||
#undef LST2_StaticIsSemiOptimised
|
||||
#define LST2_StaticIsSingleLink
|
||||
#endif
|
||||
|
||||
#else /* U64*/
|
||||
|
||||
#ifndef LST2_StaticIsOptimised
|
||||
#undef LST2_StaticIsSemiOptimised
|
||||
#define LST2_StaticIsSingleLink
|
||||
#pragma message( "Warning ! LST2_StaticIsOptimised isn't defined" )
|
||||
#else /*LST2_StaticIsOptimised*/
|
||||
#undef LST2_StaticIsSemiOptimised
|
||||
#undef LST2_StaticIsSingleLink
|
||||
#endif /*LST2_StaticIsOptimised*/
|
||||
|
||||
#endif /*U64*/
|
||||
/*//////////////////////////////////*/
|
||||
|
||||
#define LST2_C_DynamicInvalid LST2_C_DoubleLinkInvalid
|
||||
#define LST2_M_DynamicAnchorTo(TypeElement) LST2_M_AnchorTo(Dyn, TypeElement)
|
||||
#define LST2_M_DynamicUseListOf(type) LST2_M_DoubleLinkUseListOf(Dyn, type)
|
||||
#define LST2_M_DynamicGetMember(handle, member) LST2_M_DoubleLinkGetMember(Dyn, handle, member)
|
||||
#define LST2_M_DynamicSetMember(handle, member, value) LST2_M_DoubleLinkSetMember(Dyn, handle, member, value)
|
||||
#define LST2_M_DynamicAnchorDeclaration(TypeElement) LST2_M_DoubleLinkAnchorDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_DynamicParentDeclaration(TypeElement) LST2_M_DoubleLinkParentDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_DynamicGetFirstElement(hAnchor) LST2_M_DoubleLinkGetFirstElement(Dyn, hAnchor)
|
||||
#define LST2_M_DynamicGetLastElement(hAnchor) LST2_M_DoubleLinkGetLastElement(Dyn, hAnchor)
|
||||
#define LST2_M_DynamicGetNumberOfElements(hAnchor) LST2_M_DoubleLinkGetNumberOfElements(Dyn, hAnchor)
|
||||
#define LST2_M_DynamicSetFirstElement(hAnchor, value) LST2_M_DoubleLinkSetFirstElement(Dyn, hAnchor, value)
|
||||
#define LST2_M_DynamicSetLastElement(hAnchor, value) LST2_M_DoubleLinkSetLastElement(Dyn, hAnchor, value)
|
||||
#define LST2_M_DynamicInitAnchor(hAnchor) LST2_M_DoubleLinkInitAnchor(Dyn, hAnchor)
|
||||
#define LST2_M_DynamicElementDeclaration(TypeElement) LST2_M_DoubleLinkElementDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_DynamicChildDeclaration(TypeElement, TypeParent) LST2_M_DoubleLinkChildDeclaration(Dyn, TypeElement, TypeParent)
|
||||
#define LST2_M_DynamicGetNextElement(hElement) LST2_M_DoubleLinkGetNextElement(Dyn, hElement)
|
||||
#define LST2_M_DynamicGetPrevElement(hElement) LST2_M_DoubleLinkGetPrevElement(Dyn, hElement)
|
||||
#define LST2_M_DynamicGetFather(hElement) LST2_M_DoubleLinkGetFather(Dyn, hElement)
|
||||
#define LST2_M_DynamicSetNextElement(hElement, value) LST2_M_DoubleLinkSetNextElement(Dyn, hElement, value)
|
||||
#define LST2_M_DynamicSetPrevElement(hElement, value) LST2_M_DoubleLinkSetPrevElement(Dyn, hElement, value)
|
||||
#define LST2_M_DynamicSetFather(hElement, value) LST2_M_DoubleLinkSetFather(Dyn, hElement, value)
|
||||
#define LST2_M_DynamicInitElement(hElement) LST2_M_DoubleLinkInitElement(Dyn, hElement)
|
||||
#define LST2_M_DynamicAddTail(hAnchor, hElement) LST2_M_DoubleLinkAddTail(Dyn, hAnchor, hElement)
|
||||
#define LST2_M_DynamicAddHead(hAnchor, hElement) LST2_M_DoubleLinkAddHead(Dyn, hAnchor, hElement)
|
||||
#define LST2_M_DynamicIsolate(hElement) LST2_M_DoubleLinkIsolate(Dyn, hElement)
|
||||
#define LST2_M_DynamicInsertBetween(hElement,hPrevElement,hNextElement) LST2_M_DoubleLinkInsertBetween(Dyn, hElement,hPrevElement,hNextElement)
|
||||
#define LST2_M_DynamicWhatElementNumber(hElement0,hElement, i) LST2_M_DoubleLinkWhatElementNumber(Dyn, hElement0,hElement, i)
|
||||
#define LST3_M_DynamicWhatElementNumber(hElement0,hAnchor, hElement, i) LST3_M_DoubleLinkWhatElementNumber(Dyn, hElement0,hAnchor,hElement, i)
|
||||
#define LST2_M_DynamicForEachElementOf(hAnchor, hElement, i) LST2_M_DoubleLinkForEachElementOf(Dyn, hAnchor, hElement, i)
|
||||
#define LST2_M_DynamicForEachMovingElementOf(hAnchor, hElement, hNextElement, i) LST2_M_DoubleLinkForEachMovingElementOf(Dyn, hAnchor, hElement, hNextElement, i)
|
||||
#define LST2_M_DynamicGetElementNumber(hAnchor, hElement, k, i) LST2_M_DoubleLinkGetElementNumber(Dyn, hAnchor, hElement, k, i)
|
||||
#define LST2_M_DynamicGetNthBrother(hFirstElement, hElement, k, i) LST2_M_DoubleLinkGetNthBrother(Dyn, hFirstElement, hElement, k, i)
|
||||
|
||||
|
||||
/*//////////////////////////////////*/
|
||||
#ifdef LST2_StaticIsOptimised
|
||||
|
||||
/*----------------------------------------------------------------*/
|
||||
/*"optimized" static version (all elements are consecutive) -> WITHOUT editor*/
|
||||
/*not all non optimized macros are defined*/
|
||||
|
||||
#define LST2_C_StaticInvalid LST2_C_ArrayInvalid
|
||||
#define LST2_M_StaticGetMember(handle, member) LST2_M_ArrayGetMember(Opt, handle, member)
|
||||
#define LST2_M_StaticSetMember(handle, member, value) LST2_M_ArraySetMember(Opt, handle, member, value)
|
||||
#define LST2_M_StaticAnchorTo(TypeElement) LST2_M_ArrayAnchorTo(Opt, TypeElement)
|
||||
#define LST2_M_StaticUseListOf(TypeElement) LST2_M_ArrayUseListOf(Opt, TypeElement)
|
||||
#define LST2_M_StaticParentDeclaration(TypeElement) LST2_M_ArrayParentDeclaration(Opt, TypeElement)
|
||||
#define LST2_M_StaticAnchorDeclaration(TypeElement) LST2_M_ArrayAnchorDeclaration(Opt, TypeElement)
|
||||
#define LST2_M_StaticGetFirstElement(hAnchor) LST2_M_ArrayGetFirstElement(Opt, hAnchor)
|
||||
#define LST2_M_StaticSetFirstElement(hAnchor, value) LST2_M_ArraySetFirstElement(Opt, hAnchor, value)
|
||||
#define LST2_M_StaticGetNumberOfElements(hAnchor) LST2_M_ArrayGetNumberOfElements(Opt, hAnchor)
|
||||
#define LST2_M_StaticSetNumberOfElements(hAnchor, value) LST2_M_ArraySetNumberOfElements(Opt, hAnchor, value)
|
||||
#define LST2_M_StaticElementDeclaration(TypeElement) LST2_M_ArrayElementDeclaration(Opt, TypeElement)
|
||||
#define LST2_M_StaticChildDeclaration(TypeElement,TypeParent) LST2_M_ArrayChildDeclaration(Opt, TypeElement,TypeParent)
|
||||
#define LST2_M_StaticGetNextElement(_hElement) LST2_M_ArrayGetNextElement(Opt, _hElement)
|
||||
#define LST2_M_StaticGetNthBrother(hFirstElement, hElement, k, i) LST2_M_ArrayGetNthBrother(Opt, hFirstElement, hElement, k, i)
|
||||
#define LST2_M_StaticGetPrevElement(_hElement) LST2_M_ArrayGetPrevElement(Opt, _hElement)
|
||||
#define LST2_M_StaticForEachElementOf(_hAnchor, _hElement, _i) LST2_M_ArrayForEachElementOf(Opt, _hAnchor, _hElement, _i)
|
||||
#define LST2_M_StaticGetElementNumber(_hAnchor, _hElement, _k, _i) LST2_M_ArrayGetElementNumber(Opt, _hAnchor, _hElement, _k, _i)
|
||||
#define LST2_M_StaticWhatElementNumber(_hElement0,_hAnchor, _i) LST2_M_ArrayWhatElementNumber(Opt, _hElement0,_hAnchor, _i)
|
||||
#define LST3_M_StaticWhatElementNumber(_hElement0,_hAnchor, _hIterator, _i) LST3_M_ArrayWhatElementNumber(Opt, _hElement0,_hAnchor, _hIterator, _i)
|
||||
/* CHRISTOPHE*/
|
||||
#define LST2_M_StaticGetLastElement(hAnchor) LST2_M_ArrayGetLastElement(Opt, hAnchor)
|
||||
|
||||
#define LST2_M_StaticInitAnchor(hAnchor)
|
||||
#define LST2_M_StaticInitElement(hElement)
|
||||
|
||||
#endif /* LST2_StaticIsOptimised */
|
||||
|
||||
|
||||
/*//////////////////////////////////*/
|
||||
#ifdef LST2_StaticIsSemiOptimised
|
||||
/*----------------------------------------------------------------*/
|
||||
/*"semi-optimized" static version (at the loading time elment are not consecutive*/
|
||||
/* but there is a function that copy them consecutively) -> WITHOUT editor*/
|
||||
/* not all non optimized macros are defined*/
|
||||
|
||||
|
||||
#define LST2_C_StaticInvalid LST2_C_StaticInvalid
|
||||
#define LST2_M_StaticGetMember(handle, member) LST2_M_ArrayGetMember(SemiOpt, handle, member)
|
||||
#define LST2_M_StaticSetMember(handle, member, value) LST2_M_ArraySetMember(SemiOpt, handle, member, value)
|
||||
#define LST2_M_StaticAnchorTo(TypeElement) LST2_M_ArrayAnchorTo(SemiOpt, TypeElement)
|
||||
#define LST2_M_StaticUseListOf(TypeElement) LST2_M_ArrayUseListOf(SemiOpt, TypeElement)
|
||||
#define LST2_M_StaticParentDeclaration(TypeElement) LST2_M_DoubleLinkParentDeclaration(SemiOpt, TypeElement)
|
||||
#define LST2_M_StaticAnchorDeclaration(TypeElement) LST2_M_DoubleLinkAnchorDeclaration(SemiOpt, TypeElement)
|
||||
#define LST2_M_StaticGetFirstElement(hAnchor) LST2_M_ArrayGetFirstElement(SemiOpt, hAnchor)
|
||||
#define LST2_M_StaticGetNumberOfElements(hAnchor) LST2_M_ArrayGetNumberOfElements(SemiOpt, hAnchor)
|
||||
#define LST2_M_StaticSetFirstElement(hAnchor, value) LST2_M_ArraySetFirstElement(SemiOpt, hAnchor, value)
|
||||
#define LST2_M_StaticSetNumberOfElements(hAnchor, value) LST2_M_ArraySetNumberOfElements(SemiOpt, hAnchor, value)
|
||||
#define LST2_M_StaticElementDeclaration(TypeElement) LST2_M_DoubleLinkElementDeclaration(SemiOpt, TypeElement)
|
||||
#define LST2_M_StaticChildDeclaration(TypeElement,TypeParent) LST2_M_DoubleLinkChildDeclaration(SemiOpt, TypeElement,TypeParent)
|
||||
#define LST2_M_StaticGetNextElement(_hElement) LST2_M_ArrayGetNextElement(SemiOpt, _hElement)
|
||||
#define LST2_M_StaticGetPrevElement(_hElement) LST2_M_ArrayGetPrevElement(SemiOpt, _hElement)
|
||||
#define LST2_M_StaticGetNthBrother(hFirstElement, hElement, k, i) LST2_M_ArrayGetNthBrother(SemiOpt, hFirstElement, hElement, k, i)
|
||||
#define LST2_M_StaticForEachElementOf(_hAnchor, _hElement, _i) LST2_M_ArrayForEachElementOf(SemiOpt, _hAnchor, _hElement, _i)
|
||||
#define LST2_M_StaticGetElementNumber(_hAnchor, _hElement, _k, _i) LST2_M_ArrayGetElementNumber(SemiOpt, _hAnchor, _hElement, _k, _i)
|
||||
#define LST2_M_StaticWhatElementNumber(_hElement0,_hAnchor, _i) LST2_M_ArrayWhatElementNumber(SemiOpt, _hElement0,_hAnchor, _i)
|
||||
#define LST3_M_StaticWhatElementNumber(_hElement0,_hAnchor, _hIterator, _i) LST3_M_ArrayWhatElementNumber(SemiOpt, _hElement0,_hAnchor, _hIterator, _i)
|
||||
|
||||
/*#define LST2_M_StaticGetLastElement(hAnchor) LST2_M_DoubleLinkGetLastElement(SemiOpt, hAnchor)*/
|
||||
/*#define LST2_M_StaticSetLastElement(hAnchor, value) LST2_M_DoubleLinkSetLastElement(SemiOpt, hAnchor, value)*/
|
||||
/*#define LST2_M_StaticGetFather(hElement) LST2_M_DoubleLinkGetFather(SemiOpt, hElement)*/
|
||||
/*#define LST2_M_StaticSetNextElement(hElement, value) LST2_M_DoubleLinkSetNextElement(SemiOpt, hElement, value)*/
|
||||
/*#define LST2_M_StaticSetPrevElement(hElement, value) LST2_M_DoubleLinkSetPrevElement(SemiOpt, hElement, value)*/
|
||||
/*#define LST2_M_StaticSetFather(hElement, value) LST2_M_DoubleLinkSetFather(SemiOpt, hElement, value)*/
|
||||
#define LST2_M_StaticInitElement(hElement) LST2_M_DoubleLinkInitElement(SemiOpt, hElement)
|
||||
#define LST2_M_StaticAddTail(hAnchor, hElement) LST2_M_DoubleLinkAddTail(SemiOpt, hAnchor, hElement)
|
||||
#define LST2_M_StaticAddHead(hAnchor, hElement) LST2_M_DoubleLinkAddHead(SemiOpt, hAnchor, hElement)
|
||||
#define LST2_M_StaticIsolate(hElement) LST2_M_DoubleLinkIsolate(SemiOpt, hElement)
|
||||
#define LST2_M_StaticInsertBetween(hElement,hPrevElement,hNextElement) LST2_M_DoubleLinkInsertBetween(SemiOpt, hElement,hPrevElement,hNextElement)
|
||||
#define LST3_M_StaticInsertBetween(hAnchor,hElement,hPrevElement,hNextElement) LST2_M_DoubleLinkInsertBetween(SemiOpt, hElement,hPrevElement,hNextElement)
|
||||
|
||||
|
||||
#define LST2_M_StaticConvert(_hAnchor, _dTab, _ulSize, _hDest, _hSrc, _i) \
|
||||
{ \
|
||||
_hDest=_dTab; \
|
||||
LST2_M_DoubleLinkForEachElementOf(SemiOpt, _hAnchor, _hSrc, _i) \
|
||||
{ \
|
||||
memcpy(_hDest, _hSrc, _ulSize); \
|
||||
_hDest++; \
|
||||
} \
|
||||
LST2_M_StaticSetFirstElement(_hAnchor, _dTab); \
|
||||
}
|
||||
|
||||
|
||||
#endif /* LST2_StaticIsSemiOptimised */
|
||||
|
||||
/*//////////////////////////////////*/
|
||||
#ifdef LST2_StaticIsSingleLink
|
||||
/*----------------------------------------------------------------*/
|
||||
|
||||
#define LST2_C_StaticInvalid LST2_C_DoubleLinkInvalid
|
||||
#define LST2_M_StaticGetMember(handle, member) LST2_M_SingleLinkGetMember(SLk, handle, member)
|
||||
#define LST2_M_StaticSetMember(handle, member, value) LST2_M_SingleLinkSetMember(SLk, handle, member, value)
|
||||
#define LST2_M_StaticAnchorTo(TypeElement) LST2_M_SingleLinkAnchorTo(SLk, TypeElement)
|
||||
#define LST2_M_StaticUseListOf(TypeElement) LST2_M_SingleLinkUseListOf(SLk, TypeElement)
|
||||
#define LST2_M_StaticParentDeclaration(TypeElement) LST2_M_SingleLinkParentDeclaration(SLk, TypeElement)
|
||||
#define LST2_M_StaticAnchorDeclaration(TypeElement) LST2_M_SingleLinkAnchorDeclaration(SLk, TypeElement)
|
||||
#define LST2_M_StaticGetFirstElement(hAnchor) LST2_M_SingleLinkGetFirstElement(SLk, hAnchor)
|
||||
#define LST2_M_StaticGetLastElement(hAnchor) LST2_M_SingleLinkGetLastElement(SLk, hAnchor)
|
||||
#define LST2_M_StaticGetNumberOfElements(hAnchor) LST2_M_SingleLinkGetNumberOfElements(SLk, hAnchor)
|
||||
#define LST2_M_StaticInitAnchor(hAnchor) LST2_M_SingleLinkInitAnchor(SLk, hAnchor)
|
||||
#define LST2_M_StaticElementDeclaration(TypeElement) LST2_M_SingleLinkElementDeclaration(SLk, TypeElement)
|
||||
#define LST2_M_StaticChildDeclaration(TypeElement,TypeParent) LST2_M_SingleLinkChildDeclaration(SLk, TypeElement,TypeParent)
|
||||
#define LST2_M_StaticGetNextElement(_hElement) LST2_M_SingleLinkGetNextElement(SLk, _hElement)
|
||||
#define LST2_M_StaticGetNthBrother(hFirstElement, hElement, k, i) LST2_M_SingleLinkGetNthBrother(SLk, hFirstElement, hElement, k, i)
|
||||
#define LST2_M_StaticForEachElementOf(_hAnchor, _hElement, _i) LST2_M_SingleLinkForEachElementOf(SLk, _hAnchor, _hElement, _i)
|
||||
#define LST2_M_StaticGetElementNumber(_hAnchor, _hElement, _k, _i) LST2_M_SingleLinkGetElementNumber(SLk, _hAnchor, _hElement, _k, _i)
|
||||
#define LST3_M_StaticWhatElementNumber(_hElement0,_hAnchor, _hIterator, _i) LST3_M_SingleLinkWhatElementNumber(SLk, _hElement0,_hAnchor, _hIterator, _i)
|
||||
#define LST2_M_StaticAddHead(hAnchor, hElement) LST2_M_SingleLinkAddHead(SLk, hAnchor, hElement)
|
||||
#define LST2_M_StaticAddTail(hAnchor, hElement) LST2_M_SingleLinkAddTail(SLk, hAnchor, hElement)
|
||||
#define LST2_M_StaticInitElement(hElement) LST2_M_SingleLinkInitElement(SLk, hElement)
|
||||
#define LST3_M_StaticInsertBetween(hAnchor,hElement,hPrevElement,hNextElement) LST3_M_SingleLinkInsertBetween(SLk, hAnchor,hElement,hPrevElement,hNextElement)
|
||||
|
||||
#undef LST2_M_StaticSetNumberOfElements
|
||||
#undef LST2_M_StaticGetPrevElement
|
||||
#undef LST2_M_StaticWhatElementNumber
|
||||
#undef LST2_M_StaticSetFirstElement
|
||||
#undef LST2_M_StaticSetLastElement
|
||||
#undef LST2_M_StaticSetNextElement
|
||||
#undef LST2_M_StaticIsolate
|
||||
#undef LST2_M_StaticInsertBetween
|
||||
|
||||
|
||||
#endif /* LST2_StaticIsSingleLink */
|
||||
|
||||
/*--------------------------------------*/
|
||||
|
||||
#if !defined(LST2_StaticIsOptimised)&&!defined(LST2_StaticIsSemiOptimised)&&!defined(LST2_StaticIsSingleLink)
|
||||
/*non optimized static lists are DoubleLink ones*/
|
||||
|
||||
#define LST2_C_StaticInvalid LST2_C_DoubleLinkInvalid
|
||||
#define LST2_M_StaticGetMember(handle, member) LST2_M_DoubleLinkGetMember(Dyn, handle, member)
|
||||
#define LST2_M_StaticSetMember(handle, member, value) LST2_M_DoubleLinkSetMember(Dyn, handle, member, value)
|
||||
#define LST2_M_StaticAnchorTo(TypeElement) LST2_M_AnchorTo(Dyn, TypeElement)
|
||||
#define LST2_M_StaticUseListOf(type) LST2_M_DoubleLinkUseListOf(Dyn, type)
|
||||
#define LST2_M_StaticParentDeclaration(TypeElement) LST2_M_DoubleLinkParentDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_StaticAnchorDeclaration(TypeElement) LST2_M_DoubleLinkAnchorDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_StaticGetFirstElement(hAnchor) LST2_M_DoubleLinkGetFirstElement(Dyn, hAnchor)
|
||||
#define LST2_M_StaticGetLastElement(hAnchor) LST2_M_DoubleLinkGetLastElement(Dyn, hAnchor)
|
||||
#define LST2_M_StaticGetNumberOfElements(hAnchor) LST2_M_DoubleLinkGetNumberOfElements(Dyn, hAnchor)
|
||||
#define LST2_M_StaticSetFirstElement(hAnchor, value) LST2_M_DoubleLinkSetFirstElement(Dyn, hAnchor, value)
|
||||
#define LST2_M_StaticSetLastElement(hAnchor, value) LST2_M_DoubleLinkSetLastElement(Dyn, hAnchor, value)
|
||||
#define LST2_M_StaticInitAnchor(hAnchor) LST2_M_DoubleLinkInitAnchor(Dyn, hAnchor)
|
||||
#define LST2_M_StaticElementDeclaration(TypeElement) LST2_M_DoubleLinkElementDeclaration(Dyn, TypeElement)
|
||||
#define LST2_M_StaticChildDeclaration(TypeElement, TypeParent) LST2_M_DoubleLinkChildDeclaration(Dyn, TypeElement, TypeParent)
|
||||
#define LST2_M_StaticGetNextElement(hElement) LST2_M_DoubleLinkGetNextElement(Dyn, hElement)
|
||||
#define LST2_M_StaticGetPrevElement(hElement) LST2_M_DoubleLinkGetPrevElement(Dyn, hElement)
|
||||
#define LST2_M_StaticGetFather(hElement) LST2_M_DoubleLinkGetFather(Dyn, hElement)
|
||||
#define LST2_M_StaticSetNextElement(hElement, value) LST2_M_DoubleLinkSetNextElement(Dyn, hElement, value)
|
||||
#define LST2_M_StaticSetPrevElement(hElement, value) LST2_M_DoubleLinkSetPrevElement(Dyn, hElement, value)
|
||||
#define LST2_M_StaticSetFather(hElement, value) LST2_M_DoubleLinkSetFather(Dyn, hElement, value)
|
||||
#define LST2_M_StaticInitElement(hElement) LST2_M_DoubleLinkInitElement(Dyn, hElement)
|
||||
#define LST2_M_StaticAddTail(hAnchor, hElement) LST2_M_DoubleLinkAddTail(Dyn, hAnchor, hElement)
|
||||
#define LST2_M_StaticAddHead(hAnchor, hElement) LST2_M_DoubleLinkAddHead(Dyn, hAnchor, hElement)
|
||||
#define LST2_M_StaticIsolate(hElement) LST2_M_DoubleLinkIsolate(Dyn, hElement)
|
||||
#define LST2_M_StaticInsertBetween(hElement,hPrevElement,hNextElement) LST2_M_DoubleLinkInsertBetween(Dyn, hElement,hPrevElement,hNextElement)
|
||||
#define LST2_M_StaticWhatElementNumber(hElement0,hElement, i) LST2_M_DoubleLinkWhatElementNumber(Dyn, hElement0,hElement, i)
|
||||
#define LST3_M_StaticWhatElementNumber(hElement0, hAnchor, hElement, i) LST3_M_DoubleLinkWhatElementNumber(Dyn, hElement0, hAnchor, hElement, i)
|
||||
#define LST2_M_StaticForEachElementOf(hAnchor, hElement, i) LST2_M_DoubleLinkForEachElementOf(Dyn, hAnchor, hElement, i)
|
||||
/*this macro will be removed very soon (no moving element in a static list !)*/
|
||||
#define LST2_M_StaticForEachMovingElementOf(hAnchor, hElement, hNextElement, i) LST2_M_DoubleLinkForEachMovingElementOf(Dyn, hAnchor, hElement, hNextElement, i)
|
||||
#define LST2_M_StaticGetElementNumber(hAnchor, hElement, k, i) LST2_M_DoubleLinkGetElementNumber(Dyn, hAnchor, hElement, k, i)
|
||||
#define LST2_M_StaticGetNthBrother(hFirstElement, hElement, k, i) LST2_M_DoubleLinkGetNthBrother(Dyn, hFirstElement, hElement, k, i)
|
||||
#define LST3_M_StaticInsertBetween(hAnchor,hElement,hPrevElement,hNextElement) LST2_M_DoubleLinkInsertBetween(Dyn, hElement,hPrevElement,hNextElement)
|
||||
|
||||
#endif /* !LST2_StaticIsOptimised && !LST2_StaticIsSemiOptimised && !LST2_StaticIsSingleLink*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------*/
|
||||
|
||||
#define LST2_C_ArrayInvalid 0
|
||||
|
||||
#define LST2_M_ArrayGetMember(n, handle, member) \
|
||||
((handle)->member##n)
|
||||
|
||||
#define LST2_M_ArraySetMember(n, handle, member, value) \
|
||||
{(handle)->member##n=(value);}
|
||||
|
||||
#define LST2_M_ArrayAnchorTo(n, TypeElement) \
|
||||
LST2_M_AnchorTo(n, TypeElement)
|
||||
|
||||
#define LST2_M_ArrayUseListOf(n, TypeElement) \
|
||||
LST2_M_ArrayAnchorTo(n, TypeElement) \
|
||||
{ \
|
||||
TypeElement hFirstElement##n; \
|
||||
long lNumberOfElements##n; \
|
||||
}
|
||||
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_ArrayParentDeclaration(n, TypeElement) \
|
||||
TypeElement hFirstElement##n; \
|
||||
long lNumberOfElements##n;
|
||||
|
||||
/*declaration, access and init macros for a Anchor*/
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_ArrayAnchorDeclaration(n, TypeElement) \
|
||||
LST2_M_ArrayAnchorTo(n, TypeElement)
|
||||
|
||||
#define LST2_M_ArrayGetFirstElement(n, hAnchor) \
|
||||
LST2_M_ArrayGetMember(n, (hAnchor), hFirstElement)
|
||||
|
||||
#define LST2_M_ArraySetFirstElement(n, hAnchor, value) \
|
||||
LST2_M_ArraySetMember(n, (hAnchor), hFirstElement, (value))
|
||||
|
||||
#define LST2_M_ArrayGetNumberOfElements(n, hAnchor) \
|
||||
LST2_M_ArrayGetMember(n, (hAnchor), lNumberOfElements)
|
||||
|
||||
#define LST2_M_ArraySetNumberOfElements(n, hAnchor, value) \
|
||||
LST2_M_ArraySetMember(n, (hAnchor), lNumberOfElements, (value))
|
||||
|
||||
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_ArrayElementDeclaration(n, TypeElement)
|
||||
#define LST2_M_ArrayChildDeclaration(n, TypeElement,TypeParent)
|
||||
|
||||
|
||||
#define LST2_M_ArrayGetNextElement(n, _hElement) \
|
||||
((_hElement)+1)
|
||||
|
||||
|
||||
#define LST2_M_ArrayGetNthBrother(n, hFirstElement, hElement, k, i) \
|
||||
{(hElement)=(hFirstElement)+(k); i=i;}
|
||||
|
||||
|
||||
|
||||
#define LST2_M_ArrayGetPrevElement(n, _hElement) \
|
||||
((_hElement)-1)
|
||||
|
||||
|
||||
#define LST2_M_ArrayForEachElementOf(n, _hAnchor, _hElement, _i) \
|
||||
for((_hElement)=LST2_M_ArrayGetFirstElement(n, (_hAnchor)),(_i)=0; \
|
||||
(_i)<LST2_M_ArrayGetNumberOfElements(n, (_hAnchor)); \
|
||||
(_i)++,(_hElement)=LST2_M_ArrayGetNextElement(n, _hElement))
|
||||
|
||||
#define LST2_M_ArrayGetElementNumber(n, _hAnchor, _hElement, _k, _i) \
|
||||
{(_hElement)=LST2_M_ArrayGetFirstElement(n, (_hAnchor))+(_k);(_i)=0;}
|
||||
|
||||
|
||||
/*ATTENTION The parameters are not the same than non optimized version !!!*/
|
||||
/*use the following one*/
|
||||
#define LST2_M_ArrayWhatElementNumber(n, _hElement0,_hAnchor, _i) \
|
||||
{_i=(_hElement0) - LST2_M_ArrayGetFirstElement(n, (_hAnchor));}
|
||||
|
||||
#define LST3_M_ArrayWhatElementNumber(n, _hElement0,_hAnchor, _hIterator, _i) \
|
||||
{ _i=(_hElement0) - LST2_M_ArrayGetFirstElement(n, (_hAnchor));_hIterator=0;}
|
||||
|
||||
/* CHRISTOPHE*/
|
||||
#define LST2_M_ArrayGetLastElement(n, hAnchor) \
|
||||
((LST2_M_ArrayGetFirstElement(n, hAnchor))+LST2_M_ArrayGetNumberOfElements(n, hAnchor)-1)
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/*debug version (with holes) -> with or without editor*/
|
||||
|
||||
/* handles are pointers*/
|
||||
#define LST2_C_DoubleLinkInvalid 0 /*NULL*/
|
||||
|
||||
#define LST2_M_DoubleLinkGetMember(n, handle, member) \
|
||||
((handle)->member##n)
|
||||
|
||||
#define LST2_M_DoubleLinkSetMember(n, handle, member, value) \
|
||||
{(handle)->member##n=(value);}
|
||||
|
||||
#define LST2_M_AnchorTo(n, TypeElement) struct LST2_tdstAnchorTo##TypeElement##n
|
||||
|
||||
#define LST2_M_DoubleLinkUseListOf(n, TypeElement) \
|
||||
LST2_M_AnchorTo(n, TypeElement) \
|
||||
{ \
|
||||
TypeElement hFirstElement##n; \
|
||||
TypeElement hLastElement##n; \
|
||||
long lNumberOfElements##n; \
|
||||
}
|
||||
|
||||
#define LST2_M_DoubleLinkParentDeclaration(n, TypeElement) \
|
||||
TypeElement hFirstElement##n; \
|
||||
TypeElement hLastElement##n; \
|
||||
long lNumberOfElements##n;
|
||||
|
||||
/*declaration, access and init macros for a Anchor*/
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_DoubleLinkAnchorDeclaration(n, TypeElement) \
|
||||
LST2_M_AnchorTo(n, TypeElement)
|
||||
|
||||
|
||||
#define LST2_M_DoubleLinkGetFirstElement(n, hAnchor) \
|
||||
LST2_M_DoubleLinkGetMember(n, hAnchor, hFirstElement)
|
||||
|
||||
#define LST2_M_DoubleLinkGetLastElement(n, hAnchor) \
|
||||
LST2_M_DoubleLinkGetMember(n, hAnchor, hLastElement)
|
||||
|
||||
#define LST2_M_DoubleLinkSetFirstElement(n, hAnchor, value) \
|
||||
LST2_M_DoubleLinkGetMember(n, hAnchor, hFirstElement) = (value)
|
||||
|
||||
#define LST2_M_DoubleLinkGetNumberOfElements(n, hAnchor) \
|
||||
LST2_M_DoubleLinkGetMember(n, hAnchor, lNumberOfElements)
|
||||
|
||||
#define LST2_M_DoubleLinkSetLastElement(n, hAnchor, value) \
|
||||
LST2_M_DoubleLinkGetMember(n, hAnchor, hLastElement) = (value)
|
||||
|
||||
|
||||
#define LST2_M_DoubleLinkInitAnchor(n, hAnchor) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetFirstElement(n, (hAnchor))= LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetLastElement(n, (hAnchor)) = LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetNumberOfElements(n, (hAnchor))= 0; \
|
||||
}
|
||||
|
||||
/*declaration, access and init macros for a Element*/
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_DoubleLinkElementDeclaration(n, TypeElement) \
|
||||
TypeElement hNextBrother##n; \
|
||||
TypeElement hPrevBrother##n; \
|
||||
LST2_M_AnchorTo(n, TypeElement)* hFather##n;
|
||||
|
||||
|
||||
#define LST2_M_DoubleLinkChildDeclaration(n, TypeElement, TypeFather) \
|
||||
TypeElement hNextBrother##n; \
|
||||
TypeElement hPrevBrother##n; \
|
||||
TypeFather hFather##n;
|
||||
|
||||
#define LST2_M_DoubleLinkGetNextElement(n, hElement) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hElement), hNextBrother)
|
||||
|
||||
#define LST2_M_DoubleLinkGetPrevElement(n, hElement) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hElement), hPrevBrother)
|
||||
|
||||
#define LST2_M_DoubleLinkGetFather(n, hSO) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hSO), hFather)
|
||||
|
||||
#define LST2_M_DoubleLinkSetNextElement(n, hElement, value) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hElement), hNextBrother) = (value)
|
||||
|
||||
#define LST2_M_DoubleLinkSetPrevElement(n, hElement, value) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hElement), hPrevBrother) = (value)
|
||||
|
||||
#define LST2_M_DoubleLinkSetFather(n, hSO, value) \
|
||||
LST2_M_DoubleLinkGetMember(n, (hSO), hFather) = (value)
|
||||
|
||||
|
||||
#define LST2_M_DoubleLinkInitElement(n, hElement) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetNextElement(n, (hElement))= LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, (hElement))= LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetFather(n, (hElement)) = LST2_C_DoubleLinkInvalid; \
|
||||
}
|
||||
|
||||
#define LST2_M_DoubleLinkIsolate(n, hElement) \
|
||||
{ \
|
||||
if(LST2_M_DoubleLinkGetNextElement(n, (hElement))!=LST2_C_DoubleLinkInvalid) \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, LST2_M_DoubleLinkGetNextElement(n, (hElement))) = LST2_M_DoubleLinkGetPrevElement(n, (hElement)); \
|
||||
if(LST2_M_DoubleLinkGetPrevElement(n, (hElement))!=LST2_C_DoubleLinkInvalid) \
|
||||
LST2_M_DoubleLinkGetNextElement(n, LST2_M_DoubleLinkGetPrevElement(n, (hElement))) = LST2_M_DoubleLinkGetNextElement(n, (hElement)); \
|
||||
if(LST2_M_DoubleLinkGetFather(n, (hElement))!=LST2_C_DoubleLinkInvalid) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetNumberOfElements(n, LST2_M_DoubleLinkGetFather(n, (hElement)))--; \
|
||||
if(LST2_M_DoubleLinkGetFirstElement(n, LST2_M_DoubleLinkGetFather(n, (hElement)))==(hElement)) \
|
||||
LST2_M_DoubleLinkGetFirstElement(n, LST2_M_DoubleLinkGetFather(n, (hElement))) = LST2_M_DoubleLinkGetNextElement(n, (hElement)); \
|
||||
if(LST2_M_DoubleLinkGetLastElement(n, LST2_M_DoubleLinkGetFather(n, (hElement)))==(hElement)) \
|
||||
LST2_M_DoubleLinkGetLastElement(n, LST2_M_DoubleLinkGetFather(n, (hElement))) = LST2_M_DoubleLinkGetPrevElement(n, (hElement)); \
|
||||
} \
|
||||
LST2_M_DoubleLinkInitElement(n, (hElement)); \
|
||||
}
|
||||
|
||||
#define LST2_M_DoubleLinkAddTail(n, hAnchor, hElement) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkIsolate(n, (hElement)); \
|
||||
LST2_M_DoubleLinkGetNextElement(n, (hElement)) = LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, (hElement)) = LST2_M_DoubleLinkGetLastElement(n, (hAnchor)); \
|
||||
LST2_M_DoubleLinkGetFather(n, (hElement)) = (hAnchor); \
|
||||
if (LST2_M_DoubleLinkGetFirstElement(n, (hAnchor))==LST2_C_DoubleLinkInvalid) \
|
||||
LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)) = (hElement); \
|
||||
else \
|
||||
LST2_M_DoubleLinkGetNextElement(n, LST2_M_DoubleLinkGetLastElement(n, (hAnchor))) = (hElement); \
|
||||
LST2_M_DoubleLinkGetLastElement(n, (hAnchor)) = (hElement); \
|
||||
LST2_M_DoubleLinkGetNumberOfElements(n, (hAnchor))++; \
|
||||
}
|
||||
|
||||
#define LST2_M_DoubleLinkAddHead(n, hAnchor,hElement) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkIsolate(n, (hElement)); \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, (hElement)) = LST2_C_DoubleLinkInvalid; \
|
||||
LST2_M_DoubleLinkGetNextElement(n, (hElement)) = LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)); \
|
||||
LST2_M_DoubleLinkGetFather(n, (hElement)) = (hAnchor); \
|
||||
if (LST2_M_DoubleLinkGetLastElement(n, (hAnchor))==LST2_C_DoubleLinkInvalid) \
|
||||
LST2_M_DoubleLinkGetLastElement(n, (hAnchor)) = (hElement); \
|
||||
else \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, LST2_M_DoubleLinkGetFirstElement(n, (hAnchor))) = (hElement); \
|
||||
LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)) = (hElement); \
|
||||
LST2_M_DoubleLinkGetNumberOfElements(n, (hAnchor))++; \
|
||||
}
|
||||
|
||||
#define LST2_M_DoubleLinkInsertBetween(n, hElement,hPrevElement,hNextElement) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkIsolate(n, (hElement)); \
|
||||
LST2_M_DoubleLinkGetNextElement(n, (hElement)) = (hNextElement); \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, (hElement)) = (hPrevElement); \
|
||||
if((hPrevElement)!=LST2_C_DoubleLinkInvalid) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetNextElement(n, (hPrevElement)) = (hElement); \
|
||||
LST2_M_DoubleLinkGetFather(n, (hElement)) = LST2_M_DoubleLinkGetFather(n, (hPrevElement)); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetFirstElement(n, LST2_M_DoubleLinkGetFather(n, (hNextElement))) = (hElement); \
|
||||
} \
|
||||
if((hNextElement)!=LST2_C_DoubleLinkInvalid) \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetPrevElement(n, (hNextElement)) = (hElement); \
|
||||
LST2_M_DoubleLinkGetFather(n, (hElement)) = LST2_M_DoubleLinkGetFather(n, (hNextElement)); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
LST2_M_DoubleLinkGetLastElement(n, LST2_M_DoubleLinkGetFather(n, (hPrevElement))) = (hElement); \
|
||||
} \
|
||||
LST2_M_DoubleLinkGetNumberOfElements(n, LST2_M_DoubleLinkGetFather(n, (hElement)))++; \
|
||||
}
|
||||
|
||||
/*to be changed ! the arguments are not the same in optimised mode !!!*/
|
||||
/*use the following one*/
|
||||
#define LST2_M_DoubleLinkWhatElementNumber(n, hElement0,hElement, i) \
|
||||
{for \
|
||||
( \
|
||||
i=-1,(hElement)=(hElement0); \
|
||||
(hElement)!=LST2_C_DoubleLinkInvalid; \
|
||||
i++,(hElement)=LST2_M_DoubleLinkGetPrevElement(n,(hElement)) \
|
||||
);}
|
||||
|
||||
#define LST3_M_DoubleLinkWhatElementNumber(n, hElement0,hAnchor, hElement, i) \
|
||||
{for \
|
||||
( \
|
||||
i=-1,(hElement)=(hElement0); \
|
||||
(hElement)!=LST2_C_DoubleLinkInvalid; \
|
||||
i++,(hElement)=LST2_M_DoubleLinkGetPrevElement(n,(hElement)) \
|
||||
);}
|
||||
|
||||
|
||||
#define LST2_M_DoubleLinkForEachElementOf(n, hAnchor, hElement, i) \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)); \
|
||||
(hElement)!=LST2_C_DoubleLinkInvalid; \
|
||||
(i)++,hElement=LST2_M_DoubleLinkGetNextElement(n, (hElement)) \
|
||||
)
|
||||
|
||||
#define LST2_M_DoubleLinkForEachMovingElementOf(n, hAnchor, hElement, hNextElement, i) \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)),(hNextElement)=(hElement)?LST2_M_DoubleLinkGetNextElement(n,(hElement)):LST2_C_DoubleLinkInvalid; \
|
||||
(hElement)!=LST2_C_DoubleLinkInvalid; \
|
||||
(i)++,(hElement)=(hNextElement),(hNextElement)=(hElement)?LST2_M_DoubleLinkGetNextElement(n, (hElement)):LST2_C_DoubleLinkInvalid \
|
||||
)
|
||||
|
||||
/*k number of the child to get, i index, hElement found element*/
|
||||
#define LST2_M_DoubleLinkGetElementNumber(n, hAnchor, hElement, k, i) \
|
||||
{ \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=LST2_M_DoubleLinkGetFirstElement(n, (hAnchor)); \
|
||||
(i)<(k); \
|
||||
(i)++,(hElement)=LST2_M_DoubleLinkGetNextElement(n, (hElement)) \
|
||||
); \
|
||||
}
|
||||
|
||||
|
||||
/*if k==1 => NextBrother*/
|
||||
#define LST2_M_DoubleLinkGetNthBrother(n, hFirstElement, hElement, k, i) \
|
||||
{ \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=hFirstElement; \
|
||||
(i)<(k); \
|
||||
(i)++,(hElement)=LST2_M_DoubleLinkGetNextElement(n, (hElement)) \
|
||||
); \
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------*/
|
||||
|
||||
/* Single Link List*/
|
||||
|
||||
/* handles are pointers*/
|
||||
#define LST2_C_SingleLinkInvalid 0 /*NULL*/
|
||||
|
||||
#define LST2_M_SingleLinkGetMember(n, handle, member) \
|
||||
((handle)->member##n)
|
||||
|
||||
#define LST2_M_SingleLinkSetMember(n, handle, member, value) \
|
||||
{(handle)->member##n=(value);}
|
||||
|
||||
#define LST2_M_AnchorTo(n, TypeElement) struct LST2_tdstAnchorTo##TypeElement##n
|
||||
|
||||
#define LST2_M_SingleLinkUseListOf(n, TypeElement) \
|
||||
LST2_M_AnchorTo(n, TypeElement) \
|
||||
{ \
|
||||
TypeElement hFirstElement##n; \
|
||||
TypeElement hLastElement##n; \
|
||||
long lNumberOfElements##n; \
|
||||
}
|
||||
|
||||
#define LST2_M_SingleLinkParentDeclaration(n, TypeElement) \
|
||||
TypeElement hFirstElement##n; \
|
||||
TypeElement hLastElement##n; \
|
||||
long lNumberOfElements##n;
|
||||
|
||||
/*declaration, access and init macros for a Anchor*/
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_SingleLinkAnchorDeclaration(n, TypeElement) \
|
||||
LST2_M_AnchorTo(n, TypeElement)
|
||||
|
||||
|
||||
#define LST2_M_SingleLinkGetFirstElement(n, hAnchor) \
|
||||
LST2_M_SingleLinkGetMember(n, hAnchor, hFirstElement)
|
||||
|
||||
#define LST2_M_SingleLinkGetLastElement(n, hAnchor) \
|
||||
LST2_M_SingleLinkGetMember(n, hAnchor, hLastElement)
|
||||
|
||||
#define LST2_M_SingleLinkGetNumberOfElements(n, hAnchor) \
|
||||
LST2_M_SingleLinkGetMember(n, hAnchor, lNumberOfElements)
|
||||
|
||||
#define LST2_M_SingleLinkInitAnchor(n, hAnchor) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetFirstElement(n, (hAnchor))= LST2_C_SingleLinkInvalid; \
|
||||
LST2_M_SingleLinkGetLastElement(n, (hAnchor)) = LST2_C_SingleLinkInvalid; \
|
||||
LST2_M_SingleLinkGetNumberOfElements(n, (hAnchor))= 0; \
|
||||
}
|
||||
|
||||
/*declaration, access and init macros for a Element*/
|
||||
/*do not add ";" at the end of this macro*/
|
||||
#define LST2_M_SingleLinkElementDeclaration(n, TypeElement) \
|
||||
TypeElement hNextBrother##n;
|
||||
|
||||
|
||||
#define LST2_M_SingleLinkChildDeclaration(n, TypeElement, TypeFather) \
|
||||
TypeElement hNextBrother##n;
|
||||
|
||||
#define LST2_M_SingleLinkGetNextElement(n, hElement) \
|
||||
LST2_M_SingleLinkGetMember(n, (hElement), hNextBrother)
|
||||
|
||||
#define LST2_M_SingleLinkInitElement(n, hElement) \
|
||||
LST2_M_SingleLinkGetNextElement(n, (hElement))= LST2_C_SingleLinkInvalid;
|
||||
|
||||
#define LST2_M_SingleLinkAddTail(n, hAnchor, hElement) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetNextElement(n, (hElement)) = LST2_C_SingleLinkInvalid; \
|
||||
if (LST2_M_SingleLinkGetFirstElement(n, (hAnchor))==LST2_C_SingleLinkInvalid) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetFirstElement(n, (hAnchor)) = (hElement); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetNextElement(n, LST2_M_SingleLinkGetLastElement(n, (hAnchor))) = (hElement); \
|
||||
} \
|
||||
LST2_M_SingleLinkGetLastElement(n, (hAnchor)) = (hElement); \
|
||||
LST2_M_SingleLinkGetNumberOfElements(n, (hAnchor))++; \
|
||||
}
|
||||
|
||||
#define LST2_M_SingleLinkAddHead(n, hAnchor,hElement) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetNextElement(n, (hElement)) = LST2_M_SingleLinkGetFirstElement(n, (hAnchor)); \
|
||||
if (LST2_M_SingleLinkGetFirstElement(n, (hAnchor))==LST2_C_SingleLinkInvalid) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetLastElement(n, (hAnchor)) = (hElement); \
|
||||
} \
|
||||
LST2_M_SingleLinkGetFirstElement(n, (hAnchor)) = (hElement); \
|
||||
LST2_M_SingleLinkGetNumberOfElements(n, (hAnchor))++; \
|
||||
}
|
||||
|
||||
#define LST3_M_SingleLinkWhatElementNumber(n, hElement0,hAnchor, hElement, i) \
|
||||
{for \
|
||||
( \
|
||||
(hElement)=LST2_M_SingleLinkGetFirstElement(n, (hAnchor)),(i)=0; \
|
||||
(hElement)!=(hElement0) && hElement!=LST2_C_SingleLinkInvalid; \
|
||||
(i)++,(hElement)=LST2_M_SingleLinkGetNextElement(n,(hElement)) \
|
||||
);}
|
||||
|
||||
#define LST3_M_SingleLinkInsertBetween(n, hAnchor, hElement,hPrevElement,hNextElement) \
|
||||
{ \
|
||||
LST2_M_SingleLinkGetNextElement(n, (hElement)) = (hNextElement); \
|
||||
if ((hNextElement)==LST2_C_SingleLinkInvalid) \
|
||||
LST2_M_SingleLinkGetLastElement(n, (hAnchor)) = (hElement); \
|
||||
if ((hPrevElement)==LST2_C_SingleLinkInvalid) \
|
||||
LST2_M_SingleLinkGetFirstElement(n, (hAnchor)) = (hElement); \
|
||||
else \
|
||||
LST2_M_SingleLinkGetNextElement(n, (hPrevElement)) = (hElement); \
|
||||
LST2_M_SingleLinkGetNumberOfElements(n, (hAnchor))++; \
|
||||
}
|
||||
|
||||
#define LST2_M_SingleLinkForEachElementOf(n, hAnchor, hElement, i) \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=LST2_M_SingleLinkGetFirstElement(n, (hAnchor)); \
|
||||
(hElement)!=LST2_C_SingleLinkInvalid; \
|
||||
(i)++,hElement=LST2_M_SingleLinkGetNextElement(n, (hElement)) \
|
||||
)
|
||||
|
||||
/*k number of the child to get, i index, hElement found element*/
|
||||
#define LST2_M_SingleLinkGetElementNumber(n, hAnchor, hElement, k, i) \
|
||||
{ \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=LST2_M_SingleLinkGetFirstElement(n, (hAnchor)); \
|
||||
(i)<(k); \
|
||||
(i)++,(hElement)=LST2_M_SingleLinkGetNextElement(n, (hElement)) \
|
||||
); \
|
||||
}
|
||||
|
||||
|
||||
/*if k==1 => NextBrother*/
|
||||
#define LST2_M_SingleLinkGetNthBrother(n, hFirstElement, hElement, k, i) \
|
||||
{ \
|
||||
for \
|
||||
( \
|
||||
(i)=0,(hElement)=hFirstElement; \
|
||||
(i)<(k); \
|
||||
(i)++,(hElement)=LST2_M_SingleLinkGetNextElement(n, (hElement)) \
|
||||
); \
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------*/
|
||||
|
||||
#endif /* __LSTDEF2_H__*/
|
||||
|
256
Rayman_X/cpa/public/LST/LstEdLst.hpp
Normal file
256
Rayman_X/cpa/public/LST/LstEdLst.hpp
Normal file
@@ -0,0 +1,256 @@
|
||||
/*(c) Ubi Studios 1996*/
|
||||
/* See Vincent Greco for any comment or question*/
|
||||
|
||||
#ifndef __LSTEDLST_HPP__
|
||||
#define __LSTEDLST_HPP__
|
||||
|
||||
#include "LstEdMot.Hpp"
|
||||
/*#include "ErrHie.h"*/
|
||||
|
||||
|
||||
|
||||
#define TemplateParam \
|
||||
template<class EditorClass, class tdxHandleToStruct, class tdxPointerToAnchorStruct>
|
||||
|
||||
|
||||
#define ElementClass \
|
||||
CPA_EdElement<EditorClass, tdxHandleToStruct, tdxPointerToAnchorStruct>
|
||||
|
||||
#define ListClass \
|
||||
CPA_EdList<EditorClass,tdxHandleToStruct,tdxPointerToAnchorStruct>
|
||||
|
||||
#define ListBaseClass \
|
||||
CPA_List<ElementClass >
|
||||
/*Be careful the space character must not be removed (class<class<param> > is OK, class<class<param>> is Wrong) */
|
||||
|
||||
|
||||
|
||||
/****************************************/
|
||||
/*assumes that tdxHandleToStruct has a tdxPointerToAnchorStruct * pAnchor member*/
|
||||
/*assumes that tdxHandleToStruct has a tdxHandleToStruct * hNextBrother member*/
|
||||
/*assumes that tdxHandleToStruct has a tdxHandleToStruct * hPrevBrother member*/
|
||||
|
||||
|
||||
|
||||
TemplateParam class CPA_EdList;
|
||||
|
||||
|
||||
TemplateParam
|
||||
class CPA_EdElement : virtual public CPA_EdMot<tdxHandleToStruct>
|
||||
{
|
||||
private:
|
||||
ListClass * m_pList;
|
||||
|
||||
public:
|
||||
CPA_EdElement(void){m_pList=NULL;}/*use SetList(NULL) ???*/
|
||||
virtual ~CPA_EdElement(void){}
|
||||
|
||||
public:
|
||||
/*accessors to private member*/
|
||||
ListClass *GetList(void){return m_pList;}
|
||||
void SetList(ListClass * _pList, BOOL ModifyEngine=TRUE)
|
||||
{
|
||||
m_pList=_pList;
|
||||
if(ModifyEngine)
|
||||
{
|
||||
if(_pList)
|
||||
{
|
||||
LST2_M_StaticGetFather(GetStruct())=_pList->GetEngineAnchor();
|
||||
}
|
||||
else
|
||||
{
|
||||
LST2_M_StaticGetFather(GetStruct())=NULL;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
tdxHandleToStruct GetPrevStruct(void);
|
||||
tdxHandleToStruct GetNextStruct(void);
|
||||
void Isolate(BOOL ModifyEngine=TRUE);
|
||||
/* void InsertBetween(tdxHandleToStruct pPrev, tdxHandleToStruct pNext);*/
|
||||
|
||||
};
|
||||
|
||||
|
||||
TemplateParam
|
||||
class CPA_EdList : public ListBaseClass
|
||||
{
|
||||
private:
|
||||
tdxPointerToAnchorStruct m_pAnchor;
|
||||
|
||||
public:
|
||||
CPA_EdList() {}
|
||||
virtual ~CPA_EdList(void){}
|
||||
|
||||
public:
|
||||
/*accessors to private member*/
|
||||
tdxPointerToAnchorStruct GetEngineAnchor() {return m_pAnchor;}
|
||||
void SetEngineAnchor(tdxPointerToAnchorStruct _pAnchor){m_pAnchor=_pAnchor;}
|
||||
|
||||
public:
|
||||
/*redefined functions*/
|
||||
POSITION InsertAfter(POSITION position, ElementClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION InsertBefore(POSITION position, ElementClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION AddHead(ElementClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION AddTail(ElementClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
void RemoveAt(POSITION position, BOOL ModifyEngine=TRUE);
|
||||
EditorClass* RemoveHead(BOOL ModifyEngine=TRUE);
|
||||
EditorClass* RemoveTail(BOOL ModifyEngine=TRUE);
|
||||
void RemoveAll(BOOL ModifyEngine=TRUE);
|
||||
|
||||
/*simple type conversions*/
|
||||
EditorClass* GetAt(POSITION position) {return (EditorClass*)ListBaseClass::GetAt(position);}
|
||||
EditorClass* GetNext(POSITION& position) {return (EditorClass*)ListBaseClass::GetNext(position);}
|
||||
EditorClass* GetPrev(POSITION& position) {return (EditorClass*)ListBaseClass::GetPrev(position);}
|
||||
EditorClass* GetHead() {return (EditorClass*)ListBaseClass::GetHead();}
|
||||
EditorClass* GetTail() {return (EditorClass*)ListBaseClass::GetTail();}
|
||||
|
||||
EditorClass* GetHeadElement(POSITION& rPosition) const {return (EditorClass*)ListBaseClass::GetHeadElement(rPosition);}
|
||||
EditorClass* GetTailElement(POSITION& rPosition) const {return (EditorClass*)ListBaseClass::GetTailElement(rPosition);}
|
||||
EditorClass* GetNextElement(POSITION& rPosition) const {return (EditorClass*)ListBaseClass::GetNextElement(rPosition);}
|
||||
EditorClass* GetPrevElement(POSITION& rPosition) const {return (EditorClass*)ListBaseClass::GetPrevElement(rPosition);}
|
||||
|
||||
EditorClass* GetHeadElement(void) const {return (EditorClass*)ListBaseClass::GetHeadElement();}
|
||||
EditorClass* GetTailElement(void) const {return (EditorClass*)ListBaseClass::GetTailElement();}
|
||||
EditorClass* GetNextElement(ElementClass * pElement) const {return (EditorClass*)ListBaseClass::GetNextElement(pElement);}
|
||||
EditorClass* GetPrevElement(ElementClass * pElement) const {return (EditorClass*)ListBaseClass::GetPrevElement(pElement);}
|
||||
};
|
||||
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
|
||||
|
||||
TemplateParam tdxHandleToStruct ElementClass::GetPrevStruct(void)
|
||||
{
|
||||
tdxHandleToStruct hStruct= GetStruct();
|
||||
return LST2_M_StaticGetPrevElement(hStruct);
|
||||
}
|
||||
|
||||
TemplateParam tdxHandleToStruct ElementClass::GetNextStruct(void)
|
||||
{
|
||||
tdxHandleToStruct hStruct= GetStruct();
|
||||
return LST2_M_StaticGetNextElement(hStruct);
|
||||
}
|
||||
|
||||
TemplateParam void ElementClass::Isolate(BOOL ModifyEngine)/*can be called as many times as you want.*/
|
||||
{
|
||||
if(GetList())
|
||||
{
|
||||
POSITION P=GetList()->Find(this);
|
||||
GetList()->RemoveAt(P, ModifyEngine);
|
||||
/* SetList(NULL);//modifyEngine ???*/
|
||||
SetList(NULL,ModifyEngine);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-----------------------------------------*/
|
||||
|
||||
|
||||
TemplateParam POSITION ListClass::InsertAfter(POSITION position, ElementClass* newElement, BOOL ModifyEngine)
|
||||
{
|
||||
if(!position) return AddHead(newElement, ModifyEngine);
|
||||
ElementClass* pPrevObj=GetAt(position);/*can't be NULL*/
|
||||
newElement->Isolate(ModifyEngine);
|
||||
if(ModifyEngine)
|
||||
{
|
||||
tdxHandleToStruct pPrev=pPrevObj->GetStruct();
|
||||
tdxHandleToStruct pNext=pPrevObj->GetNextStruct();
|
||||
LST2_M_StaticInsertBetween(newElement->GetStruct(),pPrev,pNext);
|
||||
}
|
||||
newElement->SetList(this, ModifyEngine);
|
||||
return ListBaseClass::InsertAfter(position, newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam POSITION ListClass::InsertBefore(POSITION position, ElementClass* newElement, BOOL ModifyEngine)
|
||||
{
|
||||
if(!position) return AddTail(newElement, ModifyEngine);
|
||||
ElementClass* pNextObj=GetAt(position);/*can't be NULL*/
|
||||
newElement->Isolate(ModifyEngine);
|
||||
if(ModifyEngine)
|
||||
{
|
||||
tdxHandleToStruct pNext=pNextObj->GetStruct();
|
||||
tdxHandleToStruct pPrev=pNextObj->GetPrevStruct();
|
||||
LST2_M_StaticInsertBetween(newElement->GetStruct(),pPrev,pNext);
|
||||
}
|
||||
newElement->SetList(this, ModifyEngine);
|
||||
return ListBaseClass::InsertBefore(position, newElement);
|
||||
}
|
||||
|
||||
TemplateParam POSITION ListClass::AddHead(ElementClass* newElement, BOOL ModifyEngine )
|
||||
{
|
||||
newElement->Isolate(ModifyEngine);
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticAddHead(GetEngineAnchor(),newElement->GetStruct());
|
||||
}
|
||||
newElement->SetList(this, ModifyEngine);
|
||||
return ListBaseClass::AddHead(newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam POSITION ListClass::AddTail(ElementClass* newElement, BOOL ModifyEngine )
|
||||
{
|
||||
newElement->Isolate(ModifyEngine);
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticAddTail(GetEngineAnchor(),newElement->GetStruct());
|
||||
}
|
||||
newElement->SetList(this, ModifyEngine);
|
||||
return ListBaseClass::AddTail(newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam void ListClass::RemoveAt(POSITION position, BOOL ModifyEngine)
|
||||
{
|
||||
ElementClass *pOldObj = GetAt(position);
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticIsolate(pOldObj->GetStruct());
|
||||
}
|
||||
pOldObj->SetList(NULL, ModifyEngine);
|
||||
/* pOldObj->SetAnchor(NULL, ModifyEngine);*/
|
||||
ListBaseClass::RemoveAt(position);
|
||||
}
|
||||
|
||||
TemplateParam EditorClass* ListClass::RemoveHead(BOOL ModifyEngine)
|
||||
{
|
||||
ElementClass *pOldObj = ListBaseClass::RemoveHead();
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticIsolate(pOldObj->GetStruct());
|
||||
}
|
||||
pOldObj->SetList(NULL, ModifyEngine);
|
||||
/*pOldObj->SetAnchor(NULL, ModifyEngine);*/
|
||||
return (EditorClass*)pOldObj;
|
||||
}
|
||||
|
||||
|
||||
TemplateParam EditorClass* ListClass::RemoveTail(BOOL ModifyEngine)
|
||||
{
|
||||
ElementClass *pOldObj = ListBaseClass::RemoveTail();
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticIsolate(pOldObj->GetStruct());
|
||||
}
|
||||
pOldObj->SetList(NULL, ModifyEngine);
|
||||
return (EditorClass*)pOldObj;
|
||||
}
|
||||
|
||||
TemplateParam void ListClass::RemoveAll(BOOL ModifyEngine)/*not tested !!!*/
|
||||
{
|
||||
if(ModifyEngine)
|
||||
{
|
||||
LST2_M_StaticInitAnchor(GetEngineAnchor());
|
||||
}
|
||||
ListBaseClass::RemoveAll();
|
||||
}
|
||||
|
||||
/*-----------------------------------------*/
|
||||
|
||||
|
||||
|
||||
#endif /*__LSTEDLST_HPP__*/
|
69
Rayman_X/cpa/public/LST/LstEdMot.hpp
Normal file
69
Rayman_X/cpa/public/LST/LstEdMot.hpp
Normal file
@@ -0,0 +1,69 @@
|
||||
/* (c) Ubi Studios 1996*/
|
||||
/* See Vincent Greco for any comment or question*/
|
||||
|
||||
#ifndef __LSTEDMOT_HPP__
|
||||
#define __LSTEDMOT_HPP__
|
||||
|
||||
#include "LstDef2.h"
|
||||
#include "CpaList.Hpp"
|
||||
/*#include "ErrHie.h"*/
|
||||
|
||||
/*YOU MUST DEFINE Mod BEFORE INCLUDING THIS FILE*/
|
||||
/* Example "#define Mod Hie" for hierarchy*/
|
||||
|
||||
/****************************************/
|
||||
#ifndef 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
|
||||
#endif
|
||||
/****************************************/
|
||||
|
||||
|
||||
template<class tdxHandleToStruct>
|
||||
class CPA_EdMot
|
||||
{
|
||||
private:
|
||||
tdxHandleToStruct pStruct;
|
||||
/* void NewStruct(void);*/
|
||||
static tdxHandleToStruct (*m_p_fn_hCreate)(void);
|
||||
static void (*m_p_fn_hCopy)(tdxHandleToStruct,tdxHandleToStruct);
|
||||
static void (*m_p_fn_vDestroy)(tdxHandleToStruct);
|
||||
protected:
|
||||
virtual void SetStruct(tdxHandleToStruct pNewStruct){pStruct=pNewStruct;}
|
||||
public:
|
||||
static void Init(tdxHandleToStruct (*_p_fn_hCreate)(void),void (*_p_fn_hCopy)(tdxHandleToStruct,tdxHandleToStruct),void (*_p_fn_vDestroy)(tdxHandleToStruct))
|
||||
{
|
||||
m_p_fn_hCreate=_p_fn_hCreate;
|
||||
m_p_fn_hCopy=_p_fn_hCopy;
|
||||
m_p_fn_vDestroy=_p_fn_vDestroy;
|
||||
}
|
||||
/* IMPORTANT :*/
|
||||
/* even if SetStruct() is virtual*/
|
||||
/* the the SetStruct() called by the constructors of CPA_EdMot*/
|
||||
/* is the one of CPA_EdMot itself,*/
|
||||
/* so if you overload SetStruct(),*/
|
||||
/* overload also the constructors*/
|
||||
CPA_EdMot(void) {SetStruct((*m_p_fn_hCreate)());}
|
||||
CPA_EdMot(long _lValue) {SetStruct((tdxHandleToStruct)_lValue);}
|
||||
CPA_EdMot(tdxHandleToStruct _hValue) {SetStruct(_hValue);}
|
||||
CPA_EdMot(const CPA_EdMot& C) {SetStruct((*m_p_fn_hCreate)()); (*m_p_fn_hCopy)(pStruct, C.pStruct);}
|
||||
CPA_EdMot& operator=(const CPA_EdMot& C) {(*m_p_fn_hCopy)(pStruct, C.pStruct); return *this;}
|
||||
virtual ~CPA_EdMot(void) {(*m_p_fn_vDestroy)(pStruct);}
|
||||
|
||||
public:
|
||||
tdxHandleToStruct GetStruct(void) const {return pStruct;}
|
||||
};
|
||||
|
||||
#define DeclareTemplateStatic(tdxHandleToStruct) \
|
||||
tdxHandleToStruct (*CPA_EdMot<tdxHandleToStruct>::m_p_fn_hCreate)(void); \
|
||||
void (*CPA_EdMot<tdxHandleToStruct>::m_p_fn_hCopy)(tdxHandleToStruct,tdxHandleToStruct); \
|
||||
void (*CPA_EdMot<tdxHandleToStruct>::m_p_fn_vDestroy)(tdxHandleToStruct);
|
||||
|
||||
|
||||
|
||||
#endif /*__LSTEDMOT_HPP__*/
|
185
Rayman_X/cpa/public/LST/LstEdPar.hpp
Normal file
185
Rayman_X/cpa/public/LST/LstEdPar.hpp
Normal file
@@ -0,0 +1,185 @@
|
||||
/* (c) Ubi Studios 1996*/
|
||||
/* See Vincent Greco for any comment or question*/
|
||||
|
||||
#ifndef __LSTEDPAR_HPP__
|
||||
#define __LSTEDPAR_HPP__
|
||||
|
||||
#include "LstEdLst.Hpp"
|
||||
|
||||
|
||||
#define ChildClass \
|
||||
CPA_EdChild<EditorClass, tdxHandleToStruct, tdxPointerToAnchorStruct>
|
||||
|
||||
#define ParentClass \
|
||||
CPA_EdParent<EditorClass,tdxHandleToStruct,tdxPointerToAnchorStruct>
|
||||
|
||||
TemplateParam class CPA_EdParent;
|
||||
|
||||
TemplateParam
|
||||
class CPA_EdChild : public ElementClass
|
||||
{
|
||||
private:
|
||||
/* ParentClass * pParent;*/
|
||||
public:
|
||||
CPA_EdChild(void)
|
||||
{
|
||||
/* pParent=NULL;*/
|
||||
}
|
||||
virtual ~CPA_EdChild(void){}
|
||||
|
||||
public:
|
||||
ParentClass * GetParent() {return (ParentClass *)GetList();}
|
||||
/* void SetParent(ParentClass * _pParent, BOOL ModifyEngine=TRUE);*/
|
||||
/* void Isolate(BOOL ModifyEngine=TRUE);*/
|
||||
|
||||
};
|
||||
|
||||
TemplateParam
|
||||
class CPA_EdParent : virtual public CPA_EdMot<tdxPointerToAnchorStruct>, public ListClass
|
||||
{
|
||||
private:
|
||||
/* CPA_EdList<EditorClass, tdxHandleToStruct, tdxPointerToAnchorStruct> m_List;*/
|
||||
public:
|
||||
void SetStruct(tdxPointerToAnchorStruct pNewStruct)
|
||||
{
|
||||
CPA_EdMot<tdxPointerToAnchorStruct>::SetStruct(pNewStruct);
|
||||
SetEngineAnchor(pNewStruct);
|
||||
}
|
||||
|
||||
public:
|
||||
CPA_EdParent(void) {SetEngineAnchor(GetStruct());}/*m_List.SetOwner(this);/*LST_M_InitParent(GetStruct()); }*/
|
||||
virtual ~CPA_EdParent(void){}
|
||||
|
||||
/* CPA_EdList<EditorClass, tdxHandleToStruct, tdxPointerToAnchorStruct> *GetList(){return &m_List;}*/
|
||||
|
||||
/*
|
||||
POSITION InsertAfter( POSITION position, ChildClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION InsertBefore( POSITION position, ChildClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION AddHead(ChildClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
POSITION AddTail(ChildClass* newElement, BOOL ModifyEngine=TRUE);
|
||||
void RemoveAt(POSITION position, BOOL ModifyEngine=TRUE);
|
||||
EditorClass* RemoveHead(BOOL ModifyEngine=TRUE);
|
||||
EditorClass* RemoveTail(BOOL ModifyEngine=TRUE);
|
||||
void RemoveAll(BOOL ModifyEngine=TRUE);
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
/*both Parent and Child (homogenous tree)*/
|
||||
|
||||
TemplateParam
|
||||
class CPA_EdNode : public ElementClass, public ListClass
|
||||
{
|
||||
private:
|
||||
/* CPA_EdList<EditorClass, tdxHandleToStruct, tdxPointerToAnchorStruct> m_List;*/
|
||||
public:
|
||||
void SetStruct(tdxPointerToAnchorStruct pNewStruct)
|
||||
{
|
||||
CPA_EdMot<tdxPointerToAnchorStruct>::SetStruct(pNewStruct);
|
||||
SetEngineAnchor(pNewStruct);
|
||||
}
|
||||
EditorClass * GetParent() {return (EditorClass *)GetList();}
|
||||
|
||||
public:
|
||||
CPA_EdNode(void) {SetEngineAnchor(GetStruct());}
|
||||
virtual ~CPA_EdNode(void){}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//redondance avec SetList de ElementClass ?
|
||||
TemplateParam void ChildClass::SetParent(ParentClass * _pParent, BOOL ModifyEngine)
|
||||
{
|
||||
pParent=_pParent;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
TemplateParam void ChildClass::Isolate(BOOL ModifyEngine)//can be called as many times as you want.
|
||||
{
|
||||
if(pParent)
|
||||
{
|
||||
POSITION P=pParent->GetList()->Find(this);
|
||||
pParent->GetList()->RemoveAt(P, ModifyEngine);
|
||||
// pParent=NULL;//???
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TemplateParam void ChildClass::InsertBetween(tdxHandleToStruct pPrev, tdxHandleToStruct pNext)
|
||||
{
|
||||
if(pParent)
|
||||
{
|
||||
POSITION P=pParent->GetList()->Find(this);
|
||||
pParent->GetList()->RemoveAt(P);
|
||||
// pParent=NULL; InsertBetween is always followed by a SetParent
|
||||
}
|
||||
LST_M_StaticInsertBetween(GetStruct(),pPrev,pNext);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------
|
||||
|
||||
|
||||
TemplateParam POSITION ParentClass::InsertAfter(POSITION position, ChildClass* newElement, BOOL ModifyEngine)
|
||||
{
|
||||
// newElement->SetParent(this, ModifyEngine);
|
||||
return ListClass::InsertAfter(position, newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam POSITION ParentClass::InsertBefore(POSITION position, ChildClass* newElement, BOOL ModifyEngine)
|
||||
{
|
||||
// newElement->SetParent(this, ModifyEngine);
|
||||
return ListClass::InsertBefore(position, newElement);
|
||||
}
|
||||
|
||||
TemplateParam POSITION ParentClass:: AddHead(ChildClass* newElement, BOOL ModifyEngine )
|
||||
{
|
||||
// newElement->SetParent(this, ModifyEngine);
|
||||
return ListClass::AddHead(newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam POSITION ParentClass::AddTail(ChildClass* newElement, BOOL ModifyEngine )
|
||||
{
|
||||
// newElement->SetParent(this, ModifyEngine);
|
||||
return ListClass::AddTail(newElement);
|
||||
}
|
||||
|
||||
|
||||
TemplateParam void ParentClass::RemoveAt(POSITION position, BOOL ModifyEngine)
|
||||
{
|
||||
// GetAt(position)->SetParent(NULL, ModifyEngine);
|
||||
ListClass::RemoveAt(position);
|
||||
}
|
||||
|
||||
TemplateParam EditorClass* ParentClass::RemoveHead(BOOL ModifyEngine)
|
||||
{
|
||||
ChildClass *pOldObj = ListClass::RemoveHead();
|
||||
// pOldObj->SetParent(NULL, ModifyEngine);
|
||||
return (EditorClass*)pOldObj;
|
||||
}
|
||||
|
||||
|
||||
TemplateParam EditorClass* ParentClass::RemoveTail(BOOL ModifyEngine)
|
||||
{
|
||||
ChildClass *pOldObj = ListClass::RemoveTail();
|
||||
// pOldObj->SetParent(NULL, ModifyEngine);
|
||||
return (EditorClass*)pOldObj;
|
||||
}
|
||||
|
||||
TemplateParam void ParentClass::RemoveAll(BOOL ModifyEngine)//not tested !!!
|
||||
{
|
||||
ListClass::RemoveAll();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
#endif /*__LSTEDPAR_HPP__*/
|
Reference in New Issue
Block a user