summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffutils.cpp
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2022-09-29 19:13:12 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2022-09-29 18:46:10 +0000
commitb677fbe9927043e8993d06f2d522f3dbda792e36 (patch)
tree0abb71afc61f58d6dfdcc88dc267ebf0b43b4e80 /src/plugins/diffeditor/diffutils.cpp
parentdaa942393a03696ed745d9553645013cc5bfc5e5 (diff)
downloadqt-creator-b677fbe9927043e8993d06f2d522f3dbda792e36.tar.gz
DiffUtils: Introduce DiffChunkInfo
Avoid code repetition. Change-Id: Iea9acef8f8b27793528fa7eaf7044e12dcd21d10 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/diffeditor/diffutils.cpp')
-rw-r--r--src/plugins/diffeditor/diffutils.cpp36
1 files changed, 36 insertions, 0 deletions
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<int, QPair<int, int>> &chunkInfo, int blockNumber,
+ const std::function<int (int, int, int)> &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();