diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index b5eb781..7566b44 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -5686,17 +5686,20 @@ namespace ZNsMain class ZtCBaseList /*#####################################################*/ { public: - class ZCLink; + class ZCLink; class ZCLinkPoint; class ZCLinkRange; public: - typedef ZtCBaseList TypeThis ; - typedef TType TypeData ; - typedef TTypArgu TypeArg ; - typedef TTypeAlloc TypeAlloc ; - typedef TTypSize TypeSize ; - typedef TMoveObj TypeMoveObj ; - typedef ZCLink TypeLink ; - typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자. - typedef ZCLink* iterator ; + typedef ZtCBaseList TypeThis ; + typedef ZtCBaseList TypeList ; + typedef TType TypeData ; + typedef TTypArgu TypeArg ; + typedef TTypeAlloc TypeAlloc ; + typedef TTypSize TypeSize ; + typedef TMoveObj TypeMoveObj ; + typedef ZCLink TypeLink ; + typedef ZCLinkPoint TypeLinkPoint ; + typedef ZCLinkRange TypeLinkRange ; + typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자. + typedef TypeLinkPoint iterator ; // 다양한 기능을 가진 반복자. public: typedef ZtCObjOpt ZCLinkOpt; typedef ZtCObjOpt ZCDataOpt; @@ -5827,6 +5830,377 @@ namespace ZNsMain class ZCLink*/ + + class ZCLinkPoint + { + private: + TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0 + TypeSize ml_CurrPos ; + TypeList& mr_CurrList; + public: + ZCLinkPoint(TypeList& AR_TypeList) : + mr_CurrList(AR_TypeList) + { + mp_CurrLink = AR_TypeList.HeadPtr(); + ml_CurrPos = 1 ; + } + ZCLinkPoint(const ZCLinkPoint& rhs) : + mr_CurrList(rhs.mr_CurrList), + mp_CurrLink(rhs.mp_CurrLink), + ml_CurrPos (rhs.ml_CurrPos ) + {} + public: + + TypeList& GetList(){return mr_CurrList;} + TypeLink& GetLink(){return *mp_CurrLink;} + /***************************************************/ + TypeSize GetPos () const{ return ml_CurrPos; } + /***************************************************/ + + const TypeList& GetList() const{return mr_CurrList;} + const TypeLink& GetLink() const{return *mp_CurrLink;} + + + bool IsValid() const{return mr_CurrList.size()>0;} + bool IsEmpty() const{return mr_CurrList.size()<1;} + + + ZCLinkPoint& operator= (const ZCLinkPoint& rhs){ return *this; } + + ZCLinkPoint& operator++() + { + if(IsEmpty()){return *this;} + + mp_CurrLink = mp_CurrLink->mp_NextLink ; + + if(++ml_CurrPos>mr_CurrList.size()) + { ml_CurrPos -= mr_CurrList.size(); } + return *this; /*******************/ + }/* + ZCLinkPoint& operator++()*/ + + ZCLinkPoint& operator--() + { + if(IsEmpty()){return *this;} + + mp_CurrLink = mp_CurrLink->mp_PrevLink ; + + if(--ml_CurrPos<1) + { ml_CurrPos += mr_CurrList.size(); } + return *this; + }/* + ZCLinkPoint& operator--()*/ + + ZCLinkPoint operator++(int) + { + ZCLinkPoint VO_NowPoint(*this); + + if(IsEmpty()){return VO_NowPoint;} + + mp_CurrLink = mp_CurrLink->mp_NextLink ; + + if(++ml_CurrPos>mr_CurrList.size()) + { ml_CurrPos -= mr_CurrList.size(); } + return VO_NowPoint; /*************/ + }/* + ZCLinkPoint operator++(int)*/ + + ZCLinkPoint operator--(int) + { + ZCLinkPoint VO_NowPoint(*this); + + if(IsEmpty()){return VO_NowPoint;} + + mp_CurrLink = mp_CurrLink->mp_PrevLink ; + + if(--ml_CurrPos<1) + { ml_CurrPos += mr_CurrList.size(); } + return VO_NowPoint; + }/* + ZCLinkPoint operator--(int)*/ + + + ZCLinkPoint& operator+=(TypeSize AL_Distance) + { + if(IsEmpty()){return *this;} + + mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ; + + if(ml_CurrPos+=AL_Distance > mr_CurrList.size()) + { ml_CurrPos %= mr_CurrList.size(); } + else if(ml_CurrPos<1) // AL_Distance<0 + { while(ml_CurrPos+= mr_CurrList.size()<1){} } + return *this; /**********************/ + }/* + ZCLinkPoint& operator+=(TypeSize AL_Distance)*/ + + ZCLinkPoint& operator-=(TypeSize AL_Distance) + { + if(IsEmpty()){return *this;} + + mp_CurrLink = &((*mp_CurrLink)-AL_Distance); + + if(ml_CurrPos-=AL_Distance > mr_CurrList.size()) + { ml_CurrPos %= mr_CurrList.size(); } + else if(ml_CurrPos<1) // AL_Distance>=0 + { while(ml_CurrPos+= mr_CurrList.size()<1){} } + return *this; /***********************/ + }/* + ZCLinkPoint& operator-=(TypeSize AL_Distance)*/ + + + ZCLinkPoint& MoveAfter(ZCLinkPoint& rhs, bool AB_Forward=true) + { + if(IsEmpty()){return *this;} + + ZCLink* VP_HereLink = ///////////////// + ( + AB_Forward + ? mp_CurrLink->mp_NextLink + : mp_CurrLink->mp_PrevLink + ) ; + /////////////////////////////////////// + + if(&mr_CurrList!=&rhs.mr_CurrList) + { + mr_CurrList.SendOutAfter /********/ + ( + *mp_CurrLink , + rhs.mr_CurrList , + ZCLinkOpt(*rhs.mp_CurrLink) + ); + /*********************************/ + + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + }/* + if(&mr_CurrList!=&rhs.mr_CurrList)*/ + + + // &mr_CurrList == &rhs.mr_CurrList + + else if(rhs.mp_CurrLink==mp_CurrLink) + { + if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} + }/* + else if(rhs.mp_CurrLink==mp_CurrLink)*/ + + else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink) + { + // 이미 rhs 의 뒤에 *this 가 있는 경우. + + if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} + }/* + else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/ + + else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink) + { + // *this 뒤에 rhs 가 있어서 위치를 맞바꾸는 경우. + + mr_CurrList.SwapLinkNext( *mp_CurrLink ) ; + + if(--rhs.ml_CurrPos<1) + { rhs.ml_CurrPos += rhs.mr_CurrList.size(); } + + if(AB_Forward) + { + ++ml_CurrPos; VP_HereLink = mp_CurrLink; + } + else{ --ml_CurrPos; } + }/* + else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink)*/ + + else ////////////////////////////////////////// + { + if(ml_CurrPosmp_NextLink + : mp_CurrLink->mp_PrevLink + ) ; + /////////////////////////////////////// + + if(&mr_CurrList!=&rhs.mr_CurrList) + { + mr_CurrList.SendOutBefore /*******/ + ( + *mp_CurrLink , + rhs.mr_CurrList , + ZCLinkOpt(*rhs.mp_CurrLink) + ); + /*********************************/ + + if(!AB_Forward) + {ml_CurrPos = ml_CurrPos-1;} + + ++rhs.ml_CurrPos ; + }/* + if(&mr_CurrList!=&rhs.mr_CurrList)*/ + + + // &mr_CurrList == &rhs.mr_CurrList + + else if(rhs.mp_CurrLink==mp_CurrLink) + { + if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} + }/* + else if(rhs.mp_CurrLink==mp_CurrLink)*/ + + else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink) + { + // 이미 rhs 의 앞에 *this 가 있는 경우. + + if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} + }/* + else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink)*/ + + else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink) + { + // *this 앞에 rhs 가 있어서 위치를 맞바꾸는 경우. + + rhs.mr_CurrList.SwapLinkNext(*rhs.mp_CurrLink) ; + + if(++rhs.ml_CurrPos>rhs.mr_CurrList.size()) + { rhs.ml_CurrPos -= rhs.mr_CurrList.size(); } + + if(AB_Forward){ ++ml_CurrPos; } else + { --ml_CurrPos; VP_HereLink = mp_CurrLink; } + }/* + else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink)*/ + + else ////////////////////////////////////////// + { + if(ml_CurrPos>rhs.ml_CurrPos) + { ++rhs.ml_CurrPos; } + + mr_CurrList.SendOutBefore /***************/ + ( + *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) + ); + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + } + rhs.mp_CurrLink = VP_HereLink ; return *this ; + }/* + ZCLinkPoint& MoveBefore(ZCLinkPoint& rhs, bool AB_Forward=true)*/ + + + ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true) + { + if(IsEmpty()){return *this;} + + ZCLink* VP_HereLink = ///////////////// + ( + AB_Forward + ? mp_CurrLink->mp_NextLink + : mp_CurrLink->mp_PrevLink + ) ; + /////////////////////////////////////// + + if(&mr_CurrList!=&AR_RhsList) + { + mr_CurrList.SendOutAfter /********/ + ( + *mp_CurrLink, AR_RhsList, ZCLinkOpt(0) + ); + /*********************************/ + + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + }/* + if(&mr_CurrList!=&rhs.mr_CurrList)*/ + + + // &mr_CurrList == &rhs.mr_CurrList + + else if(mr_CurrList.mp_HeadLink==mp_CurrLink) + { + // *this 가 이미 머리인 경우. + + if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} + }/* + else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/ + + else ////////////////////////////////////////// + { + mr_CurrList.SendOutAfter /****************/ + ( + *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) + ); + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + } + mp_CurrLink = VP_HereLink ; return *this ; + }/* + ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true)*/ + + + ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true) + { + if(IsEmpty()){return *this;} + + ZCLink* VP_HereLink = ///////////////// + ( + AB_Forward + ? mp_CurrLink->mp_NextLink + : mp_CurrLink->mp_PrevLink + ) ; + /////////////////////////////////////// + + if(&mr_CurrList!=&AR_RhsList) + { + mr_CurrList.SendOutBefore /*******/ + ( + *mp_CurrLink, AR_RhsList, ZCLinkOpt(0) + ); + /*********************************/ + + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + }/* + if(&mr_CurrList!=&rhs.mr_CurrList)*/ + + + // &mr_CurrList == &rhs.mr_CurrList + + else if(AR_RhsList.mp_TailLink==mp_CurrLink) + { + // 이미 *this 가 꼬리인 경우. + + if(AB_Forward){ml_CurrPos=1;}else{--ml_CurrPos;} + }/* + else if(AR_RhsList.mp_TailLink==mp_CurrLink)*/ + + else ////////////////////////////////////////// + { + mr_CurrList.SendOutAfter /****************/ + ( + *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) + ); + if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} + } + mp_CurrLink = VP_HereLink ; return *this ; + }/* + ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true)*/ + + public: + };/* + class ZCLinkPoint*/ + + + public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ private : @@ -6770,6 +7144,86 @@ namespace ZNsMain void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/ + ZtCBaseList& SwapLinkNext(ZCLink& AR_LinkPrev) + { + // 다음 링크와 위치를 맞바꾼다. + + ZCLink* VP_LinkNext = AR_LinkPrev.mp_NextLink; + + if(&AR_LinkPrev == VP_LinkNext){ return *this; } + + if(size()==2) + { + if(&AR_LinkPrev==mp_HeadLink) + { + // VP_LinkNext==mp_TailLink + + mp_HeadLink = VP_LinkNext ; + mp_TailLink = &AR_LinkPrev; + } + /*:::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + else // VP_LinkNext==mp_HeadLink + { + mp_HeadLink = &AR_LinkPrev ; + mp_TailLink = VP_LinkNext ; + } + /*:::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + } + else if(&AR_LinkPrev==mp_HeadLink) + { + // VP_LinkNext == mp_HeadLink.mp_NextLink; + + ZCLink* VP_HeadNext2 = + VP_LinkNext->mp_NextLink ; + + ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev); + ZCLink::JoinLink(&AR_LinkPrev, VP_HeadNext2); + ZCLink::MakeRing(VP_LinkNext , mp_TailLink ); + + mp_HeadLink = VP_LinkNext ; + } + else if(&AR_LinkPrev==mp_TailLink) + { + // VP_LinkNext==mp_HeadLink + + ZCLink* VP_HeadNext = + mp_HeadLink->mp_NextLink ; + ZCLink* VP_TailPrev = + mp_TailLink->mp_PrevLink ; + + ZCLink::JoinLink(mp_TailLink, VP_HeadNext); + ZCLink::JoinLink(VP_TailPrev, mp_HeadLink); + ZCLink::MakeRing(mp_TailLink, mp_HeadLink); + + mp_HeadLink = &AR_LinkPrev ; + mp_TailLink = VP_LinkNext ; + } + else if(VP_LinkNext==mp_TailLink) + { + ZCLink* VP_TailPrev2 = + AR_LinkPrev.mp_PrevLink ; + + ZCLink::JoinLink(VP_TailPrev2, VP_LinkNext ); + ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev ); + ZCLink::MakeRing(mp_HeadLink , &AR_LinkPrev ); + + mp_TailLink = &AR_LinkPrev ; + } + else + { + ZCLink* VP_SwapPrev = AR_LinkPrev. mp_PrevLink; + ZCLink* VP_SwapNext = VP_LinkNext->mp_NextLink; + + ZCLink::JoinLink(VP_SwapPrev , VP_LinkNext ) ; + ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev ) ; + ZCLink::JoinLink(&AR_LinkPrev, VP_SwapNext ) ; + } + return *this; /***********************************/ + }/* + ZtCBaseList& SwapLinkNext(ZCLink& AR_LinkPrev)*/ + + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) { // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. @@ -6820,11 +7274,11 @@ namespace ZNsMain { // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. - return CutLinkRangeOut + return CutLinkRangeOut ///////////// ( AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true ); - ////////////////////// + //////////////////////////////////// } ZtCBaseList& SendRangeOutBefore ///////////////////////////////////////// ( @@ -7191,6 +7645,77 @@ namespace ZNsMain ###############################################################################*/ + template void IterElemLinkRev(TFunctor AO_Functor) + { + ZCLink* VP_LoopLink = mp_TailLink ; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData:: + GetObjRef(AO_Functor)( *VP_LoopLink ); + + VP_LoopLink = VP_LoopLink->mp_PrevLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template void IterElemLinkRev(TFunctor AO_Functor) */ + + + template + void IterElemLinkRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain:: + ZtCCheckRef ZCCheckRef; + + ZCLink* VP_LoopLink=mp_TailLink; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + *VP_LoopLink, ZCCheckRef::PassData(AO_TypeHelp) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_PrevLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template + void IterElemLinkRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ + + + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLinkRev + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + /*#############################################################################*/ + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef1; + typedef ZNsMain::ZtCCheckRef ZCCheckRef2; + + ZCLink* VP_LoopLink=mp_TailLink; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + *VP_LoopLink + , ZCCheckRef1::PassData(AO_TypeHelp1) + , ZCCheckRef2::PassData(AO_TypeHelp2) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_PrevLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLinkRev + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + ###############################################################################*/ + ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} ZCLink* GetTailLinkPtr(){return mp_TailLink;} @@ -7202,21 +7727,6 @@ namespace ZNsMain const ZCLink* GetLinkPtr(TypeSize AI_Index) const{return mp_HeadLink->GetNextPrevPtr(AI_Index-1);} - ZCLinkOpt GetLinkOpt(TypeSize AI_Index) - { - if(mp_HeadLink==0) return ZCLinkOpt(0); - - return ZCLinkOpt(GetLinkPtr(AI_Index)); - } - const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const - { - if(mp_HeadLink==0) return ZCLinkOpt(0); - - return ZCLinkOpt(GetLinkPtr(AI_Index)); - }/* - const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const*/ - - ZCLink& GetHeadLink(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;} ZCLink& GetTailLink(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;} @@ -7228,6 +7738,70 @@ namespace ZNsMain const ZCLink& GetLink(TypeSize AI_Index) const{return (*mp_HeadLink)+(AI_Index-1);} + ZCLink* HeadPtr(){return mp_HeadLink;} + ZCLink* TailPtr(){return mp_TailLink;} + + ZCLink* HeadPtr(TypeSize AI_Distance){return &((*mp_HeadLink)+AI_Distance);} + ZCLink* TailPtr(TypeSize AI_Distance){return &((*mp_TailLink)-AI_Distance);} + + const ZCLink* HeadPtr() const{return mp_HeadLink;} + const ZCLink* TailPtr() const{return mp_TailLink;} + + const ZCLink* HeadPtr(TypeSize AI_Distance) const{return &((*mp_HeadLink)+AI_Distance);} + const ZCLink* TailPtr(TypeSize AI_Distance) const{return &((*mp_TailLink)-AI_Distance);} + + + ZCLink& HeadRef(){return *mp_HeadLink;} + ZCLink& TailRef(){return *mp_TailLink;} + + ZCLink& HeadRef(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;} + ZCLink& TailRef(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;} + + const ZCLink& HeadRef() const{return *mp_HeadLink;} + const ZCLink& TailRef() const{return *mp_TailLink;} + + const ZCLink& HeadRef(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;} + const ZCLink& TailRef(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;} + + + + ZCLinkOpt HeadOpt(){return ZCLinkOpt(mp_HeadLink);} + ZCLinkOpt TailOpt(){return ZCLinkOpt(mp_TailLink);} + + ZCLinkOpt HeadOpt(TypeSize AI_Distance) + {if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);} + ZCLinkOpt TailOpt(TypeSize AI_Distance) + {if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);} + + const ZCLinkOpt HeadOpt() const{return ZCLinkOpt(mp_HeadLink);} + const ZCLinkOpt TailOpt() const{return ZCLinkOpt(mp_TailLink);} + + const ZCLinkOpt HeadOpt(TypeSize AI_Distance) const + {if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);} + const ZCLinkOpt TailOpt(TypeSize AI_Distance) const + {if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);} + + + ZCLink& _1(){return HeadRef();} + ZCLink& _0(){return TailRef();} + + ZCLink& _1(TypeSize AI_Distance){return HeadRef(AI_Distance);} + ZCLink& _0(TypeSize AI_Distance){return TailRef(AI_Distance);} + + const ZCLink& _1() const{return HeadRef();} + const ZCLink& _0() const{return TailRef();} + + const ZCLink& _1(TypeSize AI_Distance) const{return HeadRef(AI_Distance);} + const ZCLink& _0(TypeSize AI_Distance) const{return TailRef(AI_Distance);} + + + /***/ ZCLinkOpt GetLinkOpt(TypeSize AI_Index) + { if(mp_HeadLink==0) return ZCLinkOpt(0); return ZCLinkOpt(GetLinkPtr(AI_Index)); } + const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const + { if(mp_HeadLink==0) return ZCLinkOpt(0); return ZCLinkOpt(GetLinkPtr(AI_Index)); } + + + IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();} IterEasy GetTailIterEasy (){return GetTailLinkPtr();} IterEasyID GetHeadIterEasyID (){return (IterEasyID)GetHeadLinkPtr();} diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index 4b39eca..c35dde1 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -548,6 +548,25 @@ namespace ZNsMain VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0)); + cout<