diff --git a/src/plugins/qmldesigner/designercore/metainfo/storagecache.h b/src/plugins/qmldesigner/designercore/metainfo/storagecache.h index e8a5ff19208..88462e7ce50 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/storagecache.h +++ b/src/plugins/qmldesigner/designercore/metainfo/storagecache.h @@ -63,16 +63,14 @@ public: template, - typename FetchValue = std::function, - typename FetchId = std::function> + typename CacheEntry = StorageCacheEntry> class StorageCache { - template - friend class StorageCache; + friend StorageCache; using ResultType = std::conditional_t::value, ViewType, Type>; @@ -82,9 +80,8 @@ public: using const_iterator = typename CacheEntries::const_iterator; using Found = QmlDesigner::Found; - StorageCache(FetchValue fetchValue, FetchId fetchId, std::size_t reserveSize = 1024) - : m_fetchValue{std::move(fetchValue)} - , m_fetchId{std::move(fetchId)} + StorageCache(Storage storage, std::size_t reserveSize = 1024) + : m_storage{std::move(storage)} { m_entries.reserve(reserveSize); m_indices.reserve(reserveSize); @@ -165,7 +162,7 @@ public: m_entries.begin(), m_entries.end(), Utils::make_iterator([&](ViewType newView) { - IndexType index = m_fetchId(newView); + IndexType index = m_storage.fetchId(newView); newCacheEntries.emplace_back(newView, index); }), less); @@ -213,7 +210,7 @@ public: if (!std::is_base_of::value) found = find(view); if (!found.wasFound) { - IndexType index = insertEntry(found.iterator, view, m_fetchId(view)); + IndexType index = insertEntry(found.iterator, view, m_storage.fetchId(view)); found.iterator = m_entries.begin() + index; } @@ -249,7 +246,7 @@ public: std::lock_guard exclusiveLock(m_mutex); IndexType index; - Type value{m_fetchValue(id)}; + Type value{m_storage.fetchValue(id)}; index = insertEntry(find(value).iterator, value, id); return std::move(m_entries[index].value); @@ -330,8 +327,7 @@ private: CacheEntries m_entries; std::vector m_indices; mutable Mutex m_mutex; - FetchValue m_fetchValue; - FetchId m_fetchId; + Storage m_storage; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/metainfo/storagecachefwd.h b/src/plugins/qmldesigner/designercore/metainfo/storagecachefwd.h index 8a8b030d96a..b949cc2d19f 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/storagecachefwd.h +++ b/src/plugins/qmldesigner/designercore/metainfo/storagecachefwd.h @@ -31,14 +31,6 @@ namespace QmlDesigner { class NonLockingMutex; -template +template class StorageCache; } // namespace QmlDesigner diff --git a/tests/unit/unittest/storagecache-test.cpp b/tests/unit/unittest/storagecache-test.cpp index 4b673fe44c4..d68f3f07d0d 100644 --- a/tests/unit/unittest/storagecache-test.cpp +++ b/tests/unit/unittest/storagecache-test.cpp @@ -42,12 +42,21 @@ using uint64 = unsigned long long; using QmlDesigner::findInSorted; using Utils::compare; using Utils::reverseCompare; -using StorageIdFunction = std::function; -using StorageStringFunction = std::function; + +class StorageAdapter +{ +public: + auto fetchId(Utils::SmallStringView view) { return storage.fetchDirectoryId(view); } + + auto fetchValue(int id) { return storage.fetchDirectoryPath(id); } + + MockFilePathStorage &storage; +}; using CacheWithMockLocking = QmlDesigner::StorageCache, decltype(&Utils::reverseCompare), Utils::reverseCompare>; @@ -55,6 +64,7 @@ using CacheWithMockLocking = QmlDesigner::StorageCache, decltype(&Utils::reverseCompare), Utils::reverseCompare>; @@ -87,11 +97,8 @@ protected: protected: NiceMock databaseMock; NiceMock mockStorage{databaseMock}; - StorageIdFunction mockStorageFetchDirectyId{ - [&](Utils::SmallStringView string) { return mockStorage.fetchDirectoryId(string); }}; - StorageStringFunction mockStorageFetchDirectyPath{ - [&](int id) { return mockStorage.fetchDirectoryPath(id); }}; - Cache cache{mockStorageFetchDirectyPath, mockStorageFetchDirectyId}; + StorageAdapter storageAdapter{mockStorage}; + Cache cache{storageAdapter}; typename Cache::MutexType &mockMutex = cache.mutex(); Utils::PathString filePath1{"/file/pathOne"}; Utils::PathString filePath2{"/file/pathTwo"};