commit 2025-10-06 11:48 add GetLinkOpt() : ZCppMain/ZtCObjList.H
This commit is contained in:
@ -4509,13 +4509,18 @@ namespace ZNsMain
|
|||||||
TypeData& operator* (){return *mp_TypeData;}
|
TypeData& operator* (){return *mp_TypeData;}
|
||||||
operator TypeData& (){return *mp_TypeData;}
|
operator TypeData& (){return *mp_TypeData;}
|
||||||
|
|
||||||
|
const TypeData* operator->() const{return mp_TypeData;}
|
||||||
|
const TypeData& operator* () const{return *mp_TypeData;}
|
||||||
|
operator const TypeData& () const{return *mp_TypeData;}
|
||||||
|
|
||||||
ZtCObjOpt& operator=(const ZtCObjOpt& rhs)
|
ZtCObjOpt& operator=(const ZtCObjOpt& rhs)
|
||||||
{ mp_TypeData=rhs.mp_TypeData; return *this; }
|
{ mp_TypeData=rhs.mp_TypeData; return *this; }
|
||||||
|
|
||||||
operator bool () const{return mp_TypeData!=0;}
|
operator bool () const{return mp_TypeData!=0;}
|
||||||
bool has_value () const{return mp_TypeData!=0;}
|
bool has_value () const{return mp_TypeData!=0;}
|
||||||
|
|
||||||
TypeData& value() const{return *mp_TypeData ;}
|
/***/ TypeData& value() {return *mp_TypeData;}
|
||||||
|
const TypeData& value() const{return *mp_TypeData;}
|
||||||
|
|
||||||
public :
|
public :
|
||||||
};/*
|
};/*
|
||||||
|
@ -815,7 +815,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
|
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
|
||||||
public :
|
public :
|
||||||
typedef ZtCObjOpt<TCLink> ZCObjOpt;
|
typedef ZtCObjOpt<TCLink> ZCDataOpt;
|
||||||
|
typedef ZtCObjOpt<TCLink> ZCLinkOpt;
|
||||||
public :
|
public :
|
||||||
typedef TCLink ZCLink ;
|
typedef TCLink ZCLink ;
|
||||||
typedef TCLink TypeData;
|
typedef TCLink TypeData;
|
||||||
@ -1493,16 +1494,16 @@ namespace ZNsMain
|
|||||||
void clear(){DeleteAll();}
|
void clear(){DeleteAll();}
|
||||||
|
|
||||||
|
|
||||||
ZCObjOpt GetHeadOpt(){ return ZCObjOpt(mp_HeadLink); }
|
ZCDataOpt GetHeadOpt(){ return ZCDataOpt(mp_HeadLink); }
|
||||||
ZCObjOpt GetTailOpt(){ return ZCObjOpt(mp_TailLink); }
|
ZCDataOpt GetTailOpt(){ return ZCDataOpt(mp_TailLink); }
|
||||||
|
|
||||||
ZCObjOpt GetObjOpt(TypeSize AI_Index)
|
ZCDataOpt GetObjOpt(TypeSize AI_Index)
|
||||||
{
|
{
|
||||||
if(ml_LinkSize<1) return ZCObjOpt(0);
|
if(ml_LinkSize<1) return ZCDataOpt(0);
|
||||||
|
|
||||||
return ZCObjOpt( (*mp_HeadLink)+(AI_Index-1) );
|
return ZCDataOpt( (*mp_HeadLink)+(AI_Index-1) );
|
||||||
}/*
|
}/*
|
||||||
ZCObjOpt GetObjOpt(TypeSize AI_Index)*/
|
ZCDataOpt GetObjOpt(TypeSize AI_Index)*/
|
||||||
|
|
||||||
|
|
||||||
ZCLink& AddHead(){ return JoinAfter (*NewLink(), 0); }
|
ZCLink& AddHead(){ return JoinAfter (*NewLink(), 0); }
|
||||||
@ -1579,7 +1580,7 @@ namespace ZNsMain
|
|||||||
ZCLink& AR_CutTail,
|
ZCLink& AR_CutTail,
|
||||||
TypeSize AI_CutSize,
|
TypeSize AI_CutSize,
|
||||||
ZtCLinkList& rhs ,
|
ZtCLinkList& rhs ,
|
||||||
ZCObjOpt AO_ObjOpt
|
ZCDataOpt AO_ObjOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -1598,7 +1599,7 @@ namespace ZNsMain
|
|||||||
ZCLink& AR_CutTail,
|
ZCLink& AR_CutTail,
|
||||||
TypeSize AI_CutSize,
|
TypeSize AI_CutSize,
|
||||||
ZtCLinkList& rhs ,
|
ZtCLinkList& rhs ,
|
||||||
ZCObjOpt AO_ObjOpt
|
ZCDataOpt AO_ObjOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
@ -800,6 +800,9 @@ namespace ZNsMain
|
|||||||
typedef typename TFeeeHeap::
|
typedef typename TFeeeHeap::
|
||||||
template ZtCBody<ZtCObjList> ZCFreeHeap;
|
template ZtCBody<ZtCObjList> ZCFreeHeap;
|
||||||
public:
|
public:
|
||||||
|
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
|
||||||
|
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
class ZCLink : public TypeAlloc
|
class ZCLink : public TypeAlloc
|
||||||
@ -1509,6 +1512,26 @@ namespace ZNsMain
|
|||||||
const ZCLink* GetTailLinkPtr() const*/
|
const ZCLink* GetTailLinkPtr() const*/
|
||||||
|
|
||||||
|
|
||||||
|
ZCLinkOpt GetHeadLinkOpt(){return ZCLinkOpt(mp_HeadLink);}
|
||||||
|
ZCLinkOpt GetTailLinkOpt()
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||||
|
|
||||||
|
return ZCLinkOpt(*mp_HeadLink->mp_PrevLink);
|
||||||
|
}/*
|
||||||
|
ZCLinkOpt GetTailLinkOpt()*/
|
||||||
|
|
||||||
|
const ZCLinkOpt GetHeadLinkOpt() const{return ZCLinkOpt(mp_HeadLink);}
|
||||||
|
const ZCLinkOpt GetTailLinkOpt() const
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||||
|
|
||||||
|
return ZCLinkOpt(*mp_HeadLink->mp_PrevLink);
|
||||||
|
}/*
|
||||||
|
const ZCLinkOpt GetTailLinkOpt()*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Type& operator[](TypeSize AL_Index)
|
Type& operator[](TypeSize AL_Index)
|
||||||
{
|
{
|
||||||
// [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다.
|
// [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다.
|
||||||
@ -1690,21 +1713,6 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZCLink* GetLinkPtr(TypeSize AL_Index)
|
ZCLink* GetLinkPtr(TypeSize AL_Index)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
|
||||||
|
|
||||||
if(AL_Index<1 || AL_Index>ml_LinkSize)
|
|
||||||
{
|
|
||||||
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|
||||||
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|
||||||
fileout<<"Error In 'ZCLink* GetLinkPtr(TypeSize AL_Index)' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|
||||||
fileout.close();
|
|
||||||
|
|
||||||
::exit(1); return 0;
|
|
||||||
}/*
|
|
||||||
if(AL_Index<1 || AL_Index>ml_LinkSize)*/
|
|
||||||
|
|
||||||
#endif // _DEBUG
|
|
||||||
|
|
||||||
TypeSize VI_LeftDistance =AL_Index-1 ;
|
TypeSize VI_LeftDistance =AL_Index-1 ;
|
||||||
TypeSize VI_RightDistance=ml_LinkSize-AL_Index+1;
|
TypeSize VI_RightDistance=ml_LinkSize-AL_Index+1;
|
||||||
TypeSize VI_ShortDistance=
|
TypeSize VI_ShortDistance=
|
||||||
@ -1716,21 +1724,6 @@ namespace ZNsMain
|
|||||||
|
|
||||||
const ZCLink* GetLinkPtr(TypeSize AL_Index) const // or 'ZCLink const * const GetLinkPtr(TypeSize AL_Index) const'
|
const ZCLink* GetLinkPtr(TypeSize AL_Index) const // or 'ZCLink const * const GetLinkPtr(TypeSize AL_Index) const'
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
|
||||||
|
|
||||||
if(AL_Index<1 || AL_Index>ml_LinkSize)
|
|
||||||
{
|
|
||||||
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|
||||||
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|
||||||
fileout<<"Error In 'const ZCLink* GetLinkPtr(TypeSize AL_Index) const' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|
||||||
fileout.close();
|
|
||||||
|
|
||||||
::exit(1); return 0;
|
|
||||||
}/*
|
|
||||||
if(AL_Index<1 || AL_Index>ml_LinkSize)*/
|
|
||||||
|
|
||||||
#endif // _DEBUG
|
|
||||||
|
|
||||||
TypeSize VI_LeftDistance = AL_Index-1 ;
|
TypeSize VI_LeftDistance = AL_Index-1 ;
|
||||||
TypeSize VI_RightDistance= ml_LinkSize -AL_Index+1;
|
TypeSize VI_RightDistance= ml_LinkSize -AL_Index+1;
|
||||||
TypeSize VI_ShortDistance=
|
TypeSize VI_ShortDistance=
|
||||||
@ -1741,6 +1734,24 @@ namespace ZNsMain
|
|||||||
const ZCLink* GetLinkPtr(TypeSize AL_Index) const*/
|
const ZCLink* GetLinkPtr(TypeSize AL_Index) const*/
|
||||||
|
|
||||||
|
|
||||||
|
ZCLinkOpt GetLinkOpt(TypeSize AL_Index)
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||||
|
|
||||||
|
return ZCLinkOpt(*GetLinkPtr(AL_Index));
|
||||||
|
}/*
|
||||||
|
ZCLinkOpt GetLinkOpt(TypeSize AL_Index)*/
|
||||||
|
|
||||||
|
const ZCLinkOpt GetLinkOpt(TypeSize AL_Index) const
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||||
|
|
||||||
|
return ZCLinkOpt(*GetLinkPtr(AL_Index));
|
||||||
|
}/*
|
||||||
|
const ZCLinkOpt GetLinkOpt(TypeSize AL_Index) const*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ZtCObjList& DeleteAll()
|
ZtCObjList& DeleteAll()
|
||||||
{
|
{
|
||||||
if(mp_HeadLink==0) return *this;
|
if(mp_HeadLink==0) return *this;
|
||||||
@ -2240,6 +2251,55 @@ namespace ZNsMain
|
|||||||
const Type& GetTailData() const*/
|
const Type& GetTailData() const*/
|
||||||
|
|
||||||
|
|
||||||
|
ZCDataOpt GetHeadDataOpt()
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt(**mp_HeadLink);
|
||||||
|
}/*
|
||||||
|
ZCDataOpt GetHeadDataOpt()*/
|
||||||
|
ZCDataOpt GetTailDataOpt()
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt(**mp_HeadLink->mp_PrevLink);
|
||||||
|
}/*
|
||||||
|
ZCDataOpt GetTailDataOpt()*/
|
||||||
|
|
||||||
|
|
||||||
|
const ZCDataOpt GetHeadDataOpt() const
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt(**mp_HeadLink);
|
||||||
|
}/*
|
||||||
|
const ZCDataOpt GetHeadDataOpt() const*/
|
||||||
|
const ZCDataOpt GetTailDataOpt() const
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt(**mp_HeadLink->mp_PrevLink);
|
||||||
|
}/*
|
||||||
|
const ZCDataOpt GetTailDataOpt() const*/
|
||||||
|
|
||||||
|
|
||||||
|
ZCDataOpt GetDataOpt(TypeSize AI_Index)
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt( GetLinkPtr(AI_Index)->GetData() );
|
||||||
|
}/*
|
||||||
|
ZCDataOpt GetDataOpt(TypeSize AI_Index)*/
|
||||||
|
|
||||||
|
const ZCDataOpt GetDataOpt(TypeSize AI_Index) const
|
||||||
|
{
|
||||||
|
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||||
|
|
||||||
|
return ZCDataOpt( GetLinkPtr(AI_Index)->GetData() );
|
||||||
|
}/*
|
||||||
|
const ZCDataOpt GetDataOpt(TypeSize AI_Index) const*/
|
||||||
|
|
||||||
|
|
||||||
Type& front(){return GetHeadData();}
|
Type& front(){return GetHeadData();}
|
||||||
Type& back (){return GetTailData();}
|
Type& back (){return GetTailData();}
|
||||||
|
|
||||||
|
@ -36,6 +36,12 @@ namespace ZNsMain
|
|||||||
typedef CStringList1::ZCLink ZCLink1;
|
typedef CStringList1::ZCLink ZCLink1;
|
||||||
typedef CStringList2::ZCLink ZCLink2;
|
typedef CStringList2::ZCLink ZCLink2;
|
||||||
|
|
||||||
|
typedef CStringList1::ZCLinkOpt ZCLinkOpt1;
|
||||||
|
typedef CStringList2::ZCLinkOpt ZCLinkOpt2;
|
||||||
|
|
||||||
|
typedef CStringList1::ZCDataOpt ZCDataOpt1;
|
||||||
|
typedef CStringList2::ZCDataOpt ZCDataOpt2;
|
||||||
|
|
||||||
|
|
||||||
static void ShowDataInNode(const CStringBase& AR_Data)
|
static void ShowDataInNode(const CStringBase& AR_Data)
|
||||||
{
|
{
|
||||||
@ -104,6 +110,16 @@ namespace ZNsMain
|
|||||||
CStringList1 VO_ListOfStr10 ;
|
CStringList1 VO_ListOfStr10 ;
|
||||||
CStringList2 VO_ListOfStr20 ;
|
CStringList2 VO_ListOfStr20 ;
|
||||||
|
|
||||||
|
ZCDataOpt1 VO_ZCDataOpt1 = VO_ListOfStr10.GetHeadDataOpt() ;
|
||||||
|
ZCLinkOpt1 VO_ZCLinkOpt1 = VO_ListOfStr10.GetTailLinkOpt() ;
|
||||||
|
|
||||||
|
if(bool(VO_ZCDataOpt1))
|
||||||
|
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
|
||||||
|
else cout<<"# VO_ListOfStr10's head data none "<<endl;
|
||||||
|
if(bool(VO_ZCLinkOpt1))
|
||||||
|
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
|
||||||
|
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
|
||||||
|
|
||||||
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
|
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
|
||||||
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
|
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
|
||||||
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
|
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
|
||||||
@ -112,6 +128,18 @@ namespace ZNsMain
|
|||||||
|
|
||||||
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
|
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
VO_ZCDataOpt1 = VO_ListOfStr10.GetHeadDataOpt() ;
|
||||||
|
VO_ZCLinkOpt1 = VO_ListOfStr10.GetTailLinkOpt() ;
|
||||||
|
|
||||||
|
if(bool(VO_ZCDataOpt1))
|
||||||
|
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
|
||||||
|
else cout<<"# VO_ListOfStr10's head data none "<<endl;
|
||||||
|
if(bool(VO_ZCLinkOpt1))
|
||||||
|
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
|
||||||
|
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
|
||||||
|
|
||||||
|
|
||||||
cout<<"# 1th IterElement ####" <<endl;
|
cout<<"# 1th IterElement ####" <<endl;
|
||||||
{
|
{
|
||||||
VO_ListOfStr10.IterElement(&ShowDataInNode);
|
VO_ListOfStr10.IterElement(&ShowDataInNode);
|
||||||
|
Reference in New Issue
Block a user