mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-04 04:19:25 +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:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "llvm/Support/DataTypes.h"
|
#include "llvm/Support/DataTypes.h"
|
||||||
#include "llvm/ADT/APFloat.h"
|
#include "llvm/ADT/APFloat.h"
|
||||||
|
#include "llvm/ADT/DenseMapInfo.h"
|
||||||
#include "llvm/ADT/StringRef.h"
|
#include "llvm/ADT/StringRef.h"
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
@@ -19,6 +19,52 @@
|
|||||||
|
|
||||||
using namespace llvm;
|
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
|
// Type implementations
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
Reference in New Issue
Block a user