commit 2025-10-12 08:03 is coding ZtCBaseList::CutLinkRangeIn() in ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-12 12:50:27 +09:00
parent 73d4d3daaf
commit 3259618f1e

View File

@ -6607,10 +6607,15 @@ namespace ZNsMain
AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16
■ bool AB_After=true 추가. AB_After==false 이면, rhs 의
AP_RhsStd 의 앞에 삽입한다.
■ bool AB_After=true 추가.
AP_RhsStd==0 이면 맨 뒤에 삽입한다. -- 2025-10-07 08:36
AB_After==true 이면, rhs 의 AP_RhsStd 의 뒤에 삽입한다.
AB_After==false 이면, rhs 의 AP_RhsStd 의 앞에 삽입한다.
AB_After==true && AP_RhsStd==0 이면 맨 앞에 삽입한다.
AB_After==false && AP_RhsStd==0 이면 맨 뒤에 삽입한다.
-- 2025-10-07 08:36
///////////////////////////////////////////////////////////*/
@ -6705,7 +6710,365 @@ namespace ZNsMain
)
#######################################################################*/
/*private :*/
TypeThis& CutLinkRangeIn ///////////////////////////////////////////////
(
ZCLink& AR_CutHead ,
ZCLink& AR_CutTail ,
TypeSize AL_CutSize ,
ZCLink* AP_NowStd ,
bool AB_After=true
)
/*#####################################################################*/
{
/*///////////////////////////////////////////////////////////
■ AR_CutHead 는 삭제하려는 링크의 범위의 앞의 링크.
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
AB_After==true 이면, rhs 의 AP_NowStd 의 뒤에
AB_After==false 이면, rhs 의 AP_NowStd 의 앞에
연결한다.
AB_After==true && AP_NowStd==0 이면 맨 앞에
AB_After==false && AP_NowStd==0 이면 맨 뒤에
연결한다. -- 2025-10-12 08:19
///////////////////////////////////////////////////////////*/
if(ml_LinkSize<1){return *this;}
if(AL_CutSize>=ml_LinkSize){return *this;}
if(&AR_CutHead==mp_HeadLink && &AR_CutTail==mp_TailLink)
{ return *this; }
if(&AR_CutHead==AP_NowStd || &AR_CutTail==AP_NowStd )
{ return *this; }
/******************************************************/
if (AB_After && AP_NowStd==0) // 맨 앞에 삽입.
{
if(&AR_CutHead==mp_HeadLink)
{ /* nothing to do.*/ }
else if(mp_HeadLink->mp_NextLink==&AR_CutHead)
{
// mp_HeadLink - &AR_CutHead ~ &AR_CutTail
if(&AR_CutTail==mp_TailLink)
{
// 현재 : mp_HeadLink - &AR_CutHead ~ &AR_CutTail(=mp_TailLink)
// 이후 : &AR_CutHead ~ &AR_CutTail - mp_HeadLink
ZCLink::JoinLink(&AR_CutTail, mp_HeadLink);
ZCLink::MakeRing(&AR_CutHead, mp_HeadLink);
mp_TailLink = mp_HeadLink ;
mp_HeadLink = &AR_CutHead ;
}
else
{
// 현재 : mp_HeadLink - &AR_CutHead ~ &AR_CutTail - VP_CutNext
// 이후 : &AR_CutHead ~ &AR_CutTail - mp_HeadLink - VP_CutNext
ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ;
ZCLink::JoinLink(&AR_CutTail, mp_HeadLink);
ZCLink::JoinLink(mp_HeadLink, VP_CutNext );
ZCLink::MakeRing(&AR_CutHead, mp_TailLink);
mp_HeadLink = &AR_CutHead ;
}
}/*
else if(mp_HeadLink->mp_NextLink==&AR_CutHead)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mp_HeadLink ~ &AR_CutHead ~ &AR_CutTail
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
else
{
if(&AR_CutTail==mp_TailLink)
{
/*////////////////////////////////////////////
■ 현재 :
mp_HeadLink ~ VP_CutPrev -
&AR_CutHead - &AR_CutTail(mp_TailLink)
이후 :
&AR_CutHead - &AR_CutTail -
mp_HeadLink ~ VP_CutPrev
////////////////////////////////////////////*/
ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ;
ZCLink::JoinLink(&AR_CutTail, mp_HeadLink);
ZCLink::MakeRing(&AR_CutHead, VP_CutPrev );
mp_HeadLink = &AR_CutHead ;
mp_TailLink = VP_CutPrev ;
}/*
if(&AR_CutTail==mp_TailLink)*/
else /*************************************************/
{
/*////////////////////////////////////////////
■ 현재 :
mp_HeadLink ~ VP_CutPrev -
&AR_CutHead - &AR_CutTail - VP_CutNext
이후 :
&AR_CutHead - &AR_CutTail -
mp_HeadLink ~ VP_CutPrev - VP_CutNext
////////////////////////////////////////////*/
ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ;
ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ;
ZCLink::JoinLink(&AR_CutTail, mp_HeadLink);
ZCLink::JoinLink(&VP_CutPrev, VP_CutNext );
ZCLink::MakeRing(&AR_CutHead, mp_TailLink);
mp_HeadLink = &AR_CutHead ;
}/*
else **************************************************/
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mp_HeadLink ~ &AR_CutHead ~ &AR_CutTail
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if (AB_After && AP_NowStd==0) // 맨 앞에 삽입.*/
else if(!AB_After && AP_NowStd==0) // 맨 뒤에 삽입.
{
if(&AR_CutTail==mp_TailLink)
{ /* nothing to do.*/ }
else if(mp_TailLink->mp_PrevLink==&AR_CutTail)
{
// &AR_CutHead ~ &AR_CutTail - mp_TailLink
if(&AR_CutHead==mp_HeadLink)
{
// 현재 : &AR_CutHead(=mp_HeadLink) ~ &AR_CutTail - mp_TailLink
// 이후 : mp_TailLink - &AR_CutHead ~ &AR_CutTail
ZCLink::JoinLink(mp_TailLink, &AR_CutHead);
ZCLink::MakeRing(mp_TailLink, &AR_CutTail);
mp_HeadLink = mp_TailLink ;
mp_TailLink = &AR_CutTail ;
}
else
{
// 현재 : VP_CutPrev - &AR_CutHead ~ &AR_CutTail - mp_TailLink
// 이후 : VP_CutPrev - mp_TailLink - &AR_CutHead ~ &AR_CutTail
ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ;
ZCLink::JoinLink(VP_CutPrev, mp_TailLink);
ZCLink::JoinLink(mp_TailLink, &AR_CutHead);
ZCLink::MakeRing(mp_HeadLink, &AR_CutTail);
mp_TailLink = &AR_CutTail ;
}
}/*
else if(mp_TailLink->mp_PrevLink==&AR_CutTail)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
&AR_CutHead ~ &AR_CutTail ~ mp_TailLink
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
else
{
if(&AR_CutHead==mp_HeadLink)
{
/*////////////////////////////////////////////
■ 현재 :
(mp_HeadLink=)
&AR_CutHead ~ &AR_CutTail - VP_CutNext ~ mp_TailLink
이후 :
VP_CutNext ~ mp_TailLink - &AR_CutHead ~ &AR_CutTail
////////////////////////////////////////////*/
ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ;
ZCLink::JoinLink(mp_TailLink, &AR_CutHead);
ZCLink::MakeRing(VP_CutNext , &AR_CutTail);
mp_HeadLink = VP_CutNext ;
mp_TailLink = &AR_CutTail ;
}/*
if(&AR_CutHead==mp_HeadlLink)*/
else /*************************************************/
{
/*////////////////////////////////////////////
■ 현재 :
VP_CutPrev - &AR_CutHead ~
&AR_CutTail - VP_CutNext ~ mp_TailLink
이후 :
&VP_CutPrev - VP_CutNext ~
mp_TailLink - &AR_CutHead ~ &AR_CutTail
////////////////////////////////////////////*/
ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ;
ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ;
ZCLink::JoinLink(&VP_CutPrev, VP_CutNext );
ZCLink::JoinLink(mp_TailLink, &AR_CutHead);
ZCLink::MakeRing(&AR_CutHead, &AR_CutTail);
mp_TailLink = &AR_CutTail ;
}/*
else **************************************************/
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
&AR_CutHead ~ &AR_CutTail ~ mp_TailLink
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
else if(!AB_After && AP_NowStd==0) // 맨 뒤에 삽입.*/
/*=================================================================
AP_NowStd!=0 : AP_NowStd 의 앞이나 뒤에 삽입.
=================================================================*/
else if(AR_CutTail.mp_NextLink==AP_NowStd)
{
// &AR_CutHead ~ &AR_CutTail - AP_NowStd
if(!AB_After)
{ /* nothing to do*/ }
else if(&AR_CutHead==mp_HeadLink)
{
/*************************************************************
■ mp_HeadLink==&AR_CutHead && mp_TailLink!=mp_TailLink
현재 : &AR_CutHead ~ &AR_CutTail - AP_NowStd - VP_StdNext ~ mp_TailLink
이후 : AP_NowStd - &AR_CutHead ~ &AR_CutTail- VP_StdNext ~ mp_TailLink
*************************************************************/
ZCLink* VP_StdNext = AP_NowStd->mp_NextLink;
ZCLink::JoinLink(AP_NowStd , &AR_CutHead );
ZCLink::JoinLink(&AR_CutTail, VP_StdNext );
ZCLink::MakeRing(AP_NowStd , mp_TailLink);
mp_HeadLink = AP_NowStd ;
}/*
else if(&AR_CutHead==mp_HeadLink)*/
else if(&AR_CutTail==mp_TailLink)
{ /* nothing to do */ }
/*******************************/
else
{
/*************************************************************
■ mp_HeadLink!=&AR_CutHead && mp_TailLink!=&AR_CutTail
현재 : VP_CutPrev - &AR_CutHead ~ &AR_CutTail - AP_NowStd - VP_StdNext
이후 : VP_CutPrev - AP_NowStd - &AR_CutHead ~ &AR_CutTail- VP_StdNext
*************************************************************/
ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink;
ZCLink* VP_StdNext = AP_NowStd->mp_NextLink;
ZCLink::JoinLink(VP_CutPrev , AP_NowStd );
ZCLink::JoinLink(AP_NowStd , &AR_CutHead);
ZCLink::JoinLink(&AR_CutTail, VP_StdNext );
}
}/*
else if(AR_CutTail.mp_NextLink==AP_NowStd)*/
else if(AR_CutHead.mp_PrevLink==AP_NowStd)
{
// AP_NowStd - &AR_CutHead ~ &AR_CutTail
if(AB_After)
{ /* nothing to do*/ }
else if(&AR_CutTail==mp_TailLink)
{
if(AP_NowStd==mp_HeadLink)
{
/*************************************************************
■ AP_NowStd==mp_HeadLink && &AR_CutTail==mp_TailLink
현재 : AP_NowStd - &AR_CutHead ~ &AR_CutTail
이후 : &AR_CutHead ~ &AR_CutTail - AP_NowStd
*************************************************************/
ZCLink::JoinLink(&AR_CutTail, AP_NowStd);
ZCLink::MakeRing(&AR_CutHead, AP_NowStd);
mp_HeadLink = &AR_CutHead;
mp_TailLink = AP_NowStd ;
}
else
{
/*************************************************************
■ &AR_CutTail==mp_TailLink
현재 : VP_StdPrev - AP_NowStd - &AR_CutHead ~ &AR_CutTail
이후 : VP_StdPrev - &AR_CutHead ~ &AR_CutTail - AP_NowStd
*************************************************************/
ZCLink* VP_StdPrev = AP_NowStd->mp_PrevLink ;
ZCLink::JoinLink(VP_StdPrev , &AR_CutHead);
ZCLink::JoinLink(&AR_CutTail, AP_NowStd );
ZCLink::MakeRing(mp_HeadLink, AP_NowStd );
mp_TailLink = AP_NowStd ;
}
}/*
else if(&AR_CutHead==mp_HeadLink)*/
// add codes
}/*
else if(AR_CutTail.mp_NextLink==AP_NowStd)*/
/*=================================================================
AP_RhsStd!=0 : AP_RhsStd 의 앞이나 뒤에 삽입.
=================================================================*/
// add codes
return *this;
}/*
TypeThis& CutLinkRangeIn ///////////////////////////////////////////////
(
ZCLink& AR_CutHead ,
ZCLink& AR_CutTail ,
TypeSize AL_CutSize ,
ZCLink* AP_RhsStd ,
bool AB_After=true
)
#######################################################################*/
private :
/***************************************************************************/
public :
ZtCBaseList()
@ -7480,7 +7843,6 @@ namespace ZNsMain
TypeThis& CopyThis(TypeThis& ARR_Rhs) const
{
// *this 를 복사해서, ARR_Rhs 의 끝에 연결한다.