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