本文整理汇总了C++中StringA::GetAt方法的典型用法代码示例。如果您正苦于以下问题:C++ StringA::GetAt方法的具体用法?C++ StringA::GetAt怎么用?C++ StringA::GetAt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringA
的用法示例。
在下文中一共展示了StringA::GetAt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: expand_macro_one
void expand_macro_one(StringA& str)
{
if( str.IsBlockNull() )
return ;
//loop
do {
//find
uintptr uCount = 0;
uintptr uStart = 0;
do {
auto iter(StringHelper::Find(str, '{', uStart));
if( iter.IsNull() )
break;
intptr delta = iter.CalcDelta(str.GetAt(uStart));
if( iter != str.GetBegin() ) {
auto iter1(iter);
iter1.MovePrev();
// \{
if( iter1.get_Value() == '\\' ) {
uStart += (delta + 1);
continue;
}
}
uStart += (delta + 1);
uCount ++;
uintptr uLeftC = uStart;
do {
auto iterE(StringHelper::Find(str, '}', uStart));
if( iterE.IsNull() ) {
uCount --;
break;
}
delta = iterE.CalcDelta(str.GetAt(uStart));
auto iter1(iterE);
iter1.MovePrev();
// \}
if( iter1.get_Value() == '\\' ) {
uStart += (delta + 1);
continue;
}
uStart += (delta + 1);
intptr len = iterE.CalcDelta(iter);
//empty
if( len <= 1 ) {
uCount --;
break;
}
//macro name
StringA strMacro(StringHelper::MakeEmptyString<CharA>(MemoryHelper::GetCrtMemoryManager())); //may throw
StringUtilHelper::Sub(str, uLeftC, len - 1, strMacro); //may throw
ConstStringA c_macro_name(StringUtilHelper::To_ConstString(strMacro));
StringA strV;
uint id = m_macro_table.get_ID(c_macro_name);
if( id == 0 ) {
id = m_token_table.get_ID(c_macro_name);
if( id == 0 ) {
uCount --;
break;
}
strV = m_token_regex[id - m_token_table.GetMinID()].get_Value();
}
else {
strV = m_macro_regex[id - m_macro_table.GetMinID()].get_Value();
}
iter.get_Value() = '(';
iterE.get_Value() = ')';
StringHelper::Delete(uLeftC, len - 1, str);
StringUtilHelper::Insert(uLeftC, strV, str); //may throw
//now iterators are invalid
uStart = uLeftC + strV.GetLength() + 1;
break;
} while(true);
} while(true);
if( uCount == 0 )
break;
} while(true);
}