commit 2025-09-12 11:19 edit a bit ZCppMain/ZtCSimList.H
This commit is contained in:
@ -347,6 +347,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
|
if(this == &AO_CObjList ) return;
|
||||||
if(AO_CObjList.ml_Size<1) return;
|
if(AO_CObjList.ml_Size<1) return;
|
||||||
|
|
||||||
AO_CObjList.OnDelete ////////////////////////
|
AO_CObjList.OnDelete ////////////////////////
|
||||||
@ -408,9 +409,12 @@ namespace ZNsMain
|
|||||||
mp_HeadLink=0;
|
mp_HeadLink=0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ZCLink::MakeCircle( mp_HeadLink=mp_HeadLink->mp_NextLink,
|
ZCLink::MakeCircle //////////////////////////
|
||||||
|
(
|
||||||
|
mp_HeadLink=mp_HeadLink->mp_NextLink,
|
||||||
AP_CutLink->mp_PrevLink
|
AP_CutLink->mp_PrevLink
|
||||||
/*/////////////*/ );
|
);
|
||||||
|
/////////////////////////////////////////////
|
||||||
}/*
|
}/*
|
||||||
else*/
|
else*/
|
||||||
}
|
}
|
||||||
@ -463,7 +467,6 @@ namespace ZNsMain
|
|||||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
||||||
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
||||||
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
if(AL_CutHeadPos>AL_CutTailPos)
|
if(AL_CutHeadPos>AL_CutTailPos)
|
||||||
@ -1260,7 +1263,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZtCObjList& JoinHead(ZtCObjList& rhs)
|
ZtCObjList& JoinHead(ZtCObjList& rhs)
|
||||||
{
|
{
|
||||||
JoinAfter(rhs, 0, 0); return *this;
|
if(this==&rhs) return *this; JoinAfter(rhs, 0, 0); return *this;
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
|
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
|
||||||
|
|
||||||
@ -1269,6 +1272,8 @@ namespace ZNsMain
|
|||||||
// rhs 의 AP_CLink 를 앞으로 연결한다.
|
// rhs 의 AP_CLink 를 앞으로 연결한다.
|
||||||
// 일단 뒤로 연결한 다음 mp_HeadLink 을 뒤로 움직인다.
|
// 일단 뒤로 연결한 다음 mp_HeadLink 을 뒤로 움직인다.
|
||||||
|
|
||||||
|
if(this==&rhs) return *this;
|
||||||
|
|
||||||
JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size);
|
JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size);
|
||||||
|
|
||||||
mp_HeadLink=mp_HeadLink->GetPrevPtr(); return *this;
|
mp_HeadLink=mp_HeadLink->GetPrevPtr(); return *this;
|
||||||
@ -1277,7 +1282,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZtCObjList& JoinTail(ZtCObjList& rhs)
|
ZtCObjList& JoinTail(ZtCObjList& rhs)
|
||||||
{
|
{
|
||||||
JoinAfter(rhs, GetTailLinkPtr(), ml_Size); return *this;
|
if(this==&rhs) return *this; JoinAfter(rhs, GetTailLinkPtr(), ml_Size); return *this;
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
|
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
|
||||||
|
|
||||||
@ -1285,7 +1290,15 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
// rhs 의 AP_CLink 를 뒤로 연결한다.
|
// rhs 의 AP_CLink 를 뒤로 연결한다.
|
||||||
|
|
||||||
JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size); return *this;
|
if(this==&rhs) return *this;
|
||||||
|
|
||||||
|
JoinAfter ////////////////////////////////
|
||||||
|
(
|
||||||
|
rhs.CutLink(AP_CLink) ,
|
||||||
|
GetTailLinkPtr() ,
|
||||||
|
ml_Size
|
||||||
|
);
|
||||||
|
return *this; ////////////////////////////
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
||||||
|
|
||||||
@ -1300,6 +1313,8 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AP_LinkStd 앞에 붙인다.
|
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AP_LinkStd 앞에 붙인다.
|
||||||
|
|
||||||
|
if(this==&rhs) return *this;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
if(rhs.Find(AP_LinkOfRhs)!=AL_AddPosOfRhs || (AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) )
|
if(rhs.Find(AP_LinkOfRhs)!=AL_AddPosOfRhs || (AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) )
|
||||||
@ -1347,6 +1362,7 @@ namespace ZNsMain
|
|||||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
||||||
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
||||||
|
|
||||||
|
if(this==&ARR_StoreList) return *this;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
@ -1588,11 +1604,13 @@ namespace ZNsMain
|
|||||||
|
|
||||||
__for0(TypeSize, i, ml_Size)
|
__for0(TypeSize, i, ml_Size)
|
||||||
{
|
{
|
||||||
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
|
ZtCTypeData<TFunctor>::
|
||||||
|
GetObjRef(AO_Functor)( VP_LoopLink->mo_Data );
|
||||||
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator()
|
|
||||||
연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */
|
|
||||||
|
|
||||||
|
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라,
|
||||||
|
operator() 연산자를 가진 object 포인터일 때도 사용할 수
|
||||||
|
있게 되었다.
|
||||||
|
*/
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
__for0(TypeSize, i, ml_Size)*/
|
__for0(TypeSize, i, ml_Size)*/
|
||||||
|
@ -940,11 +940,6 @@ namespace ZNsMain
|
|||||||
// ZCLink* AP_PrevLink : 삭제하려는 링크의 이전 링크
|
// ZCLink* AP_PrevLink : 삭제하려는 링크의 이전 링크
|
||||||
// ZCLink* AP_CutLink : 삭제하려는 링크
|
// ZCLink* AP_CutLink : 삭제하려는 링크
|
||||||
|
|
||||||
// 삭제하려는 링크의 위치값을 알 수 없으므로
|
|
||||||
// 모든 링크를 삭제한다는 신호를 보낸다.
|
|
||||||
|
|
||||||
OnDelete(mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size);
|
|
||||||
|
|
||||||
if(AP_CutLink==mp_HeadLink)
|
if(AP_CutLink==mp_HeadLink)
|
||||||
{
|
{
|
||||||
if(mp_HeadLink==mp_TailLink)
|
if(mp_HeadLink==mp_TailLink)
|
||||||
@ -975,8 +970,6 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
||||||
{
|
{
|
||||||
OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos);
|
|
||||||
|
|
||||||
if(AP_CutLink==mp_HeadLink)
|
if(AP_CutLink==mp_HeadLink)
|
||||||
{
|
{
|
||||||
if(mp_HeadLink==mp_TailLink)
|
if(mp_HeadLink==mp_TailLink)
|
||||||
@ -1018,8 +1011,6 @@ namespace ZNsMain
|
|||||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
||||||
// AP_CutTail 의 이전 링크도 대입받아야 짝아 맞을 것 같지만 안그래도 된다.
|
// AP_CutTail 의 이전 링크도 대입받아야 짝아 맞을 것 같지만 안그래도 된다.
|
||||||
|
|
||||||
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
|
|
||||||
|
|
||||||
if(AP_CutHead==mp_HeadLink)
|
if(AP_CutHead==mp_HeadLink)
|
||||||
{
|
{
|
||||||
if(AP_CutTail==mp_TailLink)
|
if(AP_CutTail==mp_TailLink)
|
||||||
@ -1097,39 +1088,11 @@ namespace ZNsMain
|
|||||||
ARR_StoreList.ml_Size = AL_DefaultSize ;
|
ARR_StoreList.ml_Size = AL_DefaultSize ;
|
||||||
|
|
||||||
return ARR_StoreList;
|
return ARR_StoreList;
|
||||||
}
|
}/*
|
||||||
//ZtCSimList& MakeDefault(TTypSize AL_DefaultSize, ZtCSimList& ARR_StoreList) const
|
ZtCSimList& MakeDefault(TTypSize AL_DefaultSize, ZtCSimList& ARR_StoreList) const
|
||||||
|
|
||||||
|
|
||||||
virtual void OnDelete( ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,
|
protected: */
|
||||||
ZCLink* AP_CutTail, TTypSize AL_CutTailPos
|
|
||||||
/*////////////////*/ )
|
|
||||||
{
|
|
||||||
// 상속클래스에서 추가된 멤버 데이타가 링크의 삭제시 변해야 하는 값이라면
|
|
||||||
// 이 함수를 재정의 하여 값을 조종한다.
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
virtual void OnDelete( ZCLink* AP_CutHead,TTypSize AL_CutHeadPos,
|
|
||||||
ZCLink* AP_CutTail,TTypSize AL_CutTailPos
|
|
||||||
//////////////////// ) */
|
|
||||||
|
|
||||||
|
|
||||||
virtual void OnInsert( TTypSize AL_InsertPos , // 삽입되는 위치
|
|
||||||
TTypSize AL_InsertSize, // 삽입되는 링크의 갯수
|
|
||||||
ZCLink* AP_HeadInsert // 삽입되는 첫번째 링크의 포인터
|
|
||||||
/*////////////////*/ )
|
|
||||||
{
|
|
||||||
// 상속클래스에서 추가된 멤버 데이타가 링크의 삽입시 변해야 하는 값이라면
|
|
||||||
// 이 함수를 재정의 하여 값을 조종한다.
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
virtual void OnInsert( TTypSize AL_InsertPos ,
|
|
||||||
TTypSize AL_InsertSize,
|
|
||||||
ZCLink* AP_HeadInsert
|
|
||||||
//////////////////// ) */
|
|
||||||
|
|
||||||
|
|
||||||
//protected:
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
|
|
||||||
@ -1288,8 +1251,6 @@ namespace ZNsMain
|
|||||||
mp_HeadLink=VP_AddLink;
|
mp_HeadLink=VP_AddLink;
|
||||||
}
|
}
|
||||||
//else
|
//else
|
||||||
|
|
||||||
return mp_HeadLink;
|
|
||||||
}/*
|
}/*
|
||||||
ZCLink* AddHeadDefault()*/
|
ZCLink* AddHeadDefault()*/
|
||||||
|
|
||||||
@ -1336,8 +1297,6 @@ namespace ZNsMain
|
|||||||
mp_TailLink=mp_TailLink->mp_NextLink;
|
mp_TailLink=mp_TailLink->mp_NextLink;
|
||||||
}/*
|
}/*
|
||||||
else*/
|
else*/
|
||||||
|
|
||||||
return mp_TailLink;
|
|
||||||
}/*
|
}/*
|
||||||
ZCLink* AddTailDefault()*/
|
ZCLink* AddTailDefault()*/
|
||||||
|
|
||||||
@ -1556,8 +1515,6 @@ namespace ZNsMain
|
|||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
OnInsert(1, 1, AP_Link);
|
|
||||||
|
|
||||||
if(mp_HeadLink==0)
|
if(mp_HeadLink==0)
|
||||||
{
|
{
|
||||||
mp_HeadLink =
|
mp_HeadLink =
|
||||||
@ -1601,8 +1558,6 @@ namespace ZNsMain
|
|||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
OnInsert(ml_Size+1, 1, AP_Link);
|
|
||||||
|
|
||||||
AP_Link->mp_NextLink=0;
|
AP_Link->mp_NextLink=0;
|
||||||
|
|
||||||
if(mp_HeadLink==0)
|
if(mp_HeadLink==0)
|
||||||
@ -1627,12 +1582,6 @@ namespace ZNsMain
|
|||||||
{return;}
|
{return;}
|
||||||
/*++++++++++++++++++++++++++++++++*/
|
/*++++++++++++++++++++++++++++++++*/
|
||||||
|
|
||||||
rhs.OnDelete( rhs.mp_HeadLink, 1,
|
|
||||||
rhs.mp_TailLink, rhs.ml_Size
|
|
||||||
/*********/ );
|
|
||||||
|
|
||||||
OnInsert(1, rhs.ml_Size, rhs.mp_HeadLink);
|
|
||||||
|
|
||||||
if(mp_HeadLink==0)
|
if(mp_HeadLink==0)
|
||||||
{
|
{
|
||||||
mp_HeadLink=rhs.mp_HeadLink;
|
mp_HeadLink=rhs.mp_HeadLink;
|
||||||
@ -1660,12 +1609,6 @@ namespace ZNsMain
|
|||||||
{ return; }
|
{ return; }
|
||||||
/*++++++++++++++++++++++++++++++++*/
|
/*++++++++++++++++++++++++++++++++*/
|
||||||
|
|
||||||
rhs.OnDelete( rhs.mp_HeadLink, 1,
|
|
||||||
rhs.mp_TailLink, rhs.ml_Size
|
|
||||||
/*********/ );
|
|
||||||
|
|
||||||
OnInsert(ml_Size+1, rhs.ml_Size, rhs.mp_HeadLink);
|
|
||||||
|
|
||||||
if(mp_HeadLink==0)
|
if(mp_HeadLink==0)
|
||||||
{
|
{
|
||||||
mp_HeadLink=rhs.mp_HeadLink;
|
mp_HeadLink=rhs.mp_HeadLink;
|
||||||
@ -1710,12 +1653,16 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
// AL_DelSize 개의 링크를 앞 부분에서 삭제
|
// AL_DelSize 개의 링크를 앞 부분에서 삭제
|
||||||
|
|
||||||
|
if(AL_DelSize < 1 ) AL_DelSize= 1 ;
|
||||||
if(AL_DelSize > ml_Size) AL_DelSize= ml_Size;
|
if(AL_DelSize > ml_Size) AL_DelSize= ml_Size;
|
||||||
|
|
||||||
|
ZCLink* VP_CutTail =
|
||||||
|
mp_HeadLink->GetNextPtr(AL_DelSize-1);
|
||||||
|
|
||||||
ZtCSimList VO_StoreList; CutLink /////////////
|
ZtCSimList VO_StoreList; CutLink /////////////
|
||||||
(
|
(
|
||||||
0, mp_HeadLink
|
0, mp_HeadLink
|
||||||
, 1, mp_HeadLink->GetNextPtr(AL_DelSize-1)
|
, 1, VP_CutTail
|
||||||
, AL_DelSize
|
, AL_DelSize
|
||||||
, VO_StoreList
|
, VO_StoreList
|
||||||
)
|
)
|
||||||
@ -1751,7 +1698,8 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
if(ml_Size==0){return;}
|
if(ml_Size==0){return;}
|
||||||
|
|
||||||
if(AL_DelSize>ml_Size) AL_DelSize=ml_Size;
|
if(AL_DelSize> ml_Size){ AL_DelSize=ml_Size; }
|
||||||
|
if(AL_DelSize< 1 ){ AL_DelSize=1 ; }
|
||||||
|
|
||||||
if(AL_DelSize==ml_Size)
|
if(AL_DelSize==ml_Size)
|
||||||
{
|
{
|
||||||
@ -1779,7 +1727,6 @@ namespace ZNsMain
|
|||||||
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
if ( Find(AP_CutLink)==0 ||
|
if ( Find(AP_CutLink)==0 ||
|
||||||
Find(AP_CutLink)!=Find(AP_PrevLink)+1
|
Find(AP_CutLink)!=Find(AP_PrevLink)+1
|
||||||
)
|
)
|
||||||
@ -1791,22 +1738,16 @@ namespace ZNsMain
|
|||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if ( Find(AP_CutLink)==0 ||
|
|
||||||
Find(AP_CutLink)!=Find(AP_PrevLink)+1
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
delete CutLink(AP_PrevLink,AP_CutLink);
|
GetCLinkHeap().ReceiveLink
|
||||||
|
( CutLink(AP_PrevLink, AP_CutLink) );
|
||||||
}/*
|
}/*
|
||||||
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)*/
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)*/
|
||||||
|
|
||||||
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
if ( ml_Size==0 ||
|
if ( ml_Size==0 ||
|
||||||
Find(AP_CutLink) !=AL_CutPos ||
|
Find(AP_CutLink) !=AL_CutPos ||
|
||||||
Find(AP_PrevLink)!=(AL_CutPos-1)
|
Find(AP_PrevLink)!=(AL_CutPos-1)
|
||||||
@ -1819,16 +1760,10 @@ namespace ZNsMain
|
|||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if ( ml_Size==0 ||
|
|
||||||
Find(AP_CutLink) !=AL_CutPos ||
|
|
||||||
Find(AP_PrevLink)!=(AL_CutPos-1)
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
delete CutLink(AP_PrevLink,AP_CutLink,AL_CutPos);
|
GetCLinkHeap().ReceiveLink
|
||||||
|
( CutLink(AP_PrevLink, AP_CutLink, AL_CutPos) );
|
||||||
}/*
|
}/*
|
||||||
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)*/
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)*/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user