commit 2025-10-06 11:48 add GetLinkOpt() : ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-06 11:48:10 +09:00
parent 2272742d8f
commit b5cf36be19
4 changed files with 134 additions and 40 deletions

View File

@ -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 :
};/*

View File

@ -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
)
/*#####################################################################*/

View File

@ -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();}

View File

@ -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);