move a couple non-trivial methods out of line, add new
authorChris Lattner <sabre@nondot.org>
Sun, 20 Sep 2009 01:22:16 +0000 (01:22 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 20 Sep 2009 01:22:16 +0000 (01:22 +0000)
find_first_of/find_first_of methods.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82347 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/StringRef.h
lib/Support/StringRef.cpp

index f72a22d70cb3e88ce9a193601428ad77dcc20a31..510a51b4c653a8149d7d491b201a5028c777f6fd 100644 (file)
@@ -163,16 +163,8 @@ namespace llvm {
     ///
     /// \return - The index of the first occurence of \arg Str, or npos if not
     /// found.
-    size_t find(const StringRef &Str) const {
-      size_t N = Str.size();
-      if (N > Length)
-        return npos;
-      for (size_t i = 0, e = Length - N + 1; i != e; ++i)
-        if (substr(i, N).equals(Str))
-          return i;
-      return npos;
-    }
-
+    size_t find(const StringRef &Str) const;
+    
     /// rfind - Search for the last character \arg C in the string.
     ///
     /// \return - The index of the last occurence of \arg C, or npos if not
@@ -189,24 +181,29 @@ namespace llvm {
     size_t rfind(char C) const {
       return rfind(C, Length);
     }
-
-
+    
     /// rfind - Search for the last string \arg Str in the string.
     ///
     /// \return - The index of the last occurence of \arg Str, or npos if not
     /// found.
-    size_t rfind(const StringRef &Str) const {
-      size_t N = Str.size();
-      if (N > Length)
-        return npos;
-      for (size_t i = Length - N + 1, e = 0; i != e;) {
-        --i;
-        if (substr(i, N).equals(Str))
-          return i;
-      }
-      return npos;
-    }
-
+    size_t rfind(const StringRef &Str) const;
+    
+    /// find_first_of - Find the first instance of the specified character or
+    /// return npos if not in string.  Same as find.
+    size_type find_first_of(char C) const { return find(C); }
+    
+    /// find_first_of - Find the first character from the string 'Chars' in the
+    /// current string or return npos if not in string.
+    size_type find_first_of(StringRef Chars) const;
+    
+    /// find_first_not_of - Find the first character in the string that is not
+    /// in the string 'Chars' or return npos if all are in string. Same as find.
+    size_type find_first_not_of(StringRef Chars) const;
+    
+    /// @}
+    /// @name Helpful Algorithms
+    /// @{
+    
     /// count - Return the number of occurrences of \arg C in the string.
     size_t count(char C) const {
       size_t Count = 0;
@@ -215,23 +212,10 @@ namespace llvm {
           ++Count;
       return Count;
     }
-
+    
     /// count - Return the number of non-overlapped occurrences of \arg Str in
     /// the string.
-    size_t count(const StringRef &Str) const {
-      size_t Count = 0;
-      size_t N = Str.size();
-      if (N > Length)
-        return 0;
-      for (size_t i = 0, e = Length - N + 1; i != e; ++i)
-        if (substr(i, N).equals(Str))
-          ++Count;
-      return Count;
-    }
-
-    /// @}
-    /// @name Helpful Algorithms
-    /// @{
+    size_t count(const StringRef &Str) const;
     
     /// getAsInteger - Parse the current string as an integer of the specified
     /// radix.  If Radix is specified as zero, this does radix autosensing using
index 4c427012b13e0cb2d1245176cad97e3244b5a66c..af64642a989d96b12e8761f3b01f651bf6749c73 100644 (file)
@@ -12,6 +12,77 @@ using namespace llvm;
 
 const size_t StringRef::npos;
 
+//===----------------------------------------------------------------------===//
+// String Searching
+//===----------------------------------------------------------------------===//
+
+
+/// find - Search for the first string \arg Str in the string.
+///
+/// \return - The index of the first occurence of \arg Str, or npos if not
+/// found.
+size_t StringRef::find(const StringRef &Str) const {
+  size_t N = Str.size();
+  if (N > Length)
+    return npos;
+  for (size_t i = 0, e = Length - N + 1; i != e; ++i)
+    if (substr(i, N).equals(Str))
+      return i;
+  return npos;
+}
+
+/// rfind - Search for the last string \arg Str in the string.
+///
+/// \return - The index of the last occurence of \arg Str, or npos if not
+/// found.
+size_t StringRef::rfind(const StringRef &Str) const {
+  size_t N = Str.size();
+  if (N > Length)
+    return npos;
+  for (size_t i = Length - N + 1, e = 0; i != e;) {
+    --i;
+    if (substr(i, N).equals(Str))
+      return i;
+  }
+  return npos;
+}
+
+/// find_first_of - Find the first character from the string 'Chars' in the
+/// current string or return npos if not in string.
+StringRef::size_type StringRef::find_first_of(StringRef Chars) const {
+  for (size_type i = 0, e = Length; i != e; ++i)
+    if (Chars.find(Data[i]) != npos)
+      return i;
+  return npos;
+}
+
+/// find_first_not_of - Find the first character in the string that is not
+/// in the string 'Chars' or return npos if all are in string. Same as find.
+StringRef::size_type StringRef::find_first_not_of(StringRef Chars) const {
+  for (size_type i = 0, e = Length; i != e; ++i)
+    if (Chars.find(Data[i]) == npos)
+      return i;
+  return npos;
+}
+
+
+//===----------------------------------------------------------------------===//
+// Helpful Algorithms
+//===----------------------------------------------------------------------===//
+
+/// count - Return the number of non-overlapped occurrences of \arg Str in
+/// the string.
+size_t StringRef::count(const StringRef &Str) const {
+  size_t Count = 0;
+  size_t N = Str.size();
+  if (N > Length)
+    return 0;
+  for (size_t i = 0, e = Length - N + 1; i != e; ++i)
+    if (substr(i, N).equals(Str))
+      ++Count;
+  return Count;
+}
+
 /// GetAsUnsignedInteger - Workhorse method that converts a integer character
 /// sequence of radix up to 36 to an unsigned long long value.
 static bool GetAsUnsignedInteger(StringRef Str, unsigned Radix,