diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 7d1f5bd..d6ff0be 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -5883,6 +5883,70 @@ namespace ZNsMain void DeleteTail()*/ + void DeleteHead(TTypSize AL_DelSize) + { + // AL_DelSize 개의 링크를 앞 부분에서 삭제 + + if(ml_LinkSize<1 || AL_DelSize<1){ return; } + + if(AL_DelSize > ml_LinkSize){ AL_DelSize=ml_LinkSize; } + + if(AL_DelSize==ml_LinkSize) + { + RecvFreeIn + (ml_LinkSize, mp_HeadLink, mp_TailLink); + mp_HeadLink=0 ; + mp_TailLink=0 ; + ml_LinkSize=0 ; + + return; + }/* + if(AL_DelSize==ml_LinkSize)*/ + + ZCLink* VP_NewHead = + mp_HeadLink->GetNextPrevPtr( AL_DelSize ) ; + RecvFreeIn + (AL_DelSize, mp_HeadLink, VP_NewHead->mp_PrevLink); + + mp_HeadLink = VP_NewHead ; + ml_LinkSize -= AL_DelSize ; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + }/* + void DeleteHead(TTypSize AL_DelSize)*/ + + + void DeleteTail(TTypSize AL_DelSize) + { + if(ml_LinkSize==0 || AL_DelSize<1){ return; } + + if(AL_DelSize> ml_LinkSize){ AL_DelSize=ml_LinkSize; } + + if(AL_DelSize==ml_LinkSize) + { + RecvFreeIn + (ml_LinkSize, mp_HeadLink, mp_TailLink); + mp_HeadLink=0 ; + mp_TailLink=0 ; + ml_LinkSize=0 ; + + return; + }/* + if(AL_DelSize==ml_LinkSize)*/ + + ZCLink* VP_NewTail = + mp_TailLink->GetNextPrevPtr( -AL_DelSize ) ; + RecvFreeIn + (AL_DelSize, VP_NewTail->mp_NextLink, mp_TailLink); + + mp_TailLink = VP_NewTail ; + ml_LinkSize -= AL_DelSize ; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + }/* + void DeleteTail(TTypSize AL_DelSize)*/ + + ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink) { // AP_StdLink 의 뒤에 rhs 를 삽입. diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 42b8648..8b4b21c 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -1781,24 +1781,39 @@ namespace ZNsMain }/* ZtCObjList& DeleteHead()*/ - ZtCObjList& DeleteHead(TypeSize AI_DeleteCnt) + + void DeleteHead(TTypSize AL_DelSize) { - __for1(TypeSize, i, AI_DeleteCnt) + // AL_DelSize 개의 링크를 앞 부분에서 삭제 + + if(ml_LinkSize<1 || AL_DelSize<1){ return; } + + if(AL_DelSize> ml_LinkSize){ AL_DelSize=ml_LinkSize; } + + if(AL_DelSize==ml_LinkSize) { - if(this->size()<1) return *this; + GetCFreeHeap().RecvFreeIn + (ml_LinkSize, mp_HeadLink, mp_HeadLink->mp_PrevLink); + mp_HeadLink=0 ; + ml_LinkSize=0 ; - #if(_CODE_NEW_) - mo_FreeObjt.RecvFreeIn - ( this->CutLink(mp_HeadLink) ); - #else - delete this->CutLink(mp_HeadLink) ; - #endif + return; }/* - __for1(TypeSize, i, AI_DeleteCnt)*/ + if(AL_DelSize==ml_LinkSize)*/ - return *this; + ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink; + ZCLink* VP_NewHead = mp_HeadLink-> + GetNextPtr( AL_DelSize ); + GetCFreeHeap().RecvFreeIn + (AL_DelSize, mp_HeadLink, VP_NewHead->mp_PrevLink); + + mp_HeadLink = VP_NewHead ; + ml_LinkSize -= AL_DelSize ; + + ZCLink::MakeRing(mp_HeadLink, VP_TailLink); }/* - ZtCObjList& DeleteHead(TypeSize AI_DeleteCnt)*/ + void DeleteHead(TTypSize AL_DelSize)*/ + ZtCObjList& DeleteTail() { @@ -1815,6 +1830,36 @@ namespace ZNsMain ZtCObjList& DeleteTail()*/ + void DeleteTail(TTypSize AL_DelSize) + { + if(ml_LinkSize==0 || AL_DelSize<1){ return; } + + if(AL_DelSize> ml_LinkSize){ AL_DelSize=ml_LinkSize; } + + if(AL_DelSize==ml_LinkSize) + { + GetCFreeHeap().RecvFreeIn + (ml_LinkSize, mp_HeadLink, mp_HeadLink->mp_PrevLink); + mp_HeadLink=0 ; + ml_LinkSize=0 ; + + return; + }/* + if(AL_DelSize==ml_LinkSize)*/ + + ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink; + ZCLink* VP_NewTail = VP_TailLink-> + GetPrevPtr( AL_DelSize ) ; + GetCFreeHeap().RecvFreeIn + (AL_DelSize, VP_NewTail->mp_NextLink, VP_TailLink); + + ml_LinkSize -= AL_DelSize ; + + ZCLink::MakeRing(mp_HeadLink, VP_NewTail); + }/* + void DeleteTail(TTypSize AL_DelSize)*/ + + ZCLink* AddDefault(TypeSize AL_DefaultSize, TypeSize AL_AddPos) { const bool CB_IsTrue = /////////////////// diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index a64cd4f..29cf1af 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -1813,35 +1813,6 @@ namespace ZNsMain }/* void DeleteTail()*/ - void DeleteTail(TTypSize AL_DelSize) - { - if(ml_LinkSize==0 || AL_DelSize<1){ return; } - - if(AL_DelSize> ml_LinkSize){ AL_DelSize=ml_LinkSize; } - - if(AL_DelSize==ml_LinkSize) - { - GetCFreeHeap().RecvFreeIn - (ml_LinkSize, mp_HeadLink, mp_TailLink); - mp_HeadLink=0 ; - mp_TailLink=0 ; - ml_LinkSize=0 ; - - return; - }/* - if(AL_DelSize==ml_LinkSize)*/ - - ZCLink* VP_NewTail= mp_TailLink-> - GetNextPtr( -AL_DelSize ); - GetCFreeHeap().RecvFreeIn - (AL_DelSize, VP_NewTail->mp_NextLink, mp_TailLink); - - mp_TailLink = VP_NewTail ; - ml_LinkSize -= AL_DelSize ; - - ZCLink::MakeRing(mp_HeadLink, mp_TailLink); - }/* - void DeleteTail(TTypSize AL_DelSize)*/ void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink) { diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index 35f5c9e..287b40e 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -367,9 +367,10 @@ namespace ZNsMain VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode); - VO_ZCBaseListEx10_2.DeleteTail(); + cout<