diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-09-29 19:13:12 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-09-29 18:46:10 +0000 |
commit | b677fbe9927043e8993d06f2d522f3dbda792e36 (patch) | |
tree | 0abb71afc61f58d6dfdcc88dc267ebf0b43b4e80 /src/plugins/diffeditor/diffutils.cpp | |
parent | daa942393a03696ed745d9553645013cc5bfc5e5 (diff) | |
download | qt-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.cpp | 36 |
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(); |