diff --git a/src/plugins/coreplugin/uniqueidmanager.cpp b/src/plugins/coreplugin/uniqueidmanager.cpp index f2dee8ff71159677f1fe57627abb6acf4279471e..25332118c5e4881fc27592f3b3d05386aa5f1dd1 100644 --- a/src/plugins/coreplugin/uniqueidmanager.cpp +++ b/src/plugins/coreplugin/uniqueidmanager.cpp @@ -44,12 +44,12 @@ UniqueIDManager::~UniqueIDManager() m_instance = 0; } -bool UniqueIDManager::hasUniqueIdentifier(const QString &id) const +bool UniqueIDManager::hasUniqueIdentifier(const Id &id) const { return m_uniqueIdentifiers.contains(id); } -int UniqueIDManager::uniqueIdentifier(const QString &id) +int UniqueIDManager::uniqueIdentifier(const Id &id) { if (hasUniqueIdentifier(id)) return m_uniqueIdentifiers.value(id); @@ -69,13 +69,13 @@ QString UniqueIDManager::stringForUniqueIdentifier(int uid) static int toId(const char *id) { - return UniqueIDManager::instance()->uniqueIdentifier(QLatin1String(id)); + return UniqueIDManager::instance()->uniqueIdentifier(id); } Context::Context(const char *id, int offset) { d.append(UniqueIDManager::instance() - -> uniqueIdentifier(QString(id) + QString::number(offset))); + -> uniqueIdentifier(Id(QString(id) + QString::number(offset)))); } void Context::add(const char *id) diff --git a/src/plugins/coreplugin/uniqueidmanager.h b/src/plugins/coreplugin/uniqueidmanager.h index e8d7f0db4848cd7ea53d00c23d13d1287d43399e..6b05cdb0b214ae1e00bac0d5929dc77d9e34dfcd 100644 --- a/src/plugins/coreplugin/uniqueidmanager.h +++ b/src/plugins/coreplugin/uniqueidmanager.h @@ -37,6 +37,36 @@ namespace Core { +// FIXME: The intention is to use this class instead of the +// generic QString to identify actions. + +class CORE_EXPORT Id +{ +public: + Id() {} + Id(const char *name) : m_name(QLatin1String(name)) {} + // FIXME: Replace with QByteArray + Id(const QString &name) : m_name(name) {} + // FIXME: Remove. + operator QString() const { return m_name; } + // FIXME: Replace with QByteArray + QString name() const { return m_name; } + bool isValid() const { return !m_name.isEmpty(); } + bool operator==(const Id &id) const { return m_name == id.m_name; } + bool operator!=(const Id &id) const { return m_name != id.m_name; } + +private: + // Intentionally unimplemented + Id(const QLatin1String &); + // FIXME: Replace with QByteArray + QString m_name; +}; + +inline uint qHash(const Id &id) +{ + return qHash(id.name()); +} + class CORE_EXPORT UniqueIDManager { public: @@ -45,12 +75,12 @@ public: static UniqueIDManager *instance() { return m_instance; } - bool hasUniqueIdentifier(const QString &id) const; - int uniqueIdentifier(const QString &id); + bool hasUniqueIdentifier(const Id &id) const; + int uniqueIdentifier(const Id &id); QString stringForUniqueIdentifier(int uid); private: - QHash<QString, int> m_uniqueIdentifiers; + QHash<Id, int> m_uniqueIdentifiers; static UniqueIDManager *m_instance; };