From 79442fde9747aa22c6cf291dea7f62b8d629491a Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 2 Oct 2023 16:43:11 +0300 Subject: [PATCH] Fixed incorrect search of index by value in statistical chart data. --- .../SourceFiles/data/data_statistics_chart.cpp | 14 +++++++------- Telegram/SourceFiles/data/data_statistics_chart.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/data/data_statistics_chart.cpp b/Telegram/SourceFiles/data/data_statistics_chart.cpp index 830f5ecc6..d3e3a1026 100644 --- a/Telegram/SourceFiles/data/data_statistics_chart.cpp +++ b/Telegram/SourceFiles/data/data_statistics_chart.cpp @@ -67,8 +67,8 @@ QString StatisticalChart::getDayString(int i) const { return daysLookup[int((x[i] - x[0]) / timeStep)]; } -int StatisticalChart::findStartIndex(float v) const { - if (v == 0) { +int StatisticalChart::findStartIndex(float64 v) const { + if (!v) { return 0; } const auto n = int(xPercentage.size()); @@ -82,7 +82,7 @@ int StatisticalChart::findStartIndex(float v) const { while (left <= right) { const auto middle = (right + left) >> 1; if (v < xPercentage[middle] - && (middle == 0 || v > xPercentage[middle - 1])) { + && (!middle || (v > xPercentage[middle - 1]))) { return middle; } if (v == xPercentage[middle]) { @@ -97,7 +97,7 @@ int StatisticalChart::findStartIndex(float v) const { return left; } -int StatisticalChart::findEndIndex(int left, float v) const { +int StatisticalChart::findEndIndex(int left, float64 v) const { const auto n = int(xPercentage.size()); if (v == 1.) { return n - 1; @@ -107,7 +107,7 @@ int StatisticalChart::findEndIndex(int left, float v) const { while (left <= right) { const auto middle = (right + left) >> 1; if (v > xPercentage[middle] - && (middle == n - 1 || v < xPercentage[middle + 1])) { + && ((middle == n - 1) || (v < xPercentage[middle + 1]))) { return middle; } if (v == xPercentage[middle]) { @@ -123,7 +123,7 @@ int StatisticalChart::findEndIndex(int left, float v) const { } -int StatisticalChart::findIndex(int left, int right, float v) const { +int StatisticalChart::findIndex(int left, int right, float64 v) const { const auto n = int(xPercentage.size()); if (v <= xPercentage[left]) { @@ -136,7 +136,7 @@ int StatisticalChart::findIndex(int left, int right, float v) const { while (left <= right) { const auto middle = (right + left) >> 1; if (v > xPercentage[middle] - && (middle == n - 1 || v < xPercentage[middle + 1])) { + && ((middle == n - 1) || (v < xPercentage[middle + 1]))) { return middle; } diff --git a/Telegram/SourceFiles/data/data_statistics_chart.h b/Telegram/SourceFiles/data/data_statistics_chart.h index 13f1071c6..877b275f1 100644 --- a/Telegram/SourceFiles/data/data_statistics_chart.h +++ b/Telegram/SourceFiles/data/data_statistics_chart.h @@ -25,9 +25,9 @@ struct StatisticalChart { [[nodiscard]] QString getDayString(int i) const; - [[nodiscard]] int findStartIndex(float v) const; - [[nodiscard]] int findEndIndex(int left, float v) const; - [[nodiscard]] int findIndex(int left, int right, float v) const; + [[nodiscard]] int findStartIndex(float64 v) const; + [[nodiscard]] int findEndIndex(int left, float64 v) const; + [[nodiscard]] int findIndex(int left, int right, float64 v) const; struct Line final { std::vector y;