From 2d6ad5694e9f8982baa748aaf08adb9205563a96 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 10 Sep 2010 13:06:01 +0200
Subject: [PATCH] coreplugin: introduce an 'Id' class, intended as successor
 for generic QStrings to identify actions etc.

---
 src/plugins/coreplugin/uniqueidmanager.cpp |  8 ++---
 src/plugins/coreplugin/uniqueidmanager.h   | 36 ++++++++++++++++++++--
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/src/plugins/coreplugin/uniqueidmanager.cpp b/src/plugins/coreplugin/uniqueidmanager.cpp
index f2dee8ff711..25332118c5e 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 e8d7f0db484..6b05cdb0b21 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;
 };
 
-- 
GitLab