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;}
|
||||
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)
|
||||
{ mp_TypeData=rhs.mp_TypeData; return *this; }
|
||||
|
||||
operator bool () 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 :
|
||||
};/*
|
||||
|
@ -815,7 +815,8 @@ namespace ZNsMain
|
||||
|
||||
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
|
||||
public :
|
||||
typedef ZtCObjOpt<TCLink> ZCObjOpt;
|
||||
typedef ZtCObjOpt<TCLink> ZCDataOpt;
|
||||
typedef ZtCObjOpt<TCLink> ZCLinkOpt;
|
||||
public :
|
||||
typedef TCLink ZCLink ;
|
||||
typedef TCLink TypeData;
|
||||
@ -1493,16 +1494,16 @@ namespace ZNsMain
|
||||
void clear(){DeleteAll();}
|
||||
|
||||
|
||||
ZCObjOpt GetHeadOpt(){ return ZCObjOpt(mp_HeadLink); }
|
||||
ZCObjOpt GetTailOpt(){ return ZCObjOpt(mp_TailLink); }
|
||||
ZCDataOpt GetHeadOpt(){ return ZCDataOpt(mp_HeadLink); }
|
||||
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); }
|
||||
@ -1579,7 +1580,7 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCLinkList& rhs ,
|
||||
ZCObjOpt AO_ObjOpt
|
||||
ZCDataOpt AO_ObjOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
@ -1598,7 +1599,7 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCLinkList& rhs ,
|
||||
ZCObjOpt AO_ObjOpt
|
||||
ZCDataOpt AO_ObjOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
@ -800,6 +800,9 @@ namespace ZNsMain
|
||||
typedef typename TFeeeHeap::
|
||||
template ZtCBody<ZtCObjList> ZCFreeHeap;
|
||||
public:
|
||||
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
|
||||
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
||||
public:
|
||||
|
||||
|
||||
class ZCLink : public TypeAlloc
|
||||
@ -1509,6 +1512,26 @@ namespace ZNsMain
|
||||
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)
|
||||
{
|
||||
// [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다.
|
||||
@ -1690,21 +1713,6 @@ namespace ZNsMain
|
||||
|
||||
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_RightDistance=ml_LinkSize-AL_Index+1;
|
||||
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'
|
||||
{
|
||||
#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_RightDistance= ml_LinkSize -AL_Index+1;
|
||||
TypeSize VI_ShortDistance=
|
||||
@ -1741,6 +1734,24 @@ namespace ZNsMain
|
||||
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()
|
||||
{
|
||||
if(mp_HeadLink==0) return *this;
|
||||
@ -2240,6 +2251,55 @@ namespace ZNsMain
|
||||
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& back (){return GetTailData();}
|
||||
|
||||
|
@ -36,6 +36,12 @@ namespace ZNsMain
|
||||
typedef CStringList1::ZCLink ZCLink1;
|
||||
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)
|
||||
{
|
||||
@ -104,6 +110,16 @@ namespace ZNsMain
|
||||
CStringList1 VO_ListOfStr10 ;
|
||||
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 40"));
|
||||
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
|
||||
@ -112,6 +128,18 @@ namespace ZNsMain
|
||||
|
||||
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;
|
||||
{
|
||||
VO_ListOfStr10.IterElement(&ShowDataInNode);
|
||||
|
Reference in New Issue
Block a user