commit 2025-09-14 12:37 apply ZNsIFaceEx::ZtCFreeHeapCDL<ZNsConst::CI_ListKind_Double> in ZCppMain/ZtCObjList.H
This commit is contained in:
@ -3906,6 +3906,18 @@ namespace ZNsMain
|
||||
public:
|
||||
typedef typename TSnglList::ZCLink ZCLink ;
|
||||
typedef typename TSnglList::TypeSize TypeSize;
|
||||
|
||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
|
||||
■ 만약 ZCLink 의 non-public 멤버에 접근해야 하는 경우,
|
||||
ZCLink 에서 ZtCBody 에 friend 선언을 해줘야 하는 것
|
||||
이 맞겠지만, friend 선언 없이 해야 한다면, ZCLink 와
|
||||
같은 멤버를 가진 class 를 선언하고 그 class 로 강제
|
||||
형변환을 해서 해결하자.
|
||||
|
||||
-- 2025-09-14 12:34
|
||||
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||
public:
|
||||
|
||||
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
|
||||
|
@ -848,11 +848,14 @@ namespace ZNsMain
|
||||
|
||||
/*public :*/
|
||||
protected:
|
||||
ZCLink* mp_HeadLink;
|
||||
TypeSize ml_Size ;
|
||||
ZCLink* mp_HeadLink;
|
||||
TypeSize ml_Size ;
|
||||
ZCFreeHeap mo_FreeObjt;
|
||||
protected:
|
||||
|
||||
|
||||
#if(_CODE_OLD_)
|
||||
|
||||
void OnDelete(ZCLink* AP_CutLink)
|
||||
{
|
||||
if(TypeInit::ZEUseFini<1) return;
|
||||
@ -906,6 +909,8 @@ namespace ZNsMain
|
||||
}
|
||||
/*############################################################*/
|
||||
|
||||
#endif //_CODE_OLD_
|
||||
|
||||
|
||||
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypeSize AL_PosStd)
|
||||
{
|
||||
@ -914,7 +919,9 @@ namespace ZNsMain
|
||||
|
||||
if(AP_LinkStd==0)
|
||||
{
|
||||
#if(_CODE_OLD_)
|
||||
OnInsert(1, 1, AP_LinkInsert);
|
||||
#endif
|
||||
|
||||
if(++ml_Size==1)
|
||||
{
|
||||
@ -935,7 +942,11 @@ namespace ZNsMain
|
||||
}
|
||||
else
|
||||
{
|
||||
OnInsert(AL_PosStd+1, 1, AP_LinkInsert); ++ml_Size;
|
||||
#if(_CODE_OLD_)
|
||||
OnInsert(AL_PosStd+1, 1, AP_LinkInsert);
|
||||
#endif
|
||||
|
||||
++ml_Size;
|
||||
|
||||
AP_LinkInsert->mp_NextLink = AP_LinkStd->mp_NextLink ;
|
||||
AP_LinkStd ->mp_NextLink = AP_LinkInsert ;
|
||||
@ -972,6 +983,7 @@ namespace ZNsMain
|
||||
if(this == &AO_CObjList ) return;
|
||||
if(AO_CObjList.ml_Size<1) return;
|
||||
|
||||
#if(_CODE_OLD_)
|
||||
AO_CObjList.OnDelete ////////////////////////
|
||||
(
|
||||
AO_CObjList.mp_HeadLink , 1 ,
|
||||
@ -984,6 +996,7 @@ namespace ZNsMain
|
||||
this->ml_Size+1, AO_CObjList.ml_Size, AO_CObjList.mp_HeadLink
|
||||
);
|
||||
/*/////////////////////////////////////////*/
|
||||
#endif //_CODE_OLD_
|
||||
|
||||
if(AP_LinkStd==0)
|
||||
{
|
||||
@ -1024,7 +1037,9 @@ namespace ZNsMain
|
||||
|
||||
protected: ZCLink* CutLink(ZCLink* AP_CutLink)
|
||||
{
|
||||
#if(_CODE_OLD_)
|
||||
OnDelete(AP_CutLink);
|
||||
#endif
|
||||
|
||||
if(AP_CutLink==mp_HeadLink)
|
||||
{
|
||||
@ -1052,7 +1067,9 @@ namespace ZNsMain
|
||||
|
||||
ZCLink* CutLink(ZCLink* AP_CutLink, TypeSize AL_CutPos)
|
||||
{
|
||||
#if(_CODE_OLD_)
|
||||
OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos);
|
||||
#endif
|
||||
|
||||
if(AL_CutPos==1) // 첫째 링크를 삭제.
|
||||
{
|
||||
@ -1107,8 +1124,9 @@ namespace ZNsMain
|
||||
|
||||
#endif // _DEBUG
|
||||
|
||||
|
||||
#if(_CODE_OLD_)
|
||||
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
|
||||
#endif
|
||||
|
||||
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // 모든 링크를 삭제할 때.
|
||||
{
|
||||
@ -1243,9 +1261,8 @@ namespace ZNsMain
|
||||
ZCLink* VP_TailLink=0;
|
||||
|
||||
GetManyLink
|
||||
(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
||||
ZCLink::MakeCircle
|
||||
(VP_HeadLink , VP_TailLink );
|
||||
(AL_DefaultSize, RR(VP_HeadLink), RR(VP_TailLink));
|
||||
ZCLink::MakeCircle( VP_HeadLink, VP_TailLink );
|
||||
|
||||
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
|
||||
ARR_StoreList.ml_Size =AL_DefaultSize;
|
||||
@ -1257,26 +1274,13 @@ namespace ZNsMain
|
||||
|
||||
|
||||
void GetManyLink(
|
||||
TypeSize AL_LinkSize , ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
|
||||
TypeSize AL_LinkSize, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
ZNsMain::ZCCheckAlloc::ZCAllowAlloc VO_CAllowAllocObj;
|
||||
#endif //_DEBUG
|
||||
|
||||
APR_HeadLink=new ZCLink; ZCLink* VP_TempLink=APR_HeadLink;
|
||||
|
||||
for(TypeSize i=2; i<=AL_LinkSize; ++i)
|
||||
{
|
||||
ZCLink::JoinLink(VP_TempLink, new ZCLink);
|
||||
|
||||
VP_TempLink=VP_TempLink->mp_NextLink;
|
||||
}/*
|
||||
for(TypeSize i=2; i<=AL_LinkSize; ++i)*/
|
||||
|
||||
APR_TailLink=VP_TempLink;
|
||||
mo_FreeObjt.SendFreeOut
|
||||
(AL_LinkSize, RR(APR_HeadLink), RR(APR_TailLink));
|
||||
}/*
|
||||
void GetManyLink(
|
||||
TypeSize AL_LinkSize , ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const */
|
||||
TypeSize AL_LinkSize, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const */
|
||||
|
||||
|
||||
void GetManyLinkCopy /*#######################################################*/
|
||||
@ -1288,51 +1292,8 @@ namespace ZNsMain
|
||||
{
|
||||
// AL_FarNum 의 절대값 + 1 개의 링크가 생성된다.
|
||||
|
||||
#ifdef _DEBUG
|
||||
ZNsMain::ZCCheckAlloc::ZCAllowAlloc VO_CAllowAllocObj;
|
||||
#endif //_DEBUG
|
||||
|
||||
if(AL_FarNum>0)
|
||||
{
|
||||
APR_HeadLink = new
|
||||
ZCLink(AP_CopyLink->GetData());
|
||||
|
||||
ZCLink* VP_TempLink=APR_HeadLink;
|
||||
|
||||
for(TypeSize 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;
|
||||
}
|
||||
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
APR_TailLink=VP_TempLink;
|
||||
}
|
||||
else //AL_FarNum<=0
|
||||
{
|
||||
APR_TailLink=
|
||||
new ZCLink( AP_CopyLink->GetData() );
|
||||
|
||||
ZCLink* VP_TempLink=APR_TailLink;
|
||||
|
||||
for(TypeSize 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;
|
||||
}
|
||||
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
APR_HeadLink=VP_TempLink;
|
||||
}/*
|
||||
else //AL_FarNum<=0*/
|
||||
mo_FreeObjt.SendFreeOutCopy
|
||||
(AP_CopyLink, AL_FarNum, RR(APR_HeadLink), RR(APR_TailLink));
|
||||
}/*
|
||||
void GetManyLinkCopy ###########################################################
|
||||
(
|
||||
@ -1363,6 +1324,9 @@ namespace ZNsMain
|
||||
virtual ~ZtCObjList()
|
||||
{
|
||||
DeleteAll();
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.DeleteHeap();
|
||||
#endif
|
||||
}/*
|
||||
virtual ~ZtCObjList()*/
|
||||
|
||||
@ -1377,15 +1341,15 @@ namespace ZNsMain
|
||||
{
|
||||
AddDefault(rhs.ml_Size-ml_Size, ml_Size+1);
|
||||
|
||||
ZCLink* pRhsLink=rhs.mp_HeadLink;
|
||||
ZCLink* pLhsLink= mp_HeadLink;
|
||||
ZCLink* pRhsLink = rhs.mp_HeadLink;
|
||||
ZCLink* pLhsLink = mp_HeadLink;
|
||||
|
||||
__for1(TypeSize, i, ml_Size)
|
||||
{
|
||||
pLhsLink->GetData()=pRhsLink->GetData();
|
||||
**pLhsLink = ** pRhsLink ;
|
||||
|
||||
pLhsLink=pLhsLink->mp_NextLink;
|
||||
pRhsLink=pRhsLink->mp_NextLink;
|
||||
pLhsLink = pLhsLink->mp_NextLink;
|
||||
pRhsLink = pRhsLink->mp_NextLink;
|
||||
}/*
|
||||
__for1(TypeSize, i, ml_Size)*/
|
||||
}
|
||||
@ -1479,12 +1443,19 @@ namespace ZNsMain
|
||||
Type& operator[](TypeSize AL_Index) const*/
|
||||
|
||||
|
||||
ZCFreeHeap& GetCFreeHeap()
|
||||
{
|
||||
return mo_FreeObjt;
|
||||
}/*
|
||||
ZCFreeHeap& GetCFreeHeap()*/
|
||||
|
||||
|
||||
TypeSize Find /*###############################################################*/
|
||||
(
|
||||
TypeArg AR_SearchType ,
|
||||
TypeSize AL_FirstFindIndex =1 ,
|
||||
bool AB_DoFindFromFront=true
|
||||
) const
|
||||
) const
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AB_DoFindFromFront==true 이면 AL_FirstFindIndex 번째 링크부터
|
||||
@ -1663,6 +1634,13 @@ namespace ZNsMain
|
||||
{
|
||||
if(mp_HeadLink==0) return *this;
|
||||
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( ml_Size, mp_HeadLink, mp_HeadLink->mp_PrevLink );
|
||||
|
||||
mp_HeadLink= 0; ml_Size= 0; return *this;
|
||||
|
||||
|
||||
#if(_CODE_OLD_)
|
||||
OnDelete /*============================*/
|
||||
(
|
||||
mp_HeadLink , 1 ,
|
||||
@ -1682,6 +1660,7 @@ namespace ZNsMain
|
||||
while(--ml_Size>0);
|
||||
|
||||
mp_HeadLink =0; return *this;
|
||||
#endif //_CODE_OLD_
|
||||
}/*
|
||||
ZtCObjList& DeleteAll()*/
|
||||
|
||||
@ -1692,6 +1671,13 @@ namespace ZNsMain
|
||||
ZtCObjList& clear()*/
|
||||
|
||||
|
||||
ZtCObjList& DeleteHeap()
|
||||
{
|
||||
mo_FreeObjt.DeleteHeap(); return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteHeap()*/
|
||||
|
||||
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
@ -1710,7 +1696,13 @@ namespace ZNsMain
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
delete this->CutLink(AP_DeleteLink); return *this;
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(AP_DeleteLink) );
|
||||
#else
|
||||
delete this->CutLink(AP_DeleteLink);
|
||||
#endif
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
|
||||
|
||||
@ -1732,7 +1724,13 @@ namespace ZNsMain
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
delete this->CutLink(AP_DeleteLink, AL_DeletePos); return *this;
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(AP_DeleteLink, AL_DeletePos) );
|
||||
#else
|
||||
delete this->CutLink(AP_DeleteLink, AL_DeletePos);
|
||||
#endif
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypeSize AL_DeletePos)*/
|
||||
|
||||
@ -1761,7 +1759,12 @@ namespace ZNsMain
|
||||
ZtCObjList& DeleteHead()
|
||||
{
|
||||
if(ml_Size>0)
|
||||
delete this->CutLink(mp_HeadLink);
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(mp_HeadLink) );
|
||||
#else
|
||||
delete this->CutLink(mp_HeadLink) ;
|
||||
#endif
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
@ -1773,7 +1776,12 @@ namespace ZNsMain
|
||||
{
|
||||
if(this->size()<1) return *this;
|
||||
|
||||
delete this->CutLink(mp_HeadLink);
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(mp_HeadLink) );
|
||||
#else
|
||||
delete this->CutLink(mp_HeadLink) ;
|
||||
#endif
|
||||
}/*
|
||||
__for1(TypeSize, i, AI_DeleteCnt)*/
|
||||
|
||||
@ -1784,7 +1792,12 @@ namespace ZNsMain
|
||||
ZtCObjList& DeleteTail()
|
||||
{
|
||||
if(ml_Size>0)
|
||||
delete this->CutLink(mp_HeadLink->mp_PrevLink);
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(mp_HeadLink->mp_PrevLink) );
|
||||
#else
|
||||
delete this->CutLink(mp_HeadLink->mp_PrevLink) ;
|
||||
#endif
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
@ -1800,7 +1813,7 @@ namespace ZNsMain
|
||||
ZtCObjList VO_StoreList; MakeDefault(
|
||||
AL_DefaultSize, VO_StoreList);
|
||||
|
||||
ZCLink* VP_HeadLink=VO_StoreList.mp_HeadLink;
|
||||
ZCLink* VP_HeadLink= VO_StoreList.mp_HeadLink;
|
||||
|
||||
if(AL_AddPos==1)
|
||||
JoinAfter(VO_StoreList, 0 , 1 );
|
||||
@ -1814,10 +1827,14 @@ namespace ZNsMain
|
||||
ZtCObjList& AddHead(TypeArg AR_Type)
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewNode = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewNode = new ZCLink ;
|
||||
#endif
|
||||
|
||||
#if(_CODE_NEW_)
|
||||
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
|
||||
{
|
||||
ZCLink* VP_NewNode = new ZCLink;
|
||||
|
||||
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
|
||||
|
||||
JoinAfter(VP_NewNode, 0, 0); return *this;
|
||||
@ -1825,13 +1842,15 @@ namespace ZNsMain
|
||||
////////////////////////////////////////////////////
|
||||
#endif
|
||||
|
||||
JoinAfter(new ZCLink(AR_Type), 0, 0); return *this;
|
||||
**VP_NewNode = AR_Type;
|
||||
|
||||
JoinAfter(VP_NewNode, 0, 0); return *this;
|
||||
}/*
|
||||
ZtCObjList& AddHead(TypeArg AR_Type)*/
|
||||
|
||||
ZtCObjList& AddHead(const ZtCObjList& rhs)
|
||||
{
|
||||
if(this==&rhs) return *this;
|
||||
if(this==&rhs) return *this ;
|
||||
|
||||
ZtCObjList VO_StoreList(rhs);
|
||||
|
||||
@ -1843,10 +1862,14 @@ namespace ZNsMain
|
||||
ZtCObjList& AddTail(TypeArg AR_Type)
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewNode = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewNode = new ZCLink ;
|
||||
#endif
|
||||
|
||||
#if(_CODE_NEW_)
|
||||
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
|
||||
{
|
||||
ZCLink* VP_NewNode = new ZCLink;
|
||||
|
||||
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
|
||||
|
||||
JoinAfter(VP_NewNode, GetTailLinkPtr(), 0); return *this;
|
||||
@ -1854,13 +1877,17 @@ namespace ZNsMain
|
||||
////////////////////////////////////////////////////
|
||||
#endif
|
||||
|
||||
JoinAfter(new ZCLink(AR_Type), GetTailLinkPtr(), ml_Size); return *this;
|
||||
**VP_NewNode = AR_Type;
|
||||
|
||||
JoinAfter
|
||||
(VP_NewNode, GetTailLinkPtr(), ml_Size);
|
||||
return *this ;
|
||||
}/*
|
||||
ZtCObjList& AddTail(TypeArg AR_Type)*/
|
||||
|
||||
ZtCObjList& AddTail(const ZtCObjList& rhs)
|
||||
{
|
||||
ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList);
|
||||
ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList);
|
||||
}/*
|
||||
ZtCObjList& AddTail(const ZtCObjList& rhs)*/
|
||||
|
||||
@ -1874,11 +1901,23 @@ namespace ZNsMain
|
||||
///////////////////////////////////////////////////////////////////*/
|
||||
|
||||
ZCLink* AddHeadDefault()
|
||||
{ ZCLink* VP_NewLink = new ZCLink ;
|
||||
JoinAfter(VP_NewLink, 0 /*/////////*/ , 0 ); return VP_NewLink; }
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, 0 /*/////////*/ , 0 ); return VP_NewLink;
|
||||
}
|
||||
ZCLink* AddTailDefault()
|
||||
{ ZCLink* VP_NewLink = new ZCLink ;
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr(), ml_Size); return VP_NewLink; }
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr(), ml_Size); return VP_NewLink;
|
||||
}
|
||||
|
||||
ZCLink* AddHeadDef(){ return AddHeadDefault(); }
|
||||
ZCLink* AddTailDef(){ return AddTailDefault(); }
|
||||
|
@ -1187,8 +1187,9 @@ namespace ZNsMain
|
||||
}
|
||||
else
|
||||
{
|
||||
VP_AddLink->mp_NextLink =mp_HeadLink;
|
||||
mp_HeadLink=VP_AddLink;
|
||||
ZCLink::JoinLink(VP_AddLink, mp_HeadLink);
|
||||
|
||||
mp_HeadLink = VP_AddLink ;
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
@ -1205,8 +1206,9 @@ namespace ZNsMain
|
||||
}
|
||||
else
|
||||
{
|
||||
VP_AddLink->mp_NextLink =mp_HeadLink;
|
||||
mp_HeadLink=VP_AddLink;
|
||||
ZCLink::JoinLink(VP_AddLink, mp_HeadLink);
|
||||
|
||||
mp_HeadLink = VP_AddLink ;
|
||||
}
|
||||
//else
|
||||
}/*
|
||||
@ -1233,8 +1235,9 @@ namespace ZNsMain
|
||||
}
|
||||
else
|
||||
{
|
||||
mp_TailLink->mp_NextLink=VP_AddLink ;
|
||||
mp_TailLink=mp_TailLink->mp_NextLink;
|
||||
ZCLink::JoinLink(mp_TailLink, VP_AddLink);
|
||||
|
||||
mp_TailLink = VP_AddLink;
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
@ -1251,8 +1254,9 @@ namespace ZNsMain
|
||||
}
|
||||
else
|
||||
{
|
||||
mp_TailLink->mp_NextLink = VP_AddLink ;
|
||||
mp_TailLink=mp_TailLink->mp_NextLink;
|
||||
ZCLink::JoinLink(mp_TailLink, VP_AddLink);
|
||||
|
||||
mp_TailLink = VP_AddLink ;
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
|
Reference in New Issue
Block a user