diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 9701632..cad3b7d 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -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::GetObjRef(AO_Functor)(VP_LoopLink->mo_Data); - - /* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator() - 연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */ + ZtCTypeData:: + GetObjRef(AO_Functor)( VP_LoopLink->mo_Data ); + /* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, + operator() 연산자를 가진 object 포인터일 때도 사용할 수 + 있게 되었다. + */ VP_LoopLink = VP_LoopLink->mp_NextLink ; }/* __for0(TypeSize, i, ml_Size)*/ diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index f9356c7..8aea306 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -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)*/