File indexing completed on 2024-05-12 04:37:43

0001 /*
0002     SPDX-FileCopyrightText: 2010 Aleix Pol Gonzalez <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "dataaccessrepository.h"
0008 
0009 namespace KDevelop {
0010 class DataAccessRepositoryPrivate
0011 {
0012 public:
0013     QList<DataAccess*> m_modifications;
0014 };
0015 
0016 DataAccessRepository::DataAccessRepository()
0017     : d_ptr(new DataAccessRepositoryPrivate)
0018 {}
0019 
0020 DataAccessRepository::~DataAccessRepository()
0021 {
0022     clear();
0023 }
0024 
0025 void DataAccessRepository::addModification(const CursorInRevision& cursor, DataAccess::DataAccessFlags flags,
0026                                            const KDevelop::RangeInRevision& range)
0027 {
0028     Q_D(DataAccessRepository);
0029 
0030     Q_ASSERT(!range.isValid() || flags == DataAccess::Write);
0031     d->m_modifications.append(new DataAccess(cursor, flags, range));
0032 }
0033 
0034 void DataAccessRepository::clear()
0035 {
0036     Q_D(DataAccessRepository);
0037 
0038     qDeleteAll(d->m_modifications);
0039     d->m_modifications.clear();
0040 }
0041 
0042 QList<DataAccess*> DataAccessRepository::modifications() const
0043 {
0044     Q_D(const DataAccessRepository);
0045 
0046     return d->m_modifications;
0047 }
0048 
0049 DataAccess* DataAccessRepository::accessAt(const CursorInRevision& cursor) const
0050 {
0051     Q_D(const DataAccessRepository);
0052 
0053     auto it = std::find_if(d->m_modifications.constBegin(), d->m_modifications.constEnd(), [&](DataAccess* a) {
0054         return (a->pos() == cursor);
0055     });
0056 
0057     return (it != d->m_modifications.constEnd()) ? *it : nullptr;
0058 }
0059 
0060 QList<DataAccess*> DataAccessRepository::accessesInRange(const RangeInRevision& range) const
0061 {
0062     Q_D(const DataAccessRepository);
0063 
0064     QList<DataAccess*> ret;
0065     for (DataAccess* a : qAsConst(d->m_modifications)) {
0066         if (range.contains(a->pos()))
0067             ret += a;
0068     }
0069 
0070     return ret;
0071 }
0072 }