Files
RepoMain/ZCppMain/ZMainCGI.H

629 lines
23 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __ZNSMAIN__ZMAIN_CGI_H__
#define __ZNSMAIN__ZMAIN_CGI_H__
#include "ZCppMain/ZMainHead.H"
#include "ZCppMain/ZMainEnc.H"
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCObjAVL.H"
#include "ZCppMain/ZtCLoadXml.H"
#include "ZCppMain/ZtCLoadDataBlock.H"
namespace ZNsMain
{
namespace ZNsCGI
{
namespace NsInterface
{
}/*
namespace NsInterface*/
namespace NsIFace
{
using namespace NsInterface;
}/*
namespace NsIFace*/
namespace ZNsBase
{
template<typename TStringData> class ZtCEnvVar
{
protected:
TStringData mo_CStrEnvName ;
TStringData mo_CStrEnvValue;
public :
ZtCEnvVar()
{
}/*
ZtCEnvVar()*/
ZtCEnvVar(const TStringData& AR_CStrEnvName)
{
mo_CStrEnvName = AR_CStrEnvName;
}/*
ZtCEnvVar(const TStringData& AR_CStrEnvName)*/
ZtCEnvVar(const TStringData& AR_CStrEnvName, const TStringData& AR_CStrEnvValue)
{
mo_CStrEnvName = AR_CStrEnvName ;
mo_CStrEnvValue = AR_CStrEnvValue;
}/*
ZtCEnvVar(const TStringData& AR_CStrEnvName, const TStringData& AR_CStrEnvValue)*/
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)
{
mo_CStrEnvName = rhs.mo_CStrEnvName ;
mo_CStrEnvValue = rhs.mo_CStrEnvValue; return *this;
}/*
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)*/
ZtCEnvVar<TStringData>& operator=(const TStringData& AR_CStrEnvName)
{
mo_CStrEnvName = AR_CStrEnvName; return *this;
}/*
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)*/
void Set(const TStringData& AR_CStringEnvName, const TStringData& AR_CStringEnvValue)
{
mo_CStrEnvName = AR_CStringEnvName ;
mo_CStrEnvValue = AR_CStringEnvValue;
}/*
void Set(const TStringData& AR_CStringEnvName, const TStringData& AR_CStringEnvValue)*/
TStringData& GetName () {return mo_CStrEnvName ;}
TStringData& GetValue() {return mo_CStrEnvValue;}
const TStringData& GetName () const {return mo_CStrEnvName ;}
const TStringData& GetValue() const {return mo_CStrEnvValue;}
bool operator==(const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName ==rhs.mo_CStrEnvName ;}
bool operator< (const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName < rhs.mo_CStrEnvName ;}
bool operator> (const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName > rhs.mo_CStrEnvName ;}
bool operator==(const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName ==AR_CStrEnvName ;}
bool operator> (const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName > AR_CStrEnvName ;}
bool operator< (const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName < AR_CStrEnvName ;}
public:
};/*
template<typename TStringData> class ZtCEnvVar*/
// CGI <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8>׸<EFBFBD> Http Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ
// <20><EFBFBD><EEBFA1>, class ZtCFileUp <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
template< typename TStringData,
typename TFileSize=ZNsMain::ZTypLengthF
>
class ZtCFileUp ///////////////////////////////////
{
public :
typedef TFileSize TypeFileSize;
protected:
TStringData mo_FileName;
TStringData mo_FileType;
TStringData mo_EnviName;
TFileSize ml_FileSize;
public :
ZtCFileUp()
{
ml_FileSize = 0;
};/*
ZtCFileUp()*/
TStringData& GetFileName() {return mo_FileName;}
TStringData& GetFileType() {return mo_FileType;}
TStringData& GetEnviName() {return mo_EnviName;}
const TStringData& GetFileName() const{return mo_FileName;}
const TStringData& GetFileType() const{return mo_FileType;}
const TStringData& GetEnviName() const{return mo_EnviName;}
TFileSize GetDataSize() const
{
return ml_FileSize;
}/*
TFileSize GetDataSize() const*/
void SetDataSize(TFileSize AL_FileSize)
{
ml_FileSize = AL_FileSize;
}/*
void SetDataSize(TFileSize AL_FileSize)*/
void AddDataSize(TFileSize AL_FileSize)
{
ml_FileSize += AL_FileSize;
}/*
void AddDataSize(TFileSize AL_FileSize)*/
TFileSize& GetDataSizeRef()
{
return ml_FileSize;
}/*
TFileSize& GetDataSizeRef()*/
public:
};/*
template< typename TStringData,
typename TFileSize=ZNsMain::ZTypLengthF
>
class ZtCFileUp /////////////////////////////////*/
}/*
namespace ZNsBase*/
template<typename TStringData> void ZftEscapeHtml(TStringData& ARR_CString)
{
ARR_CString.Replace("&", "&amp;" ).
Replace("\"","&quot;").
Replace("<", "&lt;" ).
Replace(">", "&gt;" ).
Replace(" ", "&nbsp;").
/*//////*/ Replace("\n","<br />");
}/*
template<typename TStringData> void ZftEscapeHtml(TStringData& ARR_CString) */
template<typename TStringData> void ZftNL2BR(TStringData& ARR_CStringData)
{
ARR_CStringData.
Replace("\r\n", "<br />").Replace("\n" , "<br />");
}/*
template<typename TStringData> void ZftNL2BR(TStringData& ARR_CStringData) */
namespace ZNsType
{
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCTypeEnvVarSet /*##################################*/
{
public:
typedef TStringData ZCStringData ;
typedef ZNsMain::ZNsCGI::ZNsBase::
ZtCEnvVar<ZCStringData> ZCEnvVar ;
typedef ZNsMain::ZtCObjAVL<ZCEnvVar> ZCEnvVarSet ;
typedef typename ZCEnvVarSet ::ZCNode ZCEnvVarNode ;
typedef typename ZCStringData::ZCMainChars ZCMainChars ;
typedef typename ZCStringData::TypeChar TypeChar ;
typedef typename ZCStringData::TypeLength TypeLength ;
public:
};/*
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCTypeEnvVarSet ####################################*/
}/*
namespace ZNsType*/
template< typename TStringData, /*############################*/
typename TTypeEnvVarSet =
ZNsType::ZtCTypeEnvVarSet<TStringData>
>
class ZtCLoadSimUrlConfig : protected ZNsMain::ZtCLoadDataBlockOne
< ZtCLoadSimUrlConfig
<
TStringData, TTypeEnvVarSet
>,
TStringData
/*###########*/ > /*############################################*/
{
public :
template< typename TTDerive, typename TTStringData
>
friend class ZNsMain::ZtCLoadDataBlockOne;
public :
typedef typename TTypeEnvVarSet::ZCStringData ZCStringData;
typedef typename TTypeEnvVarSet::ZCEnvVar ZCEnvVar ;
typedef typename TTypeEnvVarSet::ZCEnvVarSet ZCEnvVarSet ;
typedef typename TTypeEnvVarSet::ZCEnvVarNode ZCEnvVarNode;
typedef typename TTypeEnvVarSet::ZCMainChars ZCMainChars ;
typedef typename TTypeEnvVarSet::TypeChar TypeChar ;
typedef typename TTypeEnvVarSet::TypeLength TypeLength ;
public :
typedef ZNsMain::ZtCLoadDataBlockOne
<ZtCLoadSimUrlConfig, TStringData> TypeBase;
private:
ZCEnvVarSet mo_CEnvVarSet ;
ZCStringData mo_CStringName ;
ZCStringData mo_CStringBuff ;
ZCEnvVarNode* mp_CStringNode ;
bool mb_DoFindEqual ; // '=' <20><> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
public :
typedef void (*TypePfOnMeetCEnvVar)
(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff);
private:
static void OnMeetCEnvVar(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff)
{
ZCStringData VO_CStringEnc(AR_CEnvVar.GetValue());
ZNsMain::ZNsEnc::ZftGetSimUrlEnc(RR(VO_CStringEnc));
ARR_CStringBuff
("&")(AR_CEnvVar.GetName())("=")(VO_CStringEnc)("&\r\n");
}/*
static void OnMeetCEnvVar(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff)*/
private:
static void ShowEnvVar(ZCEnvVar& AR_CEnvVar)
{
cout<<"# "<<AR_CEnvVar.GetName()<<" : "<<AR_CEnvVar.GetValue()<<endl;
}/*
static void ShowEnvVar(ZCEnvVar& AR_CEnvVar)*/
/*private:*/
private:
ZNsMain::ZERun ExecBlockIn(const TypeChar* AP_Data, TypeLength AL_Length)
{
if(mb_DoFindEqual)
{
// mp_CStringNode==0 <20≯<EFBFBD> '=' <20><> ã<><C3A3> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>, <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// mo_CEnvVarSet <20><> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ʾҴٴ<D2B4> <20><><EFBFBD>̴<EFBFBD>. <20>̶<EFBFBD><CCB6><EFBFBD> AP_Data <20><> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (2011-12-18 15:28:00)
if(mp_CStringNode!=0)
{
// mo_CEnvVarSet <20><> <20><> <20>Է<EFBFBD>.
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).
GetValue()(AP_Data, AL_Length) ;
/*+++++++++++++++++++++++++++++++++++++++++++++*/
}/*
if(mp_CStringNode!=0)*/
return ZNsMain::ZERun_OK;
}/*
if(mb_DoFindEqual)*/
TypeLength VL_FindPos = ZCMainChars::
FindPos(AP_Data, "=", AL_Length, 1); // 1 <20><> "=" <20><> <20><><EFBFBD><EFBFBD>
if(VL_FindPos<0)
{
mo_CStringName(AP_Data, AL_Length); return ZNsMain::ZERun_OK;
}/*
if(VL_FindPos<0)*/
mb_DoFindEqual=true; mo_CStringName(AP_Data, VL_FindPos).Trim();
if(mo_CStringName.size()< 1) return ZNsMain::ZERun_OK;
mo_CStringName = ZNsMain::
ZNsEnc::ZftGetSimUrlDec( RR(mo_CStringName) ) ;
if(mo_CStringName.size()< 1) return ZNsMain::ZERun_OK;
mp_CStringNode=mo_CEnvVarSet.AddKey(mo_CStringName);
if(mp_CStringNode ==0) return ZNsMain::ZERun_OK;
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).GetValue()
(
AP_Data +VL_FindPos+1,
AL_Length-VL_FindPos-1
);
///////////////////////////////////////////////////////////
return ZNsMain::ZERun_OK;
}/*
ZNsMain::ZERun ExecBlockIn(const TypeChar* AP_Data, TypeLength AL_Length)*/
ZNsMain::ZERun ExecBlockMatch(const TypeChar* AP_Data, TypeLength AL_Length)
{
// <20>и<EFBFBD> <20><><EFBFBD><EFBFBD> "&" <20><> <20>߰ߵ<DFB0> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
if(mp_CStringNode!=0)
{
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).GetValue().Trim();
}/*
if(mp_CStringNode!=0)*/
mp_CStringNode = 0 ;
mo_CStringName = "" ;
mb_DoFindEqual = false;
return ZNsMain::ZERun_OK;
}/*
ZNsMain::ZERun ExecBlockMatch(const TypeChar* AP_Data, TypeLength AL_Length)*/
/*private:*/
public :
ZtCLoadSimUrlConfig()
{
mp_CStringNode=0 ;
mb_DoFindEqual=false;
this->TypeBase::SetSearchCString(ZCStringData("&"));
}/*
ZtCLoadSimUrlConfig()*/
ZCStringData& GetCStringBuff() {return mo_CStringBuff;}
ZCEnvVarSet GetCEnvVarSet () {return mo_CEnvVarSet ;}
const ZCStringData& GetCStringBuff() const{return mo_CStringBuff;}
const ZCEnvVarSet GetCEnvVarSet () const{return mo_CEnvVarSet ;}
void LoadData (const ZCStringData& AR_CStringConf){
LoadData (AR_CStringConf.data(), AR_CStringConf.size()); }
void LoadDataEx(const ZCStringData& AR_CStringConf){
LoadDataEx(AR_CStringConf.data(), AR_CStringConf.size()); }
void LoadData(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)
{
this->TypeBase::LoadData(APC_ConfigData, AI_ConfigLen);
}/*
void LoadData(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)*/
void LoadDataEx(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)
{
this->TypeBase::LoadData(APC_ConfigData, AI_ConfigLen);
mo_CStringName.clear();
mp_CStringNode=0 ;
mb_DoFindEqual=false ;
}/*
void LoadDataEx(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)*/
void clear()
{
mo_CEnvVarSet .clear();
mo_CStringName.clear();
mp_CStringNode=0 ;
mb_DoFindEqual=false ;
}/*
void clear()*/
long GetLongValue(const ZCStringData& AR_CStringName)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0; return VP_CEnvVarNode->GetData().GetValue().GetLong();
}/*
long GetLongValue(const ZCStringData& AR_CStringName)*/
long GetLongValue(const ZCStringData& AR_CStringName, long& ARRL_Long)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return ARRL_Long; return ARRL_Long=VP_CEnvVarNode->GetData().GetValue().GetLong();
}/*
long GetLongValue(const ZCStringData& AR_CStringName, long& ARRL_Long)*/
ZCStringData& GetCStringValue(const ZCStringData& AR_CStringName, ZCStringData& ARR_CStringValue)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return ARR_CStringValue;
return ARR_CStringValue=VP_CEnvVarNode->GetData().GetValue();
}/*
ZCStringData& GetCStringValue(const ZCStringData& AR_CStringName, ZCStringData& ARR_CStringValue)*/
ZCStringData GetCStringValue(const ZCStringData& AR_CStringName)
{
ZCStringData VO_ValueCStr; return GetCStringValue(AR_CStringName, RR(VO_ValueCStr));
}/*
ZCStringData GetCStringValue(const ZCStringData& AR_CStringName)*/
ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName)
{
ZCEnvVarNode* VP_CEnvVarNode =
mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0;
return const_cast<ZCStringData*>(
&VP_CEnvVarNode->GetData().GetValue());
}/*
ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName)*/
const ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName) const
{
ZCEnvVarNode* VP_CEnvVarNode =
mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0;
return &VP_CEnvVarNode->GetData().GetValue();
}/*
const ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName) const*/
bool AddCEnvVar(const ZCEnvVar& AR_CEnvVar)
{
return mo_CEnvVarSet.AddData(AR_CEnvVar);
}/*
bool AddCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool AddCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
}/*
bool AddCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
bool AddCEnvVarLong(const ZCStringData& AR_NameCStr, long AL_LongValue)
{
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, ZCStringData(AL_LongValue)));
}/*
bool AddCEnvVarLong(const ZCStringData& AR_NameCStr, long AL_LongValue)*/
bool CutCEnvVar(const ZCStringData& AR_NameCStr)
{
return mo_CEnvVarSet.template DeleteKey<const ZCStringData&>(AR_NameCStr);
}/*
bool CutCEnvVar(const ZCStringData& AR_NameCStr)*/
bool AddEditCEnvVar(const ZCEnvVar& AR_CEnvVar) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
{
CutCEnvVar(AR_CEnvVar.GetName()); return mo_CEnvVarSet.AddData(AR_CEnvVar);
}/*
bool AddEditCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool AddEditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
CutCEnvVar(AR_NameCStr); return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
}/*
bool AddEditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
bool EditCEnvVar(const ZCEnvVar& AR_CEnvVar) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
if(CutCEnvVar(AR_CEnvVar.GetName())) return mo_CEnvVarSet.AddData(AR_CEnvVar); return false;
}/*
bool EditCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool EditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
if(CutCEnvVar(AR_NameCStr))
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
return false;
}/*
bool EditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
void Serialize(ZCStringData& ARR_SerialCStr, TypePfOnMeetCEnvVar APF_OnMeetCEnvVar)
{
mo_CEnvVarSet.template IterInOrder<TypePfOnMeetCEnvVar, ZCStringData&>
(
APF_OnMeetCEnvVar, RR(ARR_SerialCStr)
);
//////////////////////////////////////////////////////////////////////
}/*
void Serialize(ZCStringData& ARR_SerialCStr, TypePfOnMeetCEnvVar APF_OnMeetCEnvVar)*/
void Serialize(ZCStringData& ARR_SerialCStr) /////////////////////////////
{
mo_CEnvVarSet.template IterInOrder<TypePfOnMeetCEnvVar, ZCStringData&>
(
OnMeetCEnvVar, RR(ARR_SerialCStr)
);
//////////////////////////////////////////////////////////////////////
}/*
void Serialize(ZCStringData& ARR_SerialCStr)*/
void Serialize()
{
Serialize( RR(this->mo_CStringBuff="") );
}/*
void Serialize()*/
template<typename TFunctor> void IterEnvSet(TFunctor AO_Functor)
{
mo_CEnvVarSet.template IterInOrder<TFunctor>(AO_Functor);
}/*
template<typename TFunctor> void IterEnvSet(TFunctor AO_Functor)*/
void IterEnvSet()
{
IterEnvSet(&ShowEnvVar); // for debug
}/*
void IterEnvSet()*/
public:
};/*
template< typename TStringData, ##########################
typename TTypeEnvVarSet =
ZNsType::ZtCTypeEnvVarSet<TStringData>
>
class ZtCLoadSimUrlConfig ################################*/
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCLoadXmlInfo /*####################################*/
{
public :
typedef TStringData ZCStringData;
typedef typename ZCStringData::TypeLength TypeLength;
typedef ZNsMain::ZNsType::ZtCTypeXmlInfo< ///////////
ZCStringData
/*/////////*/ > ZCTypeXmlInfo; //////////////////////
typedef ZNsMain::ZtCXmlInfo<ZCTypeXmlInfo> ZCXmlInfo;
typedef ZNsMain::ZNsView::ZtCViewLoadXmlOfXmlInfo<
ZCXmlInfo
/*/////////*/ > ZCViewLoadXml; //////////////////////
typedef ZNsMain::ZtCLoadXml<ZCStringData> ZCLoadXml;
/*public :*/
private:
ZCViewLoadXml m_oCViewLoad;
ZCLoadXml m_oCLoadXml ;
public :
ZCLoadXml& GetCLoadXml(){return m_oCLoadXml ;}
ZCXmlInfo& GetCXmlInfo(){return m_oCViewLoad.GetCXmlInfo();}
ZNsMain::ZERunEx Exec(const char* APC_XmlData, TypeLength AI_Length)
{
m_oCViewLoad.clear();
m_oCLoadXml .clear(); return m_oCLoadXml.
ExecAll(RR(m_oCViewLoad), APC_XmlData, AI_Length);
}/*
ZNsMain::ZERunEx Exec(const char* APC_XmlData, TypeLength AI_Length)*/
ZNsMain::ZERunEx Exec(const ZCStringData& ArgrXmlData)
{
return Exec(ArgrXmlData.data(), ArgrXmlData.size());
}/*
ZNsMain::ZERunEx Exec(const ZCStringData& ArgrXmlData)*/
template<typename TMainChars>
ZNsMain::ZERunEx Exec(const TMainChars& AR_CMainChars)
{
return Exec(AR_CMainChars.data(), AR_CMainChars.size());
}/*
template<typename TMainChars>
ZNsMain::ZERunEx Exec(const TMainChars& AR_CMainChars)*/
public :
};/*
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCLoadXmlInfo ######################################*/
}/*
namespace ZNsCGI*/
}/*
namespace ZNsMain */
#endif //__ZNSMAIN__ZMAIN_CGI_H__