/// no-argument constructor.
template <typename T>
class SimpleRegistryEntry {
- const char *Name, *Desc;
+ StringRef Name, Desc;
std::unique_ptr<T> (*Ctor)();
public:
- SimpleRegistryEntry(const char *N, const char *D, std::unique_ptr<T> (*C)())
- : Name(N), Desc(D), Ctor(C)
- {}
+ SimpleRegistryEntry(StringRef N, StringRef D, std::unique_ptr<T> (*C)())
+ : Name(N), Desc(D), Ctor(C) {}
- const char *getName() const { return Name; }
- const char *getDesc() const { return Desc; }
+ StringRef getName() const { return Name; }
+ StringRef getDesc() const { return Desc; }
std::unique_ptr<T> instantiate() const { return Ctor(); }
};
static std::unique_ptr<T> CtorFn() { return make_unique<V>(); }
public:
- Add(const char *Name, const char *Desc)
+ Add(StringRef Name, StringRef Desc)
: Entry(Name, Desc, CtorFn), Node(Entry) {
add_node(&Node);
}
if (GCPI != GCMap.end())
return GCPI->second.get();
- const char *Name = S.getName().c_str();
+ auto Name = S.getName();
for (GCMetadataPrinterRegistry::iterator
I = GCMetadataPrinterRegistry::begin(),
E = GCMetadataPrinterRegistry::end(); I != E; ++I)
- if (strcmp(Name, I->getName()) == 0) {
+ if (Name == I->getName()) {
std::unique_ptr<GCMetadataPrinter> GMP = I->instantiate();
GMP->S = &S;
auto IterBool = GCMap.insert(std::make_pair(&S, std::move(GMP)));