From b677fbe9927043e8993d06f2d522f3dbda792e36 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 29 Sep 2022 19:13:12 +0200 Subject: DiffUtils: Introduce DiffChunkInfo Avoid code repetition. Change-Id: Iea9acef8f8b27793528fa7eaf7044e12dcd21d10 Reviewed-by: Orgad Shaneh --- src/plugins/diffeditor/diffutils.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/plugins/diffeditor/diffutils.cpp') diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp index 44006e46fb..07c4f31bd6 100644 --- a/src/plugins/diffeditor/diffutils.cpp +++ b/src/plugins/diffeditor/diffutils.cpp @@ -15,6 +15,42 @@ using namespace Utils; namespace DiffEditor { +static int forBlockNumber(const QMap> &chunkInfo, int blockNumber, + const std::function &func) +{ + if (chunkInfo.isEmpty()) + return -1; + + auto it = chunkInfo.upperBound(blockNumber); + if (it == chunkInfo.constBegin()) + return -1; + + --it; + + if (blockNumber < it.key() + it.value().first) + return func(it.key(), it.value().first, it.value().second); + + return -1; +} + +int DiffChunkInfo::chunkRowForBlockNumber(int blockNumber) const +{ + return forBlockNumber(m_chunkInfo, blockNumber, [blockNumber](int startBlockNumber, int, int) + { return blockNumber - startBlockNumber; }); +} + +int DiffChunkInfo::chunkRowsCountForBlockNumber(int blockNumber) const +{ + return forBlockNumber(m_chunkInfo, blockNumber, + [](int, int rowsCount, int) { return rowsCount; }); +} + +int DiffChunkInfo::chunkIndexForBlockNumber(int blockNumber) const +{ + return forBlockNumber(m_chunkInfo, blockNumber, + [](int, int, int chunkIndex) { return chunkIndex; }); +} + int ChunkSelection::selectedRowsCount() const { return Utils::toSet(selection[LeftSide]).unite(Utils::toSet(selection[RightSide])).size(); -- cgit v1.2.1