implement new getToken function
authorChris Lattner <sabre@nondot.org>
Mon, 29 Dec 2003 05:07:02 +0000 (05:07 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Dec 2003 05:07:02 +0000 (05:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10639 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/StringExtras.cpp [new file with mode: 0644]

diff --git a/lib/Support/StringExtras.cpp b/lib/Support/StringExtras.cpp
new file mode 100644 (file)
index 0000000..011ce28
--- /dev/null
@@ -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;
+}