Add convenient std::string helpers to StringMap. Patch by Mikhail Glushenkov!
authorAnton Korobeynikov <asl@math.spbu.ru>
Thu, 31 Jan 2008 23:02:33 +0000 (23:02 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Thu, 31 Jan 2008 23:02:33 +0000 (23:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46625 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/StringMap.h

index 81a55456df228277fd691af6e540f6e37d8f588e..dd040f927db9e10f36519f37da2d0b7ce3e96296 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "llvm/Support/Allocator.h"
 #include <cstring>
+#include <string>
 
 namespace llvm {
   template<typename ValueT>
@@ -268,24 +269,36 @@ public:
     if (Bucket == -1) return end();
     return iterator(TheTable+Bucket);
   }
+  iterator find(const char *Key) {
+    return find(Key, Key + strlen(Key));
+  }
+  iterator find(const std::string &Key) {
+    const char* key_start = &Key[0];
+    return find(key_start, key_start + Key.size());
+  }
 
   const_iterator find(const char *KeyStart, const char *KeyEnd) const {
     int Bucket = FindKey(KeyStart, KeyEnd);
     if (Bucket == -1) return end();
     return const_iterator(TheTable+Bucket);
   }
-
-  iterator find(const char *Key) {
-    return find(Key, Key + strlen(Key));
-  }
   const_iterator find(const char *Key) const {
     return find(Key, Key + strlen(Key));
   }
+  const_iterator find(const std::string &Key) const {
+    const char* key_start = &Key[0];
+    return find(key_start, key_start + Key.size());
+  }
 
   ValueTy& operator[](const char *Key) {
     value_type& entry = GetOrCreateValue(Key, Key + strlen(Key));
     return entry.getValue();
   }
+  ValueTy& operator[](const std::string &Key) {
+    const char* key_start = &Key[0];
+    value_type& entry = GetOrCreateValue(key_start, key_start + Key.size());
+    return entry.getValue();
+  }
 
   size_type count(const char *KeyStart, const char *KeyEnd) const {
     return find(KeyStart, KeyEnd) == end() ? 0 : 1;
@@ -293,6 +306,10 @@ public:
   size_type count(const char *Key) const {
     return count(Key, Key + strlen(Key));
   }
+  size_type count(const std::string &Key) const {
+    const char* key_start = &Key[0];
+    return count(key_start, key_start + Key.size());
+  }
 
   /// insert - Insert the specified key/value pair into the map.  If the key
   /// already exists in the map, return false and ignore the request, otherwise