diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-29 05:07:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-29 05:07:02 +0000 |
commit | dca358f6ae1e91667a4a8ed82f5b17c61a0a5252 (patch) | |
tree | a96ff84e4f2ff68be93eb66e2ccbdc67ef87550a /llvm/lib/Support/StringExtras.cpp | |
parent | 19857d2c05e51936c1cb26aed6d14604a6d44026 (diff) | |
download | bcm5719-llvm-dca358f6ae1e91667a4a8ed82f5b17c61a0a5252.tar.gz bcm5719-llvm-dca358f6ae1e91667a4a8ed82f5b17c61a0a5252.zip |
implement new getToken function
llvm-svn: 10639
Diffstat (limited to 'llvm/lib/Support/StringExtras.cpp')
-rw-r--r-- | llvm/lib/Support/StringExtras.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/lib/Support/StringExtras.cpp b/llvm/lib/Support/StringExtras.cpp new file mode 100644 index 00000000000..011ce280f05 --- /dev/null +++ b/llvm/lib/Support/StringExtras.cpp @@ -0,0 +1,43 @@ +//===-- StringExtras.cpp - Implement the StringExtras header --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the StringExtras.h header +// +//===----------------------------------------------------------------------===// + +#include "Support/StringExtras.h" +using namespace llvm; + +/// getToken - This function extracts one token from source, ignoring any +/// leading characters that appear in the Delimiters string, and ending the +/// token at any of the characters that appear in the Delimiters string. If +/// there are no tokens in the source string, an empty string is returned. +/// The Source source string is updated in place to remove the returned string +/// and any delimiter prefix from it. +std::string llvm::getToken(std::string &Source, const char *Delimiters) { + unsigned NumDelimiters = std::strlen(Delimiters); + + // Figure out where the token starts. + std::string::size_type Start = + Source.find_first_not_of(Delimiters, 0, NumDelimiters); + if (Start == std::string::npos) Start = Source.size(); + + // Find the next occurance of the delimiter. + std::string::size_type End = + Source.find_first_of(Delimiters, Start, NumDelimiters); + if (End == std::string::npos) End = Source.size(); + + // Create the return token. + std::string Result = std::string(Source.begin()+Start, Source.begin()+End); + + // Erase the token that we read in. + Source.erase(Source.begin(), Source.begin()+End); + + return Result; +} |