From 8b2a6e6d4e22dc9d320ca4f816ad7be5944d6740 Mon Sep 17 00:00:00 2001 From: sauron Date: Thu, 4 Mar 2021 17:55:37 +0900 Subject: [PATCH] add ZtCArray.H --- ZCppMain/CObjList.H | 3208 --------------------------------------------------- ZCppMain/ZCArray.H | 969 ++++++++++++++++ ZCppMain/test.cpp | 10 + 3 files changed, 979 insertions(+), 3208 deletions(-) delete mode 100644 ZCppMain/CObjList.H create mode 100644 ZCppMain/ZCArray.H diff --git a/ZCppMain/CObjList.H b/ZCppMain/CObjList.H deleted file mode 100644 index e7ce252..0000000 --- a/ZCppMain/CObjList.H +++ /dev/null @@ -1,3208 +0,0 @@ - - -#ifndef __NSCPP_COBJLIST_H__ -#define __NSCPP_COBJLIST_H__ - - -#include "ZtCSortObjList.H" - - -namespace ZNsMain -{ - - /*///////////////////////////////////////////////////////////////// - - ¡á std::CDoubleList template À̳ª std::ZtCObjList template ¿Í´Â ´Þ¸® - ´Ü¼øÇÏ°Ô ±¸ÇöµÇ¾î ÀÖ´Â ¿¬°á¸®½ºÆ® class ZtCObjList ¸¦ ¸¸µç´Ù. - - ¡á typename TypCInit ´Â º°´Ù¸¥ ¿ªÇÒÀ» ÇÏÁö ¾Ê°í ÀÖ´Ù. ´Ù¸¥ ¸®½ºÆ® - Ŭ·¡½º¿Í ÅÛÇø´ Àμö¸¦ ºñ½ÁÇÏ°Ô ¸ÂÃß±â À§ÇØ, ±×¸®°í Â÷ÈÄÀÇ ¼³°è - ¸¦ À§ÇØ ÀÏ´Ü ÀÌ´ë·Î µÎÀÚ. - - /////////////////////////////////////////////////////////////////*/ - - - template class ZtCSortObjList; - - - template< typename Type , - typename TypCArg =const Type&, - typename TypCAlloc=ZCAllocator, - typename TypCInit =ZCInit , - typename TypSize =ZTypLong - > - class ZtCObjList - { - public: - template friend class ZtCSortObjList; - public: - typedef Type TypeData ; - typedef TypCArg TypeArg ; - typedef TypCAlloc TypeAlloc; - typedef TypCInit TypeInit ; - typedef TypSize TypeSize ; - public: - class ZCIterator; - class ZCLink ; - public: - typedef ZCLink* IterEasy; // °¡Àå ´ëÇ¥ÀûÀ¸·Î ¾²ÀÏ ¼ö ÀÖ´Â ¹Ýº¹ÀÚ. - typedef ZCIterator iterator; - typedef const ZCIterator const_iterator; - public: - - class ZCLink : public TypCAlloc - { - public : - template friend class ZtCSortObjList; - /*##########################*/ friend class ZtCObjList ; - private: - Type mo_Type ; - ZCLink* mp_NextLink; - ZCLink* mp_PrevLink; - private: - - static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink) - { - AP_PrevLink->mp_NextLink=AP_NextLink; - AP_NextLink->mp_PrevLink=AP_PrevLink; - }/* - static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)*/ - - static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink) - { - AP_HeadLink->mp_PrevLink=AP_TailLink; - AP_TailLink->mp_NextLink=AP_HeadLink; - }/* - static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)*/ - - /*private:*/ - public : - - ZCLink() - { - mp_NextLink=0; - mp_PrevLink=0; - }/* - ZCLink(TypCArg AR_Type)*/ - - ZCLink(TypCArg AR_Type):mo_Type(AR_Type) - { - mp_NextLink=0; - mp_PrevLink=0; - }/* - ZCLink(TypCArg AR_Type)*/ - - ZCLink(const ZCLink& rhs):mo_Type(rhs.mo_Type) - { - mp_NextLink=0; - mp_PrevLink=0; - }/* - ZCLink(TypCArg AR_Type)*/ - - - operator Type& (){return mo_Type;} - operator Type (){return mo_Type;} - Type& GetData (){return mo_Type;} - Type& operator*(){return mo_Type;} - - operator const Type& () const{return mo_Type;} - const Type& GetData () const{return mo_Type;} - const Type& operator*() const{return mo_Type;} - - - ZCLink* GetNextPrevPtr(TypSize AL_FarNum) // AL_FarNum Àº 0 À̰ųª À½¼öÀÏ ¼ö ÀÖ´Ù. - { - ZCLink* VP_TmpLink=this; - - if(AL_FarNum>=0) - { - while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; - } - else // AL_FarNum<0 ÀÎ °æ¿ì. - { - while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; - }/* - else*/ - - return VP_TmpLink; - }/* - ZCLink* GetNextPrevPtr(TypSize AL_FarNum)*/ - - const ZCLink* GetNextPrevPtr(TypSize AL_FarNum) const // or ZCLink const * const GetNextPrevPtr(TypSize AL_FarNum) const - { - ZCLink* VP_TmpLink=const_cast(this); - - if(AL_FarNum>=0) - { - while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; - } - else // AL_FarNum<0 ÀÎ °æ¿ì. - { - while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; - }/* - else*/ - - return VP_TmpLink; - }/* - const ZCLink* GetNextPrevPtr(TypSize AL_FarNum) const*/ - - - ZCLink* GetNextPtr(){return mp_NextLink;} - ZCLink* GetPrevPtr(){return mp_PrevLink;} - - const ZCLink* GetNextPtr() const{return mp_NextLink;} - const ZCLink* GetPrevPtr() const{return mp_PrevLink;} - - - ZCLink* GetNextPtr(TypSize AL_Distance) - { - TypSize VL_LoopIndex=0; - - ZCLink* VP_TmpLink=this; - - while(VL_LoopIndex++mp_NextLink; - - return VP_TmpLink; - }/* - ZCLink* GetNextPtr(TypSize AL_Distance)*/ - - ZCLink* GetPrevPtr(TypSize AL_Distance) - { - TypSize VL_LoopIndex=0 ; - ZCLink* VP_TmpLink =this; - - while(VL_LoopIndex++mp_PrevtLink; - - return VP_TmpLink; - }/* - ZCLink* GetPrevPtr(TypSize AL_Distance)*/ - - - const ZCLink* GetNextPtr(TypSize AL_Distance) const - { - TypSize VL_LoopIndex=0; - - ZCLink* VP_TmpLink=const_cast(this); - - while(VL_LoopIndex++mp_NextLink; - - return VP_TmpLink; - }/* - const ZCLink* GetNextPtr(TypSize AL_Distance) const*/ - - const ZCLink* GetPrevPtr(TypSize AL_Distance) const - { - TypSize VL_LoopIndex=0; - ZCLink* VP_TmpLink =const_cast(this); - - while(VL_LoopIndex++mp_PrevtLink; - - return VP_TmpLink; - }/* - const ZCLink* GetPrevPtr(TypSize AL_Distance) const*/ - - - public: - };/* - class ZCLink*/ - - - /*public :*/ - protected: - ZCLink* mp_HeadLink; - TypSize ml_Size ; - protected: - - virtual void OnDelete( - ZCLink* AP_CutHead, TypSize AI_CutHeadPos, - ZCLink* AP_CutTail, TypSize AI_CutTailPos - /*//////////*/ ) - { - // »ó¼ÓŬ·¡½º¿¡¼­ Ãß°¡µÈ ¸â¹ö µ¥ÀÌŸ°¡ ¸µÅ©ÀÇ »èÁ¦½Ã º¯ÇØ¾ß ÇÏ´Â °ªÀ̶ó¸é - // ÀÌ ÇÔ¼ö¸¦ overload ÇÏ¿© °ªÀ» Á¶Á¾ÇÑ´Ù. - }/* - virtual void OnDelete( - ZCLink* AP_CutHead,TypSize AI_CutHeadPos, - ZCLink* AP_CutTail,TypSize AI_CutTailPos - ////////////// ) */ - - - virtual void OnInsert( - TypSize AI_InsertPos , // »ðÀԵǴ À§Ä¡ - TypSize AI_InsertSize, // »ðÀԵǴ ¸µÅ©ÀÇ °¹¼ö - ZCLink* AP_HeadInsert // »ðÀԵǴ ù¹øÂ° ¸µÅ©ÀÇ Æ÷ÀÎÅÍ - /*//////////*/ ) - { - // »ó¼ÓŬ·¡½º¿¡¼­ Ãß°¡µÈ ¸â¹ö µ¥ÀÌŸ°¡ ¸µÅ©ÀÇ »ðÀԽà º¯ÇØ¾ß ÇÏ´Â °ªÀ̶ó¸é - // ÀÌ ÇÔ¼ö¸¦ overload ÇÏ¿© °ªÀ» Á¶Á¾ÇÑ´Ù. - }/* - virtual void OnInsert( - TypSize AI_InsertPos , - TypSize AI_InsertSize, - ZCLink* AP_HeadInsert - ////////////// ) */ - - - void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypSize AL_PosStd) - { - // AP_LinkInsert ¸¦ AL_PosStd ¹øÂ° ¸µÅ©ÀÎ AP_LinkStd µÚ¿¡ »ðÀÔÇÑ´Ù. - // AL_PosStd==0 ÀÌ¸é ¸Ç ¾Õ¿¡ »ðÀÔÇÑ´Ù. - - if(AP_LinkStd==0) - { - OnInsert(1,1,AP_LinkInsert); - - if(++ml_Size==1) - { - mp_HeadLink =AP_LinkInsert ; - mp_HeadLink->mp_NextLink=mp_HeadLink ; - mp_HeadLink->mp_PrevLink=mp_HeadLink ; - } - else - { - AP_LinkInsert->mp_NextLink =mp_HeadLink ; - mp_HeadLink->mp_PrevLink->mp_NextLink=AP_LinkInsert ; - AP_LinkInsert->mp_PrevLink =mp_HeadLink->mp_PrevLink ; - mp_HeadLink->mp_PrevLink =AP_LinkInsert ; - - mp_HeadLink=AP_LinkInsert; - }/* - else*/ - } - else - { - OnInsert(AL_PosStd+1, 1, AP_LinkInsert); ++ml_Size; - - AP_LinkInsert->mp_NextLink = AP_LinkStd->mp_NextLink ; - AP_LinkStd ->mp_NextLink = AP_LinkInsert ; - - AP_LinkInsert->mp_PrevLink =AP_LinkStd ; - AP_LinkInsert->mp_NextLink->mp_PrevLink=AP_LinkInsert; - }/* - else*/ - }/* - void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypSize AL_PosStd)*/ - - - public : void JoinAfter(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypSize AL_PosStd) - { - #ifdef _DEBUG - - if(AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<mp_PrevLink; - - ZCLink::MakeCircle(AO_CObjList.mp_HeadLink, mp_HeadLink->mp_PrevLink); - ZCLink::JoinLink (VP_TailLink,mp_HeadLink ); - - mp_HeadLink = AO_CObjList.mp_HeadLink; - ml_Size += AO_CObjList.ml_Size ; - }/* - else*/ - } - else // AP_LinkStd!=0 - { - ZCLink* VP_TailLink=AO_CObjList.mp_HeadLink->mp_PrevLink; - - ZCLink::JoinLink(VP_TailLink, AP_LinkStd->mp_NextLink); - ZCLink::JoinLink(AP_LinkStd , AO_CObjList.mp_HeadLink); - - ml_Size += AO_CObjList.ml_Size ; - }/* - else // AP_LinkStd!=0*/ - - AO_CObjList.mp_HeadLink=0; - AO_CObjList.ml_Size =0; - }/* - void JoinAfter(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypSize AL_PosStd)*/ - - - protected: ZCLink* CutLink(ZCLink* AP_CutLink) - { - // »èÁ¦ÇÏ·Á´Â ¸µÅ©ÀÇ À§Ä¡°ªÀ» ¾Ë ¼ö ¾øÀ¸¹Ç·Î ¸ðµç ¸µÅ©¸¦ »èÁ¦ÇÑ´Ù´Â ½ÅÈ£¸¦ º¸³½´Ù. - - OnDelete(mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size); - - if(AP_CutLink==mp_HeadLink) - { - if(mp_HeadLink==mp_HeadLink->mp_PrevLink) - mp_HeadLink=0; - else - { - ZCLink::MakeCircle( mp_HeadLink=mp_HeadLink->mp_NextLink, - AP_CutLink->mp_PrevLink - /*////////////*/ ); - }/* - else*/ - } - else if(AP_CutLink==mp_HeadLink->mp_PrevLink) - ZCLink::MakeCircle(mp_HeadLink , AP_CutLink->mp_PrevLink); - else ZCLink::JoinLink (AP_CutLink->mp_PrevLink, AP_CutLink->mp_NextLink); - - return (--ml_Size, AP_CutLink); - }/* - ZCLink* CutLink(ZCLink* AP_CutLink)*/ - - - ZCLink* CutLink(ZCLink* AP_CutLink, TypSize AL_CutPos) - { - OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos); - - if(AL_CutPos==1) // ù° ¸µÅ©¸¦ »èÁ¦. - { - if(ml_Size==1) - mp_HeadLink=0; - else - { - ZCLink::MakeCircle( mp_HeadLink=mp_HeadLink->mp_NextLink, - AP_CutLink->mp_PrevLink - /*////////////*/ ); - }/* - else*/ - } - else if(AL_CutPos==ml_Size) // ³¡ ¸µÅ©¸¦ »èÁ¦ÇÒ ¶§ - ZCLink::MakeCircle(mp_HeadLink , AP_CutLink->mp_PrevLink); - else ZCLink::JoinLink (AP_CutLink->mp_PrevLink, AP_CutLink->mp_NextLink); - - return (--ml_Size, AP_CutLink); - }/* - ZCLink* CutLink(ZCLink* AP_CutLink, TypSize AL_CutPos)*/ - - - ZtCObjList& CutLink( - ZCLink* AP_CutHead, TypSize AL_CutHeadPos, - ZCLink* AP_CutTail, TypSize AL_CutTailPos, ZtCObjList& ARR_StoreList - /*//////////////*/ ) - { - // AP_CutHead ´Â »èÁ¦ÇÏ·Á´Â ¸µÅ©ÀÇ ¹üÀ§ÀÇ ¾ÕÀÇ ¸µÅ©, AL_CutHeadPos ´Â ±× À§Ä¡ - // AP_CutTail Àº »èÁ¦ÇÏ·Á´Â ¸µÅ©ÀÇ ¹üÀ§ÀÇ µÚÀÇ ¸µÅ©, AL_CutTailPos ´Â ±× À§Ä¡ - // µû¶ó¼­ AL_CutHeadPos <= AL_CutTailPos - - - #ifdef _DEBUG - - if(AL_CutHeadPos>AL_CutTailPos) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<AL_CutTailPos"<AL_CutTailPos)*/ - - #endif // _DEBUG - - - OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos); - - if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // ¸ðµç ¸µÅ©¸¦ »èÁ¦ÇÒ ¶§. - { - mp_HeadLink=0; - } - else if(AL_CutHeadPos==1) // Àß¶ó³»·Á´Â ¸µÅ©°¡ óÀ½ ¸µÅ©¸¦ Æ÷ÇÔÇÒ ¶§. - { - ZCLink::MakeCircle(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink); - } - else if(AL_CutTailPos==ml_Size) // Àß¶ó³»·Á´Â ¸µÅ©°¡ ³¡ ¸µÅ©¸¦ Æ÷ÇÔÇÒ ¶§. - { - ZCLink::MakeCircle(mp_HeadLink, AP_CutHead->mp_PrevLink); - } - else // Àß¶ó³»·Á´Â ¸µÅ©°¡ óÀ½°ú ³¡ ¸µÅ©¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ» ¶§. - { - ZCLink::JoinLink(AP_CutHead ->mp_PrevLink, AP_CutTail->mp_NextLink); - }/* - else*/ - - ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ; - - // AP_CutHead °ú AP_CutTail À» ¿¬°áÇÏ¿© - // ÀÌÁß ¿øÇü ¿¬°á¸®½ºÆ®°¡ µÇµµ·Ï ÇÑ´Ù. - - ZCLink::MakeCircle(AP_CutHead, AP_CutTail); - - - #ifdef _DEBUG - - if(ARR_StoreList.IsEmpty()!=true) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<GetNextPrevPtr(AL_FarNum) ¸µÅ©±îÁö¸¦ º¹»çÇÑ´Ù. - // AL_FarNum Àº 0 À̰ųª À½¼öÀÏ ¼ö ÀÖ´Ù. - // ÃÑ (FarNumÀÇ Àý´ë°ª) + 1 °³ÀÇ ¸µÅ©°¡ ¸¸µé¾î Áø´Ù. - - #ifdef _DEBUG - - if(ARR_StoreList.IsEmpty()!=true) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<(AP_CopyLink), - AL_FarNum , - VP_HeadLink, - VP_TailLink - /*//////////*/ ); ////////////////////////////// - - ZCLink::MakeCircle(VP_HeadLink, VP_TailLink); - - ARR_StoreList.mp_HeadLink=VP_HeadLink; - ARR_StoreList.ml_Size =(AL_FarNum<0 ? -AL_FarNum : AL_FarNum)+1 ; - - return ARR_StoreList; - }/* - ZtCObjList& CopyLink( const ZCLink* AP_CopyLink, - TypSize AL_FarNum , - ZtCObjList& ARR_StoreList - ///////////////// ) const */ - - - ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const - { - return CopyLink(mp_HeadLink, ml_Size-1, RR(ARR_StoreList)); - }/* - ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const*/ - - - ZtCObjList& MakeDefault(TypSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const - { - // must AL_DefaultSize > 0 - - ZCLink* VP_HeadLink=0; - ZCLink* VP_TailLink=0; - - GetManyLink(AL_DefaultSize, VP_HeadLink, VP_TailLink); - ZCLink::MakeCircle(VP_HeadLink, VP_TailLink); - - ARR_StoreList.mp_HeadLink=VP_HeadLink ; - ARR_StoreList.ml_Size =AL_DefaultSize; - - return ARR_StoreList; - }/* - ZtCObjList& MakeDefault(TypSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/ - - - void GetManyLink( - TypSize AL_LinkSize , - ZCLink*& APR_HeadLink, - ZCLink*& APR_TailLink - /*///////////*/ ) const - { - #ifdef _DEBUG - std::CCheckAlloc::CAllowAlloc VO_CAllowAllocObj; - #endif //_DEBUG - - APR_HeadLink=new ZCLink; ZCLink* VP_TempLink=APR_HeadLink; - - for(TypSize i=2; i<=AL_LinkSize; ++i) - { - ZCLink::JoinLink(VP_TempLink, new ZCLink); - - VP_TempLink=VP_TempLink->mp_NextLink; - }/* - for(TypSize i=2; i<=AL_LinkSize; ++i)*/ - - APR_TailLink=VP_TempLink; - }/* - void GetManyLink( - TypSize AL_LinkSize , - ZCLink*& APR_HeadLink, - ZCLink*& APR_TailLink - /////////////// ) const */ - - - void GetManyLinkCopy( - ZCLink* AP_CopyLink , TypSize AL_FarNum , - ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink - /*///////////////*/ ) const - { - // AL_FarNum ÀÇ Àý´ë°ª + 1 °³ÀÇ ¸µÅ©°¡ »ý¼ºµÈ´Ù. - - #ifdef _DEBUG - std::CCheckAlloc::CAllowAlloc VO_CAllowAllocObj; - #endif - - if(AL_FarNum>0) - { - APR_HeadLink= - new ZCLink(AP_CopyLink->GetData()); - - ZCLink* VP_TempLink=APR_HeadLink; - - for(TypSize i=1; i<=AL_FarNum; ++i) - { - AP_CopyLink=AP_CopyLink->mp_NextLink; - - ZCLink::JoinLink( - VP_TempLink, new ZCLink(AP_CopyLink->GetData())); - - VP_TempLink=VP_TempLink->mp_NextLink; - }/* - for(TypSize i=1; i<=AL_FarNum; ++i)*/ - - APR_TailLink=VP_TempLink; - } - else //AL_FarNum<=0 - { - APR_TailLink= - new ZCLink(AP_CopyLink->GetData()); - - ZCLink* VP_TempLink=APR_TailLink; - - for(TypSize i=AL_FarNum; i<0; ++i) - { - AP_CopyLink=AP_CopyLink->mp_PrevLink; - - ZCLink::JoinLink( - VP_TempLink, new ZCLink(AP_CopyLink->GetData())); - - VP_TempLink=VP_TempLink->mp_PrevLink; - }/* - for(TypSize i=AL_FarNum; i<0; ++i)*/ - - APR_HeadLink=VP_TempLink; - }/* - else //AL_FarNum<=0*/ - }/* - void GetManyLinkCopy( - ZCLink* AP_CopyLink , TypSize AL_FarNum , - ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink - ////////////////// ) const */ - - - /*protected:*/ - public : - - - ZtCObjList() - { - mp_HeadLink=0; - ml_Size =0; - }/* - ZtCObjList()*/ - - ZtCObjList(const ZtCObjList& rhs):mp_HeadLink(0),ml_Size(0) - { - *this=rhs; - }/* - ZtCObjList(const ZtCObjList& rhs)*/ - - - virtual ~ZtCObjList() - { - DeleteAll(); - }/* - virtual ~ZtCObjList()*/ - - - ZtCObjList& operator=(const ZtCObjList& rhs) - { - if(rhs.ml_Size<1) - { - return DeleteAll(); - } - else if(ml_Size<=rhs.ml_Size) - { - AddDefault(rhs.ml_Size-ml_Size,ml_Size+1); - - ZCLink* pRhsLink=rhs.mp_HeadLink; - ZCLink* pLhsLink= mp_HeadLink; - - __for1(TypSize, i, ml_Size) - { - pLhsLink->GetData()=pRhsLink->GetData(); - - pLhsLink=pLhsLink->mp_NextLink; - pRhsLink=pRhsLink->mp_NextLink; - }/* - __for1(TypSize, i, ml_Size)*/ - } - else - { - ZtCObjList VO_StoreList; - - CutLink( GetLinkPtr(rhs.ml_Size+1),rhs.ml_Size+1, - GetLinkPtr( ml_Size ), ml_Size , - RR(VO_StoreList) - /****/ ).DeleteAll(); ////////////////////////////// - }/* - else*/ - - return *this; - }/* - ZtCObjList& operator=(const ZtCObjList& rhs)*/ - - - bool IsEmpty() const - { - return mp_HeadLink==0 ; - }/* - bool IsEmpty() const*/ - - - TypSize GetSize() const{return ml_Size;} - TypSize size () const{return ml_Size;} - - ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} - ZCLink* GetTailLinkPtr() - { - return mp_HeadLink==0 ? 0 : mp_HeadLink->mp_PrevLink ; - }/* - ZCLink* GetTailLinkPtr()*/ - - - const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;} - const ZCLink* GetTailLinkPtr() const - { - return mp_HeadLink==0 ? 0 : mp_HeadLink->mp_PrevLink ; - }/* - const ZCLink* GetTailLinkPtr() const*/ - - - IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();} - IterEasy GetTailIterEasy (){return GetTailLinkPtr();} - IterEasyID GetHeadIterEasyID(){return (IterEasyID)GetHeadLinkPtr();} - IterEasyID GetTailIterEasyID(){return (IterEasyID)GetTailLinkPtr();} - - IterEasy GetHeadIterEasy () const{return GetHeadLinkPtr();} - IterEasy GetTailIterEasy () const{return GetTailLinkPtr();} - IterEasyID GetHeadIterEasyID() const{return (IterEasyID)GetHeadLinkPtr();} - IterEasyID GetTailIterEasyID() const{return (IterEasyID)GetTailLinkPtr();} - - IterEasyID ItHead() {return GetHeadIterEasyID();} - IterEasyID ItTail() {return GetTailIterEasyID();} - - IterEasyID ItHead() const{return GetHeadIterEasyID();} - IterEasyID ItTail() const{return GetTailIterEasyID();} - - - Type& operator[](TypSize AL_Index) - { - // [] ¿¡ µé¾î°¡´Â AL_Index Àº 1 ºÎÅÍ ½ÃÀÛÇϴ ÷ÀÚÀÌ´Ù. - - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif //_DEBUG - - return GetLinkPtr(AL_Index)->GetData(); - }/* - Type& operator[](TypSize AL_Index)*/ - - const Type& operator[](TypSize AL_Index) const - { - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif //_DEBUG - - return GetLinkPtr(AL_Index)->GetData(); - }/* - Type& operator[](TypSize AL_Index) const*/ - - - TypSize Find(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const - { - // AB_DoFindFromFront==true À̸é AL_FirstFindIndex ¹øÂ° ¸µÅ©ºÎÅÍ - // ´ÙÀ½ ¸µÅ©·Î ¼øÈ¸Çϸ鼭 GetData() == AR_SearchType ÀÌ µÇ´Â - // ÃÖÃÊÀÇ À§Ä¡¸¦ ¹ÝȯÇÑ´Ù. - - const bool CB_IsTrue = ( - mp_HeadLink == 0 || - AL_FirstFindIndex < 1 || - AL_FirstFindIndex > ml_Size - /*//////////////////*/ ) ; - - if(CB_IsTrue) return 0; - - TypSize VL_FindIndex=AL_FirstFindIndex; const - ZCLink* VP_TempLink =GetLinkPtr(AL_FirstFindIndex); - - if(AB_DoFindFromFront==true) - { - do ///////// - { - if(VP_TempLink->GetData()==AR_SearchType) return VL_FindIndex; - if(VL_FindIndex ==ml_Size ) return 0 ; - - VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex; - } - while(true); - } - else // AB_DoFindFromFront!=true - { - do ///////// - { - if(VP_TempLink->GetData()==AR_SearchType) return VL_FindIndex; - if(VL_FindIndex ==1 ) return 0 ; - - VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex; - } - while(true); - }/* - else // AB_DoFindFromFront!=true*/ - - return 0; - }/* - TypSize Find(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/ - - TypSize Find(const ZCLink* AP_SearchLink, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const - { - if(mp_HeadLink==0 || AL_FirstFindIndex<1 || AL_FirstFindIndex>ml_Size) - return 0; - //endif - - TypSize VL_FindIndex=AL_FirstFindIndex; - ZCLink* VP_TempLink =const_cast(GetLinkPtr(AL_FirstFindIndex)); - - if(AB_DoFindFromFront==true) - { - do /**/ - { - if(VP_TempLink ==AP_SearchLink) return VL_FindIndex; - if(VL_FindIndex==ml_Size ) return 0 ; - - VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex; - } - while(true); - } - else // AB_DoFindFromFront!=true - { - do /**/ - { - if(VP_TempLink ==AP_SearchLink) return VL_FindIndex; - if(VL_FindIndex==1 ) return 0 ; - - VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex; - } - while(true); - }/* - else // AB_DoFindFromFront!=true*/ - - return 0; - }/* - TypSize Find(ZCLink* AP_SearchLink, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/ - - - /*//////////////////////////////////////////////////////////////////////////////////////// - - ¡á FindData(TypeCArg, ~) ÇÔ¼ö°¡ ¾ø´Ù¸é, TypeCArg ÀÌ const Type& À¸·Î Á¤ÀǵǾî ÀÖ´Â °æ¿ì, - const Type& ¿¡ ´ëÇØ¼­¸¸ ã±â¸¦ ¼öÇàÇÒ ¼ö ÀÖ°í, Type& ¿¡ ´ëÇØ¼­´Â ã±â¸¦ ¼öÇàÇÒ ¼ö ¾ø´Ù. - - -- 2010-05-29 21:31:00 - - ////////////////////////////////////////////////////////////////////////////////////////*/ - - TypSize FindData(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const - { - return Find(AR_SearchType, AL_FirstFindIndex, AB_DoFindFromFront); - }/* - TypSize FindData(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/ - - - ZCLink* GetLinkPtr(TypSize AL_Index) - { - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif // _DEBUG - - TypSize VI_LeftDistance =AL_Index-1 ; - TypSize VI_RightDistance=ml_Size-AL_Index+1; - TypSize VI_ShortDistance= - (VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance); - - return mp_HeadLink->GetNextPrevPtr(VI_ShortDistance); - }/* - ZCLink* GetLinkPtr(TypSize AL_Index)*/ - - const ZCLink* GetLinkPtr(TypSize AL_Index) const // or 'ZCLink const * const GetLinkPtr(TypSize AL_Index) const' - { - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif // _DEBUG - - TypSize VI_LeftDistance =AL_Index-1 ; - TypSize VI_RightDistance=ml_Size-AL_Index+1; - TypSize VI_ShortDistance= - (VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance); - - return mp_HeadLink->GetNextPrevPtr(VI_ShortDistance); - }/* - const ZCLink* GetLinkPtr(TypSize AL_Index) const*/ - - - ZtCObjList& DeleteAll() - { - if(mp_HeadLink!=0) - { - OnDelete( - mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size); - - ZCLink* VP_DelLink=0; - - do //// - { - VP_DelLink =mp_HeadLink; - mp_HeadLink=mp_HeadLink->mp_NextLink; - - delete VP_DelLink; - } - while(--ml_Size>0); - - mp_HeadLink =0; - }/* - if(mp_HeadLink!=0)*/ - - return *this; - }/* - ZtCObjList& DeleteAll()*/ - - ZtCObjList& clear() - { - return this->DeleteAll(); - }/* - ZtCObjList& clear()*/ - - - ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink) - { - #ifdef _DEBUG - - if(Find(AP_DeleteLink)<1) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<CutLink(AP_DeleteLink); return *this; - }/* - ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/ - - ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypSize AL_DeletePos) - { - #ifdef _DEBUG - - if(AL_DeletePos<1 || Find(AP_DeleteLink)!=AL_DeletePos) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<CutLink(AP_DeleteLink, AL_DeletePos); return *this; - }/* - ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)*/ - - - ZtCObjList& Delete(ZCLink* AP_DeleteLink) - { - return DeleteLink(AP_DeleteLink); - }/* - ZtCObjList& Delete(ZCLink* AP_DeleteLink)*/ - - ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypSize AL_DeletePos) - { - return DeleteLink(AP_DeleteLink, AL_DeletePos); - }/* - ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)*/ - - ZtCObjList& DeleteLink(TypSize AL_DeletePos) - { - if(AL_DeletePos<1 || this->ml_Size>AL_DeletePos) return *this; - - Delete(this->GetLinkPtr(AL_DeletePos), AL_DeletePos); return *this; - }/* - ZtCObjList& DeleteLink(TypSize AL_DeletePos)*/ - - - ZtCObjList& DeleteHead() - { - if(ml_Size>0) - delete this->CutLink(mp_HeadLink); - - return *this; - }/* - ZtCObjList& DeleteHead()*/ - - ZtCObjList& DeleteHead(TypSize AI_DeleteCnt) - { - __for1(TypSize, i, AI_DeleteCnt) - { - if(ml_Size<1) return *this; - - delete this->CutLink(mp_HeadLink); - }/* - __for1(TypSize, i, AI_DeleteCnt)*/ - - return *this; - }/* - ZtCObjList& DeleteHead(TypSize AI_DeleteCnt)*/ - - ZtCObjList& DeleteTail() - { - if(ml_Size>0) - delete this->CutLink(mp_HeadLink->mp_PrevLink); - - return *this; - }/* - ZtCObjList& DeleteTail()*/ - - - ZCLink* AddDefault(TypSize AL_DefaultSize, TypSize AL_AddPos) - { - if(AL_DefaultSize<1 || AL_AddPos<1 || AL_AddPos>ml_Size+1) - return 0; - ////////////////////////////////////////////////////////// - - ZtCObjList VO_StoreList; MakeDefault( - AL_DefaultSize, VO_StoreList); - - ZCLink* VP_HeadLink=VO_StoreList.mp_HeadLink; - - if(AL_AddPos==1) - JoinAfter(VO_StoreList, 0 , 1 ); - else JoinAfter(VO_StoreList, GetLinkPtr(AL_AddPos-1), AL_AddPos-1); - - return VP_HeadLink; - }/* - ZCLink* AddDefault(TypSize AL_DefaultSize, TypSize AL_AddPos)*/ - - - ZtCObjList& AddHead(TypCArg AR_Type) - { - JoinAfter(new ZCLink(AR_Type), 0, 0); return *this; - }/* - ZtCObjList& AddHead(TypCArg AR_Type)*/ - - ZtCObjList& AddHead(const ZtCObjList& rhs) - { - if(this==&rhs) return *this; - - ZtCObjList VO_StoreList(rhs); - - JoinAfter(VO_StoreList, 0, 0); return *this; - }/* - ZtCObjList& AddHead(const ZtCObjList& rhs)*/ - - - ZCLink* AddHeadDefault() - { - /* ¾Æ·¡ ÄÚµå Áß return ¹®ÀÌ return *this ¶ó°í µÇ¾î ÀÖ¾ú´Ù. 10 ¿©³â°£ À̸¦ - ¸ð¸¥ °ÍÀÌ´Ù. Àڱ׸¶Ä¡ 10 ¿©³â°£! -- 2015-02-21- 21:36:00 - */ - ZCLink* VP_NewLink=new ZCLink; JoinAfter(VP_NewLink, 0, 0); return VP_NewLink; - }/* - ZCLink& AddHeadDefault()*/ - - - ZtCObjList& AddTail(TypCArg AR_Type) - { - JoinAfter(new ZCLink(AR_Type), GetTailLinkPtr(), ml_Size); return *this; - }/* - ZtCObjList& AddTail(TypCArg AR_Type)*/ - - ZtCObjList& AddTail(const ZtCObjList& rhs) - { - ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList); - }/* - ZtCObjList& AddTail(const ZtCObjList& rhs)*/ - - - ZCLink* AddTailDefault() - { - ZCLink* VP_NewLink=new ZCLink; - - JoinAfter( - VP_NewLink, GetTailLinkPtr(), ml_Size); - - return VP_NewLink; - }/* - ZCLink* AddTailDefault()*/ - - - ZtCObjList& pop_back (TypCArg AR_Type){return AddHead(AR_Type);} - ZtCObjList& push_back(TypCArg AR_Type){return AddTail(AR_Type);} - - - ZtCObjList& JoinHead(ZtCObjList& rhs) - { - JoinAfter(rhs, 0, 0); return *this; - }/* - ZtCObjList& JoinHead(ZtCObjList& rhs)*/ - - ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink) - { - // rhs ÀÇ AP_CLink ¸¦ ¾ÕÀ¸·Î ¿¬°áÇÑ´Ù. - // ÀÏ´Ü µÚ·Î ¿¬°áÇÑ ´ÙÀ½ mp_HeadLink À» µÚ·Î ¿òÁ÷ÀδÙ. - - JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size); - - mp_HeadLink=mp_HeadLink->GetPrevPtr(); return *this; - }/* - ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)*/ - - ZtCObjList& JoinTail(ZtCObjList& rhs) - { - JoinAfter(rhs, GetTailLinkPtr(), ml_Size); return *this; - }/* - ZtCObjList& JoinTail(ZtCObjList& rhs)*/ - - ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink) - { - // rhs ÀÇ AP_CLink ¸¦ µÚ·Î ¿¬°áÇÑ´Ù. - - JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size); return *this; - }/* - ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/ - - - ZtCObjList& JoinAfter( - ZtCObjList& rhs , - ZCLink* AP_LinkOfRhs , - TypSize AL_AddPosOfRhs , - ZCLink* AP_LinkStd , - TypSize AL_PosStd - /*////////////////*/ ) - { - // rhs ÀÇ AP_LinkOfRhs ¸µÅ©¸¦ Àß¶ó¼­ AP_LinkStd ¾Õ¿¡ ºÙÀδÙ. - - #ifdef _DEBUG - - if(rhs.Find(AP_LinkOfRhs)!=AL_AddPosOfRhs || (AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) ) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<AL_CutTailPos) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<AL_CutTailPos"<AL_CutTailPos)*/ - - #endif // _DEBUG - - - OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos); - - if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // ¸ðµç ¸µÅ©¸¦ »èÁ¦ÇÒ ¶§. - { - mp_HeadLink=0; - } - else if(AL_CutHeadPos==1) // Àß¶ó³»·Á´Â ¸µÅ©°¡ óÀ½ ¸µÅ©¸¦ Æ÷ÇÔÇÒ ¶§. - { - ZCLink::MakeCircle(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink); - } - else if(AL_CutTailPos==ml_Size) // Àß¶ó³»·Á´Â ¸µÅ©°¡ ³¡ ¸µÅ©¸¦ Æ÷ÇÔÇÒ ¶§. - { - ZCLink::MakeCircle(mp_HeadLink, AP_CutHead->mp_PrevLink); - } - else // Àß¶ó³»·Á´Â ¸µÅ©°¡ óÀ½°ú ³¡ ¸µÅ©¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ» ¶§. - { - ZCLink::JoinLink(AP_CutHead ->mp_PrevLink, AP_CutTail->mp_NextLink); - }/* - else*/ - - ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ; - - - // ¿©±â±îÁö´Â CutLink(ZCLink*,TypSize,ZCLink*,TypSize,ZtCObjList&) ¿Í °°´Ù. ÀÌÈÄ¿¡ CutLink() ¿¡¼­´Â - // ARR_StoreList °¡ ºñ¾î ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇÏÁö¸¸, CutLinkOut() ´Â ARR_StoreList ÀÌ ºñ¾î ÀÖÁö - // ¾ÊÀº °æ¿ì¿¡µµ ´ëºñÇÑ´Ù. - - if(ARR_StoreList.ml_Size<1) - { - // AP_CutHead °ú AP_CutTail À» ¿¬°áÇÏ¿© ÀÌÁß ¿øÇü ¿¬°á¸®½ºÆ®°¡ µÇµµ·Ï ÇÑ´Ù. - - ZCLink::MakeCircle(AP_CutHead, AP_CutTail); - - ARR_StoreList.mp_HeadLink=AP_CutHead ; - ARR_StoreList.ml_Size =AL_CutTailPos-AL_CutHeadPos+1; - } - else - { - ZCLink::JoinLink (ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead); - ZCLink::MakeCircle(ARR_StoreList.mp_HeadLink , AP_CutTail); - - ARR_StoreList.ml_Size += AL_CutTailPos-AL_CutHeadPos+1 ; - }/* - else*/ - - return ARR_StoreList; - }/* - ZtCObjList& CutLinkOut( - ZCLink* AP_CutHead, TypSize AL_CutHeadPos, - ZCLink* AP_CutTail, TypSize AL_CutTailPos, - ZtCObjList& ARR_StoreList - ///////////// ) */ - - - - operator Type&() - { - return AddDefault(1, ml_Size+1)->GetData(); - }/* - operator Type&()*/ - - - Type& GetData(TypSize AI_Index) - { - #ifdef _DEBUG - - if(AI_Index<1 || AI_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif //_DEBUG - - return GetLinkPtr(AI_Index)->GetData(); - }/* - Type& GetData(TypSize AI_Index)*/ - - - const Type& GetData(TypSize AI_Index) const - { - #ifdef _DEBUG - - if(AI_Index<1 || AI_Index>ml_Size) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_Size)*/ - - #endif //_DEBUG - - return GetLinkPtr(AI_Index)->GetData(); - }/* - const Type& GetData(TypSize AI_Index) const*/ - - - Type& GetHeadData() - { - #ifdef _DEBUG - - if(mp_HeadLink==0) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<GetData(); - }/* - Type& GetHeadData()*/ - - const Type& GetHeadData() const - { - #ifdef _DEBUG - - if(mp_HeadLink==0) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<GetData(); - }/* - const Type& GetHeadData() const*/ - - - Type& GetTailData() - { - #ifdef _DEBUG - - if(mp_HeadLink==0) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<mp_PrevLink->GetData(); - }/* - Type& GetTailData()*/ - - const Type& GetTailData() const - { - #ifdef _DEBUG - - if(mp_HeadLink==0) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<mp_PrevLink->GetData(); - }/* - const Type& GetTailData() const*/ - - - Type& front(){return GetHeadData();} - Type& back (){return GetTailData();} - - const Type& front() const{return GetHeadData();} - const Type& back () const{return GetTailData();} - - - ZtCObjList& Rotate(TypSize AL_RotateNum) - { - if(ml_Size>0) - mp_HeadLink=mp_HeadLink->GetNextPrevPtr(AL_RotateNum); - - return *this; - }/* - ZtCObjList& Rotate(TypSize AL_RotateNum)*/ - - ZtCObjList& Rotate() - { - if(ml_Size>0) - mp_HeadLink=mp_HeadLink->mp_NextLink; - - return *this; - }/* - ZtCObjList& Rotate()*/ - - ZtCObjList& RotateBack() - { - if(ml_Size>0) - mp_HeadLink=mp_HeadLink->mp_PrevLink; - - return *this; - }/* - ZtCObjList& RotateBack()*/ - - - template void IterElement(TFunctor AO_Functor) - { - ZCLink* VP_LoopLink=mp_HeadLink; - - __for0(int, i, ml_Size) - { - std::CTypeData_T::GetObjRef(AO_Functor)(VP_LoopLink->mo_Type); - - /* À§ ÄÚµå·Î ÀÎÇØ¼­, AO_Functor ÀÌ ÇÔ¼öÀÏ ¶§ »ÓÀÌ ¾Æ´Ï¶ó, operator() - ¿¬»êÀÚ¸¦ °¡Áø object Æ÷ÀÎÅÍÀÏ ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. */ - - VP_LoopLink = VP_LoopLink->mp_NextLink ; - }/* - __for0(int, i, ml_Size)*/ - }/* - template void IterElement(TFunctor AO_Functor) */ - - template - void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) - { - /*///////////////////////////////////////////////////////////////////////////// - - ¡á TTypeHelp °¡ class ÀÏ °æ¿ì, Å©±â°¡ Ä¿¼­ ÂüÁ¶·Î ³Ñ¾î°¡¾ß ÇÑ´Ù¸é, - - IterElement(myFunctor_obj, myClass_Obj); - - ÀÇ ÇüÅ·ΠȣÃâÇÒ °Ô ¾Æ´Ï¶ó, std::CObjectPtr_T<> À» »ç¿ëÇÏ¿©, - - myClass myClass_Obj; std::CObjectPtr_T myCObjPtr(myClass_Obj); - - ³ª - - IterElement(myFunctor_obj, std::CObjectPtr_T(myClass_Obj)); - - ÇüŸ¦ »ç¿ëÇϸé ÁÁÀ» °Í °°´Ù. -- 2014-06-16 23:11:00 - - /////////////////////////////////////////////////////////////////////////////*/ - - ZCLink* VP_LoopLink=mp_HeadLink; - - __for0(int, i, ml_Size) - { - std::CTypeData_T:: - GetObjRef(AO_Functor)(VP_LoopLink->mo_Type, AO_TypeHelp); - - /* À§ ÄÚµå·Î ÀÎÇØ¼­, AO_Functor ÀÌ ÇÔ¼öÀÏ ¶§ »ÓÀÌ ¾Æ´Ï¶ó, operator() - ¿¬»êÀÚ¸¦ °¡Áø object Æ÷ÀÎÅÍÀÏ ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. */ - - VP_LoopLink = VP_LoopLink->mp_NextLink ; - }/* - __for0(int, i, ml_Size)*/ - }/* - template - void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ - - - template - void IterElemRef(TFunctor AO_Functor, TTypeHelp& AR_TypeHelp) - { - /* TTypeHelp À» ÂüÁ¶·Î ¹Þ°í ÀÖÀ½¿¡ ÁÖÀÇÇÑ´Ù. -- 2015-09-07 02:55:00 */ - - ZCLink* VP_LoopLink=mp_HeadLink; - - __for0(int, i, ml_Size) - { - std::CTypeData_T:: - GetObjRef(AO_Functor)(VP_LoopLink->mo_Type, AR_TypeHelp); - - VP_LoopLink = VP_LoopLink->mp_NextLink ; - }/* - __for0(int, i, ml_Size)*/ - }/* - template - void IterElemRef(TFunctor AO_Functor, TTypeHelp& AR_TypeHelp) */ - - - /*/////////////////////////////////////////////////////////////////////////// - - ¡á IterElement() ¿¹Á¦. - - #include - #include "ZtCObjList.H" - - using namespace std; - - int main() - { - ZNsMain:: ZtCObjList myArray; - - myArray.AddTail(10); - myArray.AddTail(20); - myArray.AddTail(30); - myArray.AddTail(40); - - struct StFunctor - { - static void ShowElement(int ArgiValue){cout<<"# Value="< + class ZtCArray ///////////////////////// + { + public: + typedef TSize TypeSize; + typedef Type TypeData; + typedef ZtCArray ZCArray ; + public: + class ZCIterator; + public: + typedef Type* IterEasy; + typedef ZCIterator iterator; + typedef const ZCIterator const_iterator; + public: + + class ZCIterator + { + private: mutable + Type* mp_Data ; mutable + TSize ml_ElePos; // *mp_Data °¡ ¹è¿­¿¡¼­ Â÷ÁöÇÏ´Â À§Ä¡ + ZCArray* mp_CArray; + public: + + ZCIterator() + { + mp_Data =0; + mp_CArray=0; + ml_ElePos=0; + }/* + ZCIterator()*/ + + ZCIterator(ZCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) + { + mp_Data =&AR_CData ; + mp_CArray=&AR_CArray; + ml_ElePos=AL_ElePos ; + }/* + ZCIterator(ZCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/ + + ZCIterator(ZCArray& AR_CArray) + { + mp_Data = AR_CArray.mp_TypeArr ; + mp_CArray=&AR_CArray ; + ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ; + }/* + ZCIterator(ZCArray& AR_CArray)*/ + + ZCIterator(const ZCArray& AR_CArray) + { + mp_Data = AR_CArray.mp_TypeArr; + mp_CArray=const_cast(&AR_CArray); + ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ; + }/* + ZCIterator(const ZCArray& AR_CArray)*/ + + Type& operator*( ){return *mp_Data;} + Type* operator->(){return mp_Data;} + + const Type& operator* () const{return *mp_Data;} + const Type* operator->() const{return mp_Data;} + + ZCIterator& operator++( ){++mp_Data; ++ml_ElePos; return *this;} + ZCIterator operator++(int){++mp_Data; ++ml_ElePos; return *this;} + + const ZCIterator& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;} + const ZCIterator operator++(int) const{++mp_Data; ++ml_ElePos; return *this;} + + ZCIterator operator+(TSize AL_AddPos) const + { + return ZCIterator(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos); + }/* + ZCIterator operator+(TSize AL_AddPos) const*/ + + public: + };/* + class ZCIterator + + public :*/ + protected: + enum{ZEAddSize=20}; + protected: + + Type* mp_TypeArr ; + TypeSize ml_AllSize ; + TypeSize ml_UseSize ; + TypeSize ml_AddSize ; + + /* TSize ml_AddSize ´Â Ãß°¡ ¸Þ¸ð¸®¸¦ ÁöÁ¤. ÇÑ °³ÀÇ ¿ø¼Ò°¡ »ðÀԵǼ­ + ÀçÇÒ´çÇØ¾ß ÇÒ °æ¿ì, ml_AddSize °³ ¸¸Å­À» ¹Ì¸® ÇÒ´çÇÑ´Ù. + + protected:*/ + public : + + + ZtCArray() + { + mp_TypeArr =0; + ml_AllSize =0; + ml_UseSize =0; + ml_AddSize =ZEAddSize; + }/* + ZtCArray()*/ + + ZtCArray(const ZtCArray& rhs) + { + mp_TypeArr =0; + ml_AllSize =0; + ml_UseSize =0; + ml_AddSize =ZEAddSize; + + *this=rhs; + }/* + ZtCArray(const ZtCArray& rhs)*/ + + ~ZtCArray() + { + Delete(); + }/* + ~ZtCArray()*/ + + ZCArray& operator=(const ZCArray& rhs) + { + ReAlloc(rhs.ml_UseSize, false); + + ml_UseSize=rhs.ml_UseSize; + ml_AllSize=rhs.ml_AllSize; + + for(TypeSize i=0; i=1) ml_AddSize=AL_NewAddSize; + }/* + void SetAddSize(TypeSize AL_NewAddSize)*/ + + void SetUseSize(TypeSize AL_NewUseSize) + { + if(AL_NewUseSize>=0 && AL_NewUseSize<=ml_AllSize) + { + ml_UseSize=AL_NewUseSize; + }/* + if(AL_NewUseSize>=0 && AL_NewUseSize<=ml_AllSize)*/ + }/* + void SetUseSize(TypeSize AL_NewUseSize)*/ + + + void ReAlloc(TypeSize AL_AllocSize, bool AB_DoKeep=true) + { + if(AL_AllocSize<1) return ; + + if(AL_AllocSize::assign(size_type _Count, const type&); + + void assign(TypeSize AL_AllocSize, bool AB_DoKeep=true) + { + this->ReAlloc(AL_AllocSize, AB_DoKeep); + this->SetUseSize(AL_AllocSize); + }/* + void assign(TypeSize AL_AllocSize, bool AB_DoKeep=true)*/ + + + Type& operator[](TypeSize AL_Index) + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<<", "<="<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + Type& operator[](TypeSize AL_Index)*/ + + const Type& operator[](TypeSize AL_Index) const + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt", std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + const Type& operator[](TypeSize AL_Index) const*/ + + + Type& GetData(TypeSize AL_Index) + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + Type& GetData(TypeSize AL_Index)*/ + + const Type& GetData(TypeSize AL_Index) const + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index]; + }/* + const Type& GetData(TypeSize AL_Index) const*/ + + + void AddHead(TypeArg AR_TypeArg) + { + ReAlloc((ml_UseSize++)+1); + + for(TypeSize i=ml_UseSize-2; i>=0; --i) + { + mp_TypeArr[i+1]=mp_TypeArr[i] ; + }/* + for(TypeSize i=ml_UseSize-2; i>=0; --i)*/ + + mp_TypeArr[0]=AR_TypeArg ; + }/* + void AddHead(TypeArg AR_TypeArg)*/ + + Type& AddHead() + { + // ¾Õ¿¡ ºó ¿ø¼Ò¸¦ »ðÀÔÇÏ°í ±× ¿ø¼Ò¸¦ ¹ÝȯÇÑ´Ù. + + ReAlloc((ml_UseSize++)+1); + + for(TypeSize i=ml_UseSize-2; i>=0; --i) + { + mp_TypeArr[i+1]=mp_TypeArr[i] ; + }/* + for(TypeSize i=ml_UseSize-2; i>=0; --i)*/ + + return mp_TypeArr[0] ; + }/* + Type& AddHead()*/ + + void AddTail(TypeArg AR_TypeArg) + { + ReAlloc((ml_UseSize++)+1); mp_TypeArr[ml_UseSize-1]=AR_TypeArg ; + }/* + void AddTail(TypeArg AR_TypeArg)*/ + + Type& AddTail() + { + // ³¡¿¡ ºó ¿ø¼Ò¸¦ »ðÀÔÇÏ°í ±× ¿ø¼Ò¸¦ ¹ÝȯÇÑ´Ù. + + ReAlloc((ml_UseSize++)+1); return mp_TypeArr[ml_UseSize-1]; + }/* + Type& AddTail()*/ + + operator Type&() + { + return AddTail(); + }/* + operator Type&()*/ + + + void push_back(TypeArg AR_TypeArg) + { + AddTail(AR_TypeArg); + }/* + void push_back(TypeArg AR_TypeArg)*/ + + Type& push_back() + { + return AddTail(); + }/* + Type& push_back()*/ + + ZCIterator begin() + { + return ZCIterator(*this); + }/* + ZCIterator begin()*/ + + const ZCIterator begin() const + { + return ZCIterator(*this); + }/* + const ZCIterator begin() const*/ + + + template void IterElement(TFunctor AO_Functor) + { + Type* VP_TypeArr = mp_TypeArr; + + __for0(TypeSize, i, ml_UseSize) + { + ZNsMain::CTypeData_T:: + GetObjRef(AO_Functor)(*VP_TypeArr); ++VP_TypeArr; + + /* À§ ÄÚµå·Î ÀÎÇØ¼­, AO_Functor ÀÌ ÇÔ¼öÀÏ ¶§ »ÓÀÌ ¾Æ´Ï¶ó, + operator() ¿¬»êÀÚ¸¦ °¡Áø object Æ÷ÀÎÅÍÀÏ ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. */ + }/* + __for0(TypeSize, i, ml_UseSize)*/ + }/* + template void IterElement(TFunctor AO_Functor)*/ + + template + void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) + { + /*///////////////////////////////////////////////////////////////////////////// + + ¡á TTypeHelp °¡ class ÀÏ °æ¿ì, Å©±â°¡ Ä¿¼­ ÂüÁ¶·Î ³Ñ¾î°¡¾ß ÇÑ´Ù¸é, + + IterElement(myFunctor_obj, myClass_Obj); + + ÀÇ ÇüÅ·ΠȣÃâÇÒ °Ô ¾Æ´Ï¶ó, ZNsMain::ZtCObjectPtr<> À» »ç¿ëÇÏ¿©, + + myClass myClass_Obj; ZNsMain::ZtCObjectPtr myCObjPtr(myClass_Obj); + + ³ª + + IterElement(myFunctor_obj, ZNsMain::ZtCObjectPtr(myClass_Obj)); + + ÇüŸ¦ »ç¿ëÇϸé ÁÁÀ» °Í °°´Ù. -- 2014-06-16 23:11:00 + + /////////////////////////////////////////////////////////////////////////////*/ + + + Type* VP_TypeArr = mp_TypeArr; + + __for0(TypeSize, i, ml_UseSize) + { + ZNsMain::CTypeData_T:: + GetObjRef(AO_Functor)(*VP_TypeArr, AO_TypeHelp); ++VP_TypeArr; + }/* + __for0(TypeSize, i, ml_UseSize)*/ + }/* + template + void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)*/ + + + template + void IterElement(TFunctor AO_Functor, + TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2) + { + /*///////////////////////////////////////////////////////////////////////////// + + ¡á TTypeHelp °¡ class ÀÏ °æ¿ì, Å©±â°¡ Ä¿¼­ ÂüÁ¶·Î ³Ñ¾î°¡¾ß ÇÑ´Ù¸é, + + IterElement(myFunctor_obj, myClass_Obj); + + ÀÇ ÇüÅ·ΠȣÃâÇÒ °Ô ¾Æ´Ï¶ó, ZNsMain::ZtCObjectPtr<> À» »ç¿ëÇÏ¿©, + + myClass myClass_Obj; ZNsMain::ZtCObjectPtr myCObjPtr(myClass_Obj); + + ³ª + + IterElement(myFunctor_obj, ZNsMain::ZtCObjectPtr(myClass_Obj)); + + ÇüŸ¦ »ç¿ëÇϸé ÁÁÀ» °Í °°´Ù. -- 2014-06-16 23:11:00 + + /////////////////////////////////////////////////////////////////////////////*/ + + + Type* VP_TypeArr = mp_TypeArr; + + __for0(TypeSize, i, ml_UseSize) + { + ZNsMain::CTypeData_T::GetObjRef(AO_Functor) + (*VP_TypeArr, AO_TypeHelp1, AO_TypeHelp2); + + ++VP_TypeArr; /////////////////////////////////////// + }/* + __for0(TypeSize, i, ml_UseSize)*/ + }/* + template + void IterElement(TFunctor AO_Functor, + TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2)*/ + + + /*/////////////////////////////////////////////////////////////////////////// + + ¡á IterElement() ¿¹Á¦. + + #include + #include "ZCArray.H" + + using namespace std ; + using namespace ZNsMain; + + int main() + { + std:: ZtCArray myArray; + + myArray.AddTail(10); + myArray.AddTail(20); + myArray.AddTail(30); + myArray.AddTail(40); + + struct StFunctor + { + static void ShowElement(int ArgiValue){cout<<"# Value="< + class ZtCArray ////////////////////////*/ + + + ////////////////////////////////////////////// + + ////////////// end class ZCArray ////////////// + + ////////////////////////////////////////////// + + + + /*//////////////////////////////////////////////////////////////////// + + ¡á class ZtCArrayFixed<> ´Â ¹è¿­ ¸Þ¸ð¸®¸¦ ÀÚü ÇÒ´çÇÏÁö ¾Ê°í, + ÀÌ¹Ì ¿ÜºÎ¿¡¼­ new ³ª Á¤ÀûÀ¸·Î ¼±¾ðµÇ¾î ÀÖ´Â ¹è¿­À» »ç¿ëÇÑ´Ù. + µû¶ó¼­ ZtCArrayFixed<> ³»ºÎ¿¡¼­ ÀÓÀÇ·Î ¹è¿­ Å©±â¸¦ Á¶ÀýÇÒ ¼ö ¾ø´Ù. + + -- 2011-08-05 20:40:00 + + ////////////////////////////////////////////////////////////////////*/ + + template< typename Type, + typename TSize=long + > + class ZtCArrayFixed /////////// + { + public: + typedef Type TypeData; + public: + typedef const Type* const_iterator; + typedef Type* iterator; + private: + Type* mp_TypeArr; + TSize ml_UseSize; + public: + + ZtCArrayFixed() + { + Init(0, 0); + } + ZtCArrayFixed(TypeData* AP_DataArr, TSize AL_ArrSize) + { + Init(AP_DataArr, AL_ArrSize); + } + void Init(TypeData* AP_DataArr, TSize AL_ArrSize) + { + mp_TypeArr=AP_DataArr; + ml_UseSize=AL_ArrSize; + }/* + void Init(TypeData* AP_DataArr,TSize AL_ArrSize)*/ + + TSize size() const{return ml_UseSize;} + + + Type& operator[](TSize AL_Index) + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<<", "<="<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + Type& operator[](TSize AL_Index)*/ + + const Type& operator[](TSize AL_Index) const + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + const Type& operator[](TSize AL_Index) const*/ + + + Type& GetData(TSize AL_Index) + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index] ; + }/* + Type& GetData(TSize AL_Index)*/ + + const Type& GetData(TSize AL_Index) const + { + #ifdef _DEBUG + + if(AL_Index>=ml_UseSize) + { + std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); + fileout<=ml_UseSize"<=ml_UseSize)*/ + + #endif //_DEBUG + + return mp_TypeArr[AL_Index]; + }/* + const Type& GetData(TSize AL_Index) const*/ + + + Type* begin() { return mp_TypeArr; } + const Type* begin() const { return mp_TypeArr; } + + + void MoveNextIter(Type*& ARR_CIterator) const + { + ++ARR_CIterator; + }/* + void MoveNextIter(Type*& ARR_CIterator) const*/ + + void MovePrevIter(iterator& ARR_CIterator) + { + --ARR_CIterator; + }/* + void MovePrevIter(iterator& ARR_CIterator)*/ + + + void MoveNextIter(const_iterator& ARR_CIterator) const + { + ++ARR_CIterator; + }/* + void MoveNextIter(const_iterator& ARR_CIterator) const*/ + + void MovePrevIter(const_iterator& ARR_CIterator) const + { + --ARR_CIterator; + }/* + void MovePrevIter(const_iterator& ARR_CIterator) const*/ + + /*//////////////////////////////////////////////////// + + À§ Äڵ带 ¾Æ·¡·Î ÇÏ¸é ¾ÈµÈ´Ù. + + void MoveNextIter(const iterator& ARR_CIterator) const + { + ++ARR_CIterator; + } + //void MoveNextIter(const iterator& ARR_CIterator) const + + void MovePrevIter(const iterator& ARR_CIterator) const + { + --ARR_CIterator; + } + //void MovePrevIter(const iterator& ARR_CIterator) const + + const iterator ´Â Type const * const ÀÌÁö Type const * °¡ ¾Æ´Ï´Ù. + + -- 2011-08-05 23:49:00 + + ////////////////////////////////////////////////////*/ + + + Type& GetDataInIter(iterator& ARR_CIterator) + { + return *ARR_CIterator; + }/* + Type& GetDataInIter(iterator& ARR_CIterator)*/ + + const Type& GetDataInIter(const_iterator& ARR_CIterator) const + { + return *ARR_CIterator; + }/* + const Type& GetDataInIter(const_iterator& ARR_CIterator) const*/ + + + public: + };/* + template< typename Type, + typename TSize=long + > + class ZtCArrayFixed /////////*/ + +}/* +namespace ZNsMain*/ + + +#endif //__ZTCARRAY_H__ diff --git a/ZCppMain/test.cpp b/ZCppMain/test.cpp index 1252750..719a5fb 100644 --- a/ZCppMain/test.cpp +++ b/ZCppMain/test.cpp @@ -1,6 +1,7 @@ #include +#include "ZtCArray.H" #include "ZtCObjList.H" @@ -36,8 +37,10 @@ int main(int ArgiCnt, char** AppArgu) typedef ZNsMain::ZtCObjList CListByInt; + typedef ZNsMain::ZtCArray CArrayInt ; CListByInt VO_IntList; + CArrayInt VO_IntArr ; VO_IntList.AddTail(10); VO_IntList.AddTail(40); @@ -45,6 +48,12 @@ int main(int ArgiCnt, char** AppArgu) VO_IntList.AddTail(80); VO_IntList.AddTail(90); + VO_IntArr.AddTail(123); + VO_IntArr.AddTail(153); + VO_IntArr.AddTail(543); + VO_IntArr.AddTail(553); + VO_IntArr.AddTail(983); + typedef ZtStTuple ZCTuple; @@ -83,6 +92,7 @@ int main(int ArgiCnt, char** AppArgu) VO_IntList.IterElemRef(ZCShowData2::Exec, VO_CTuple ); VO_CTuple._1=1 ; VO_IntList.IterElement(ZCShowData3::Exec, &VO_CTuple); VO_IntList.IterElement(&VO_CFunctor1 ); + VO_IntArr .IterElement(&VO_CFunctor1 ); return 0; }/*