Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / declarative / qml / qdeclarativetypenamecache.cpp
index 23183aa..9d433d4 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the QtDeclarative module of the Qt Toolkit.
 **
 **
 **
 **
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
 
-#include "private/qdeclarativetypenamecache_p.h"
+#include "qdeclarativetypenamecache_p.h"
 
-#include "private/qdeclarativeengine_p.h"
+#include "qdeclarativeengine_p.h"
 
 QT_BEGIN_NAMESPACE
 
-QDeclarativeTypeNameCache::QDeclarativeTypeNameCache(QDeclarativeEngine *e)
-: QDeclarativeCleanup(e), engine(e), m_moduleApi(0)
+QDeclarativeTypeNameCache::QDeclarativeTypeNameCache()
 {
 }
 
 QDeclarativeTypeNameCache::~QDeclarativeTypeNameCache()
 {
-    clear();
 }
 
-void QDeclarativeTypeNameCache::clear()
+void QDeclarativeTypeNameCache::add(const QHashedString &name, int importedScriptIndex, const QHashedString &nameSpace)
 {
-    stringCache.clear();
-    m_moduleApi = 0;
-    engine = 0;
+    Import import;
+    import.scriptIndex = importedScriptIndex;
+
+    if (nameSpace.length() != 0) {
+        Import *i = m_namedImports.value(nameSpace);
+        Q_ASSERT(i != 0);
+        m_namespacedImports[i].insert(name, import);
+        return;
+    }
+
+    if (m_namedImports.contains(name))
+        return;
+
+    m_namedImports.insert(name, import);
 }
 
-void QDeclarativeTypeNameCache::add(const QString &name, int importedScriptIndex)
+QDeclarativeTypeNameCache::Result QDeclarativeTypeNameCache::query(const QHashedStringRef &name)
 {
-    if (stringCache.contains(name))
-        return;
+    Result result = query(m_namedImports, name);
 
-    Data data;
-    data.importedScriptIndex = importedScriptIndex;
-    stringCache.insert(name, data);
+    if (!result.isValid())
+        result = typeSearch(m_anonymousImports, name);
+
+    return result;
 }
 
-void QDeclarativeTypeNameCache::add(const QString &name, QDeclarativeType *type)
+QDeclarativeTypeNameCache::Result QDeclarativeTypeNameCache::query(const QHashedStringRef &name, 
+                                                                   const void *importNamespace)
 {
-    if (stringCache.contains(name))
-        return;
+    Q_ASSERT(importNamespace);
+    const Import *i = static_cast<const Import *>(importNamespace);
+    Q_ASSERT(i->scriptIndex == -1);
 
-    Data data;
-    data.type = type;
-    stringCache.insert(name, data);
+    return typeSearch(i->modules, name);
 }
 
-void QDeclarativeTypeNameCache::add(const QString &name, QDeclarativeTypeNameCache *typeNamespace)
+QDeclarativeTypeNameCache::Result QDeclarativeTypeNameCache::query(const QHashedV8String &name)
 {
-    if (stringCache.contains(name))
-        return;
+    Result result = query(m_namedImports, name);
 
-    QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine);
+    if (!result.isValid())
+        result = typeSearch(m_anonymousImports, name);
 
-    Data data;
-    typeNamespace->addref();
-    data.typeNamespace = typeNamespace;
-    stringCache.insert(name, data);
+    return result;
 }
 
-QDeclarativeTypeNameCache::Data *QDeclarativeTypeNameCache::data(const QString &id) const
+QDeclarativeTypeNameCache::Result QDeclarativeTypeNameCache::query(const QHashedV8String &name, const void *importNamespace)
 {
-    return stringCache.value(id);
+    Q_ASSERT(importNamespace);
+    const Import *i = static_cast<const Import *>(importNamespace);
+    Q_ASSERT(i->scriptIndex == -1);
+
+    QMap<const Import *, QStringHash<Import> >::const_iterator it = m_namespacedImports.find(i);
+    if (it != m_namespacedImports.constEnd())
+        return query(*it, name);
+
+    return typeSearch(i->modules, name);
 }
 
-void QDeclarativeTypeNameCache::setModuleApi(QDeclarativeMetaType::ModuleApiInstance *api)
+QDeclarativeMetaType::ModuleApiInstance *QDeclarativeTypeNameCache::moduleApi(const void *importNamespace)
 {
-    m_moduleApi = api;
+    Q_ASSERT(importNamespace);
+    const Import *i = static_cast<const Import *>(importNamespace);
+    Q_ASSERT(i->scriptIndex == -1);
+
+    return i->moduleApi;
 }
 
 QT_END_NAMESPACE