本文整理汇总了C++中AStackString::Tokenize方法的典型用法代码示例。如果您正苦于以下问题:C++ AStackString::Tokenize方法的具体用法?C++ AStackString::Tokenize怎么用?C++ AStackString::Tokenize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AStackString
的用法示例。
在下文中一共展示了AStackString::Tokenize方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Spawn
//.........这里部分代码省略.........
si.dwFlags |= STARTF_USESTDHANDLES;
}
// Make sure the first arg is the executable
// We also need to make a copy, as CreateProcess can write back to this string
AStackString< 1024 > fullArgs;
fullArgs += '\"';
fullArgs += executable;
fullArgs += '\"';
if ( args )
{
fullArgs += ' ';
fullArgs += args;
}
//fullArgs.Format( "\"%s\" %s", executable, args );
// create the child
if ( !CreateProcess( nullptr, //executable,
fullArgs.Get(),
nullptr,
nullptr,
(BOOL)m_RedirectHandles, // inherit handles
0,
(void *)environment,
workingDir,
&si,
(LPPROCESS_INFORMATION)&m_ProcessInfo ) )
{
return false;
}
m_Started = true;
return true;
#elif defined( __LINUX__ ) || defined( __APPLE__ )
// create StdOut and StdErr pipes to capture output of spawned process
int stdOutPipeFDs[ 2 ];
int stdErrPipeFDs[ 2 ];
VERIFY( pipe( stdOutPipeFDs ) == 0 );
VERIFY( pipe( stdErrPipeFDs ) == 0 );
// fork the process
const pid_t childProcessPid = fork();
if ( childProcessPid == -1 )
{
// cleanup pipes
VERIFY( close( stdOutPipeFDs[ 0 ] ) == 0 );
VERIFY( close( stdOutPipeFDs[ 1 ] ) == 0 );
VERIFY( close( stdErrPipeFDs[ 0 ] ) == 0 );
VERIFY( close( stdErrPipeFDs[ 1 ] ) == 0 );
ASSERT( false ); // fork failed - should not happen in normal operation
return false;
}
const bool isChild = ( childProcessPid == 0 );
if ( isChild )
{
VERIFY( dup2( stdOutPipeFDs[ 1 ], STDOUT_FILENO ) != -1 );
VERIFY( dup2( stdErrPipeFDs[ 1 ], STDERR_FILENO ) != -1 );
VERIFY( close( stdOutPipeFDs[ 0 ] ) == 0 );
VERIFY( close( stdOutPipeFDs[ 1 ] ) == 0 );
VERIFY( close( stdErrPipeFDs[ 0 ] ) == 0 );
VERIFY( close( stdErrPipeFDs[ 1 ] ) == 0 );
if ( workingDir )
{
FileIO::SetCurrentDir( AStackString<>( workingDir ) );
}
// split args
AString fullArgs( args );
Array< AString > splitArgs( 64, true );
fullArgs.Tokenize( splitArgs );
// prepare args
const size_t numArgs = splitArgs.GetSize();
char ** argv = FNEW( char *[ numArgs + 2 ] );
argv[ 0 ] = const_cast< char * >( executable );
for ( size_t i=0; i<numArgs; ++i )
{
AString & thisArg = splitArgs[ i ];
if ( thisArg.BeginsWith( '"' ) && thisArg.EndsWith( '"' ) )
{
// strip quotes
thisArg.SetLength( thisArg.GetLength() - 1 ); // trim end quote
argv[ i + 1 ] = thisArg.Get() + 1; // skip start quote
continue;
}
argv[ i + 1 ] = thisArg.Get(); // leave arg as-is
}
argv[ numArgs + 1 ] = nullptr;
// transfer execution to new executable
execv( executable, argv );
exit( -1 ); // only get here if execv fails
}
else
{
示例2: GetOtherLibraries
// GetOtherLibraries
//------------------------------------------------------------------------------
bool LinkerNode::GetOtherLibraries( NodeGraph & nodeGraph,
const BFFIterator & iter,
const Function * function,
const AString & args,
Dependencies & otherLibraries,
bool msvc ) const
{
// split to individual tokens
Array< AString > tokens;
args.Tokenize( tokens );
bool ignoreAllDefaultLibs = false;
Array< AString > defaultLibsToIgnore( 8, true );
Array< AString > defaultLibs( 16, true );
Array< AString > libs( 16, true );
Array< AString > dashlLibs( 16, true );
Array< AString > libPaths( 16, true );
Array< AString > envLibPaths( 32, true );
// extract lib path from system if present
AStackString< 1024 > libVar;
if ( Env::GetEnvVariable( "LIB", libVar ) )
{
libVar.Tokenize( envLibPaths, ';' );
}
const AString * const end = tokens.End();
for ( const AString * it = tokens.Begin(); it != end; ++it )
{
const AString & token = *it;
// MSVC style
if ( msvc )
{
// /NODEFAULTLIB
if ( LinkerNode::IsLinkerArg_MSVC( token, "NODEFAULTLIB" ) )
{
ignoreAllDefaultLibs = true;
continue;
}
// /NODEFAULTLIB:
if ( GetOtherLibsArg( "NODEFAULTLIB:", defaultLibsToIgnore, it, end, false, msvc ) )
{
continue;
}
// /DEFAULTLIB:
if ( GetOtherLibsArg( "DEFAULTLIB:", defaultLibs, it, end, false, msvc ) )
{
continue;
}
// /LIBPATH:
if ( GetOtherLibsArg( "LIBPATH:", libPaths, it, end, true, msvc ) ) // true = canonicalize path
{
continue;
}
// some other linker argument?
if ( token.BeginsWith( '/' ) || token.BeginsWith( '-' ) )
{
continue;
}
}
// GCC/SNC style
if ( !msvc )
{
// We don't need to check for this, as there is no default lib passing on
// the cmd line.
// -nodefaultlibs
//if ( token == "-nodefaultlibs" )
//{
// ignoreAllDefaultLibs = true;
// continue;
//}
// -L (lib path)
if ( GetOtherLibsArg( "L", libPaths, it, end, false, msvc ) )
{
continue;
}
// -l (lib)
if ( GetOtherLibsArg( "l", dashlLibs, it, end, false, msvc ) )
{
continue;
}
// some other linker argument?
if ( token.BeginsWith( '-' ) )
{
continue;
}
}
// build time substitution?
//.........这里部分代码省略.........