本文整理汇总了C++中core::stringc::findNext方法的典型用法代码示例。如果您正苦于以下问题:C++ stringc::findNext方法的具体用法?C++ stringc::findNext怎么用?C++ stringc::findNext使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类core::stringc
的用法示例。
在下文中一共展示了stringc::findNext方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
core::array<SDefineExp> grabDefineExpressions(core::stringc &shaderProgram)
{
s32 CurrentSearchPos = 1;
s32 FindHelper = 1;
s32 FindHelper2 = 1;
core::array<SDefineExp> DefineArray;
// Dont bother stripping comments if theres no defines.
if((CurrentSearchPos = shaderProgram.find("##ifdef")) == -1)
return DefineArray;
// Strip all comments, they get in the way.
while((CurrentSearchPos = shaderProgram.find("//")) > -1)
{
FindHelper = shaderProgram.findNext('\n',CurrentSearchPos);
if(FindHelper != -1)
for(u32 i = CurrentSearchPos;i < (u32)FindHelper;++i)
shaderProgram[i] = ' ';
else
for(u32 i = CurrentSearchPos;i < shaderProgram.size();++i)
shaderProgram[i] = ' ';
}
while((CurrentSearchPos = shaderProgram.find("/*")) > -1)
{
FindHelper = shaderProgram.find("*/");
if(FindHelper > CurrentSearchPos)
for(u32 i = CurrentSearchPos;i <= (u32)(FindHelper + 1);++i)
shaderProgram[i] = ' ';
else
for(u32 i = CurrentSearchPos;i < shaderProgram.size();++i)
shaderProgram[i] = ' ';
}
while((CurrentSearchPos = shaderProgram.find("##ifdef")) > -1)
{
SDefineExp DExp;
DExp.IfPos = CurrentSearchPos;
// Comment out the ##ifdef so that we do not find it again, and so that the compiler ignores it.
shaderProgram[CurrentSearchPos] = '/';
shaderProgram[CurrentSearchPos + 1] = '/';
FindHelper = shaderProgram.findNext(' ',CurrentSearchPos);
FindHelper2 = shaderProgram.findNext('\n',FindHelper);
if(FindHelper == -1 || FindHelper2 == -1)
{
std::cerr << "Shader preprocessor encountered invalid if statement." << std::endl;
return DefineArray;
}
// Find the appropriate expression and trim all white space.
DExp.IfExp = shaderProgram.subString(FindHelper,FindHelper2 - FindHelper);
DExp.IfExp.trim();
// Record if its inverse and remove ! sign from expression.
if(DExp.IfExp[0] == '!')
{
DExp.IfExp[0] = ' ';
DExp.IfExp.trim();
DExp.Inverse = true;
}
bool EndIfFound = false;
FindHelper2 = CurrentSearchPos;
s32 IfEndScope = 0;
while(!EndIfFound)
{
FindHelper = shaderProgram.findNext('#',FindHelper2);
if(FindHelper == -1 || FindHelper >= (s32)(shaderProgram.size() - 3))
{
std::cerr << "Shader preprocessor encountered unmatched if statement." << std::endl;
return DefineArray;
}
if(IfEndScope < 0)
{
std::cerr << "Shader preprocessor encountered unmatched endif statement." << std::endl;
return DefineArray;
}
if(shaderProgram[FindHelper + 1] != '#')
{
FindHelper2 = FindHelper + 1;
continue;
}
else if(shaderProgram[FindHelper + 2] == 'i')
{
IfEndScope++;
}
else if(shaderProgram[FindHelper + 2] == 'e' && shaderProgram[FindHelper + 3] == 'n')
{
if(IfEndScope == 0)
break;
//.........这里部分代码省略.........