本文整理汇总了C++中List::Back方法的典型用法代码示例。如果您正苦于以下问题:C++ List::Back方法的具体用法?C++ List::Back怎么用?C++ List::Back使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类List
的用法示例。
在下文中一共展示了List::Back方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CompileShader
void CompileShader(const String& fileName)
{
String file = GetFileName(fileName);
XMLFile doc(context_);
File source(context_);
source.Open(fileName);
if (!doc.Load(source))
ErrorExit("Could not open input file " + fileName);
XMLElement shaders = doc.GetRoot("shaders");
if (!shaders)
ErrorExit("No shaders element in " + source.GetName());
if (compileVS_)
{
ShaderParser vsParser;
if (!vsParser.Parse(VS, shaders, defines_, defineValues_))
ErrorExit("VS: " + vsParser.GetErrorMessage());
const HashMap<String, unsigned>& combinations = vsParser.GetAllCombinations();
for (HashMap<String, unsigned>::ConstIterator i = combinations.Begin(); i != combinations.End(); ++i)
{
if (!compileVariation_ || i->first_ == variationName_)
{
ShaderCombination src = vsParser.GetCombination(i->first_);
CompiledVariation compile;
compile.type_ = VS;
compile.name_ = file;
compile.outFileName_ = outDir_ + file;
if (!src.name_.Empty())
{
compile.name_ += "_" + src.name_;
compile.outFileName_ += "_" + src.name_;
}
compile.outFileName_ += useSM3_ ? ".vs3" : ".vs2";
compile.defines_ = src.defines_;
compile.defineValues_ = src.defineValues_;
variations_.Push(compile);
workList_.Push(&variations_.Back());
}
}
}
if (compilePS_)
{
ShaderParser psParser;
if (!psParser.Parse(PS, shaders, defines_, defineValues_))
ErrorExit("PS: " + psParser.GetErrorMessage());
const HashMap<String, unsigned>& combinations = psParser.GetAllCombinations();
for (HashMap<String, unsigned>::ConstIterator i = combinations.Begin(); i != combinations.End(); ++i)
{
if (!compileVariation_ || i->first_ == variationName_)
{
ShaderCombination src = psParser.GetCombination(i->first_);
CompiledVariation compile;
compile.type_ = PS;
compile.name_ = file;
compile.outFileName_ = outDir_ + file;
if (!src.name_.Empty())
{
compile.name_ += "_" + src.name_;
compile.outFileName_ += "_" + src.name_;
}
compile.outFileName_ += useSM3_ ? ".ps3" : ".ps2";
compile.defines_ = src.defines_;
compile.defineValues_ = src.defineValues_;
variations_.Push(compile);
workList_.Push(&variations_.Back());
}
}
}
if (variations_.Empty())
{
PrintLine("No variations to compile");
return;
}
// Load the shader source code
{
String inputFileName = inDir_ + file + ".hlsl";
File hlslFile(context_, inputFileName);
if (!hlslFile.IsOpen())
ErrorExit("Could not open input file " + inputFileName);
hlslCode_.Clear();
while (!hlslFile.IsEof())
hlslCode_ += hlslFile.ReadLine() + "\n";
}
if (!compileVariation_)
{
// Create and start worker threads. Use all logical CPUs except one to not lock up the computer completely
unsigned numWorkerThreads = GetNumLogicalCPUs() - 1;
//.........这里部分代码省略.........
示例2: Parse
void ConfigParser::Parse( const IDataStream& Stream )
{
Array< SToken > Tokens;
SToken Token;
Token.m_TokenType = SToken::ET_Name;
char StrMark = 0; // Stores the character (either ' or ") that opened a string
SToken MacroToken;
List<int> ArrayCounters;
Array<char> CounterCharArray;
int LineCount = 1;
for(;;)
{
char c = Stream.ReadInt8();
// Skip the UTF-8 byte order mark if present.
if( UTF8_BOM_0 == static_cast<byte>( c ) )
{
CHECK( UTF8_BOM_1 == static_cast<byte>( Stream.ReadInt8() ) );
CHECK( UTF8_BOM_2 == static_cast<byte>( Stream.ReadInt8() ) );
c = Stream.ReadInt8();
}
if( Stream.EOS() )
{
if( Token.m_TokenString.Empty() )
{
Token.m_TokenType = SToken::ET_None;
Tokens.PushBack( Token );
DEBUGCATPRINTF( "Core", 2, "%s\n", SToken::m_TokenNames[ Token.m_TokenType ] );
}
else
{
Token.m_TokenString.PushBack( '\0' );
Tokens.PushBack( Token );
DEBUGCATPRINTF( "Core", 2, "%s: %s\n", SToken::m_TokenNames[ Token.m_TokenType ], Token.m_TokenString.GetData() );
Token.m_TokenString.Clear();
}
break;
}
if( c == '&' )
{
if( Token.m_TokenType == SToken::ET_Name )
{
// Increment the current counter and add it to the current name.
ASSERT( ArrayCounters.Size() > 0 );
List<int>::Iterator CounterIter = ArrayCounters.Back();
( *CounterIter )++;
SimpleString CounterString = SimpleString::PrintF( "%d", *CounterIter );
CounterCharArray.Clear();
CounterString.FillArray( CounterCharArray );
Token.m_TokenString.Append( CounterCharArray );
}
else if( Token.m_TokenType == SToken::ET_None )
{
// Add a new counter
// Push a counter token that will be replaced with the count int later.
ArrayCounters.PushBack( -1 );
Token.m_TokenType = SToken::ET_Counter;
}
else if( Token.m_TokenType == SToken::ET_String )
{
Token.m_TokenString.PushBack( c );
}
else
{
WARNDESC( "Unexpected character '&' in token." );
}
}
else if( c == '^' )
{
if( Token.m_TokenType == SToken::ET_Name )
{
// Add the current counter to the current name.
ASSERT( ArrayCounters.Size() > 0 );
List<int>::Iterator CounterIter = ArrayCounters.Back();
ASSERT( ( *CounterIter ) >= 0 );
SimpleString CounterString = SimpleString::PrintF( "%d", *CounterIter );
CounterCharArray.Clear();
CounterString.FillArray( CounterCharArray );
Token.m_TokenString.Append( CounterCharArray );
}
else if( Token.m_TokenType == SToken::ET_String )
{
Token.m_TokenString.PushBack( c );
}
else
{
WARNDESC( "Unexpected character '^' in token." );
}
}
else if( c == ' ' || c == '\t' )
{
switch( Token.m_TokenType )
{
case SToken::ET_None:
case SToken::ET_Equals:
// Ignore whitespace
//.........这里部分代码省略.........