diff options
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(); |