lmdb: Get `std::shared_ptr` directly from iterator
This commit is contained in:
parent
68c11be6bb
commit
3d7310af30
|
@ -1 +1 @@
|
||||||
Subproject commit 1517bdce2931353f6d929fe3ad9bd03ce10a66ab
|
Subproject commit b302cdfabe190ad4b1853a6e8b1837886c58dd4a
|
|
@ -249,10 +249,9 @@ void Database::addPackageDependencies(StorageID packageID, const std::shared_ptr
|
||||||
|
|
||||||
void Database::allPackages(const PackageVisitor &visitor)
|
void Database::allPackages(const PackageVisitor &visitor)
|
||||||
{
|
{
|
||||||
// TODO: use cache here, e.g. implement a "lazy" iterator for LMDB that also directly yields a std::shared_ptr
|
|
||||||
auto txn = m_storage->packages.getROTransaction();
|
auto txn = m_storage->packages.getROTransaction();
|
||||||
for (auto i = txn.begin(); i != txn.end(); ++i) {
|
for (auto i = txn.begin<std::shared_ptr>(); i != txn.end(); ++i) {
|
||||||
if (visitor(i.getID(), std::make_shared<Package>(std::move(i.value())))) {
|
if (visitor(i.getID(), std::move(i.getPointer()))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,11 +267,12 @@ void Database::providingPackages(const Dependency &dependency, bool reverse, con
|
||||||
auto providesTxn = (reverse ? m_storage->requiredDeps : m_storage->providedDeps).getROTransaction();
|
auto providesTxn = (reverse ? m_storage->requiredDeps : m_storage->providedDeps).getROTransaction();
|
||||||
auto packagesTxn = m_storage->packages.getROTransaction();
|
auto packagesTxn = m_storage->packages.getROTransaction();
|
||||||
for (auto [i, end] = providesTxn.equal_range<0>(dependency.name); i != end; ++i) {
|
for (auto [i, end] = providesTxn.equal_range<0>(dependency.name); i != end; ++i) {
|
||||||
const Dependency &providedDependency = i.value();
|
const auto &providedDependency = i.value();
|
||||||
if (!Dependency::matches(dependency.mode, dependency.version, providedDependency.version)) {
|
const auto &asDependency = static_cast<const Dependency &>(providedDependency);
|
||||||
|
if (!Dependency::matches(dependency.mode, dependency.version, asDependency.version)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (const auto packageID : i->relevantPackages) {
|
for (const auto packageID : providedDependency.relevantPackages) {
|
||||||
const auto res = m_storage->packageCache.retrieve(*m_storage, &packagesTxn, packageID);
|
const auto res = m_storage->packageCache.retrieve(*m_storage, &packagesTxn, packageID);
|
||||||
if (res.pkg && visitor(packageID, res.pkg)) {
|
if (res.pkg && visitor(packageID, res.pkg)) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue