Add convenient std::string helpers to StringMap. Patch by Mikhail Glushenkov!

llvm-svn: 46625
This commit is contained in:
Anton Korobeynikov 2008-01-31 23:02:33 +00:00
parent 2820b9c893
commit d47eedb7e9
1 changed files with 21 additions and 4 deletions

View File

@ -16,6 +16,7 @@
#include "llvm/Support/Allocator.h" #include "llvm/Support/Allocator.h"
#include <cstring> #include <cstring>
#include <string>
namespace llvm { namespace llvm {
template<typename ValueT> template<typename ValueT>
@ -268,24 +269,36 @@ public:
if (Bucket == -1) return end(); if (Bucket == -1) return end();
return iterator(TheTable+Bucket); 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 { const_iterator find(const char *KeyStart, const char *KeyEnd) const {
int Bucket = FindKey(KeyStart, KeyEnd); int Bucket = FindKey(KeyStart, KeyEnd);
if (Bucket == -1) return end(); if (Bucket == -1) return end();
return const_iterator(TheTable+Bucket); return const_iterator(TheTable+Bucket);
} }
iterator find(const char *Key) {
return find(Key, Key + strlen(Key));
}
const_iterator find(const char *Key) const { const_iterator find(const char *Key) const {
return find(Key, Key + strlen(Key)); 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) { ValueTy& operator[](const char *Key) {
value_type& entry = GetOrCreateValue(Key, Key + strlen(Key)); value_type& entry = GetOrCreateValue(Key, Key + strlen(Key));
return entry.getValue(); 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 { size_type count(const char *KeyStart, const char *KeyEnd) const {
return find(KeyStart, KeyEnd) == end() ? 0 : 1; return find(KeyStart, KeyEnd) == end() ? 0 : 1;
@ -293,6 +306,10 @@ public:
size_type count(const char *Key) const { size_type count(const char *Key) const {
return count(Key, Key + strlen(Key)); 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 /// 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 /// already exists in the map, return false and ignore the request, otherwise