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

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