本文整理汇总了C++中Tag::Set方法的典型用法代码示例。如果您正苦于以下问题:C++ Tag::Set方法的具体用法?C++ Tag::Set怎么用?C++ Tag::Set使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tag
的用法示例。
在下文中一共展示了Tag::Set方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Parse
// 解析页面模板
int Page::Parse()
{
FUNCTION_TRACK(); // 函数轨迹跟踪
FileObj file;
// 文件名空,则不解析;
if("" == m_html)
{
LOG_DEBUG("no html file. [%s]", m_id.c_str());
return OK;
}
if( !file.Open(m_html) )
{
LOG_ERROR("Can't open html template file: [%s]", m_html.c_str());
return ERR;
}
int ret;
const int nFileSize = file.Size();
std::auto_ptr<char> tmp(new char [nFileSize + 1]);
char * const buf = tmp.get();
if(NULL == buf)
{
LOG_ERROR("分配内存出错");
return ERR;
}
ret = file.Read(buf, nFileSize);
if(nFileSize != ret)
{
LOG_ERROR("读取文件不完整,[%d/%d]", ret, nFileSize);
return ERR;
}
buf[ret] = '\0';
//LOG_DEBUG("nFileSize=[%d], file=[%s]", nFileSize, buf);
m_TagList = new vector< Tag * >;
if(NULL == m_TagList)
{
LOG_ERROR("分配标记容器内存出错");
return ERR;
}
vector< Tag * > &list = (*m_TagList);
char *pBuf = buf;
while(NULL != pBuf)
{
char *left;
char *right;
char *txt = pBuf; // 正常文本部分
char *tag = NULL; // 标记部分
// 查找标记如:"<!--$.......$-->"
if( (left = strstr(pBuf, TAG_LEFT)) != NULL
&& (right = strstr(left, TAG_RIGHT)) != NULL
)
{
*left = '\0'; // 去掉左边括号
*right = '\0'; // 去掉右边括号
tag = left + (sizeof(TAG_LEFT) - 1); // 跳过左边括号(指向标记部分)
pBuf = right + (sizeof(TAG_RIGHT) - 1); // 跳过右边括号后,指向下段文本;
}
else
{
pBuf = NULL; // 准备结束操作
}
/*
* 每个段文件(及标记),对应一个处理对象;
*/
// 正常文本
{
Tag *objTxt;
if( '\0' != *txt
&& (objTxt = Tag::New("", "TXT")) != NULL // "TXT"对应文件处理对象
)
{
// 设置标记,及类型为文本;
objTxt->Set(txt, Tag::TXT);
// 插入列队
list.push_back(objTxt);
//LOG_DEBUG("插入标记对象:[%d][%s]", Tag::TXT, txt);
}
else
{
LOG_ERROR("Can't find object of tag: [%s] [%s]", m_html.c_str(), txt);
}
}
// 处理标记
if(NULL != tag && '\0' != tag)
//.........这里部分代码省略.........