mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Add a std::string Wrapper for TableGen
Create a std::string wrapper for use as a DenseMap key. DenseMap is not safe in generate with strings, so this wrapper indicates that only strings guaranteed not to have certain values should be used in the DenseMap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136481 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1619560521
commit
cd0bc905d2
@ -16,6 +16,7 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/ADT/DenseMapInfo.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include <cctype>
|
||||
#include <cstdio>
|
||||
|
@ -19,6 +19,52 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// std::string wrapper for DenseMap purposes
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// TableGenStringKey - This is a wrapper for std::string suitable for
|
||||
/// using as a key to a DenseMap. Because there isn't a particularly
|
||||
/// good way to indicate tombstone or empty keys for strings, we want
|
||||
/// to wrap std::string to indicate that this is a "special" string
|
||||
/// not expected to take on certain values (those of the tombstone and
|
||||
/// empty keys). This makes things a little safer as it clarifies
|
||||
/// that DenseMap is really not appropriate for general strings.
|
||||
|
||||
class TableGenStringKey {
|
||||
public:
|
||||
TableGenStringKey(const std::string &str) : data(str) {}
|
||||
TableGenStringKey(const char *str) : data(str) {}
|
||||
|
||||
const std::string &str() const { return data; }
|
||||
|
||||
private:
|
||||
std::string data;
|
||||
};
|
||||
|
||||
/// Specialize DenseMapInfo for TableGenStringKey.
|
||||
namespace llvm {
|
||||
|
||||
template<> struct DenseMapInfo<TableGenStringKey> {
|
||||
static inline TableGenStringKey getEmptyKey() {
|
||||
TableGenStringKey Empty("<<<EMPTY KEY>>>");
|
||||
return Empty;
|
||||
}
|
||||
static inline TableGenStringKey getTombstoneKey() {
|
||||
TableGenStringKey Tombstone("<<<TOMBSTONE KEY>>>");
|
||||
return Tombstone;
|
||||
}
|
||||
static unsigned getHashValue(const TableGenStringKey& Val) {
|
||||
return HashString(Val.str());
|
||||
}
|
||||
static bool isEqual(const TableGenStringKey& LHS,
|
||||
const TableGenStringKey& RHS) {
|
||||
return LHS.str() == RHS.str();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Type implementations
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
Reference in New Issue
Block a user