commit 2025-09-12 11:19 edit a bit ZCppMain/ZtCSimList.H

This commit is contained in:
2025-09-12 11:19:22 +09:00
parent 74dbcd6482
commit 8a770d21ab
2 changed files with 46 additions and 93 deletions

View File

@ -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)*/

View File

@ -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)*/