From 8cbacdacf7dbf509c0fe2edc69cd8d7ae9ad8a93 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Tue, 24 Apr 2012 23:28:42 -0400 Subject: [PATCH] Performance - Sped up task sorting by skipping re-interpretation of certain data types. --- ChangeLog | 1 + src/sort.cpp | 37 ++++++++++++++++--------------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index ddfd43b01..9ddf7c9a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,7 @@ Features + Introduced a new filter optimization that recognizes filters with no 'OR', or 'XOR' operators, includes IDs, but does not include UUIDs. This combination means completed.data is not referenced. + + Sped up task sorting by skipping re-interpretation of certain data types. Bugs + Fixed bug #964, where the 'projects' command showed the wrong priority labels diff --git a/src/sort.cpp b/src/sort.cpp index 481c84b7f..320f9d9cb 100644 --- a/src/sort.cpp +++ b/src/sort.cpp @@ -76,10 +76,10 @@ static bool sort_compare (int left, int right) int right_number; std::string left_string; std::string right_string; - time_t left_date; - time_t right_date; float left_real; float right_real; + char left_char; + char right_char; std::vector ::iterator k; for (k = global_keys.begin (); k != global_keys.end (); ++k) @@ -152,19 +152,20 @@ static bool sort_compare (int left, int right) // Priority. else if (field == "priority") { - left_string = (*global_data)[left].get (field); - right_string = (*global_data)[right].get (field); - if (left_string == right_string) + left_char = ((*global_data)[left].get (field))[0]; + right_char = ((*global_data)[right].get (field))[0]; + + if (left_char == right_char) continue; if (ascending) - return (left_string == "" && right_string != "") || - (left_string == "L" && (right_string == "M" || right_string == "H")) || - (left_string == "M" && right_string == "H"); + return (left_char == '\0' && right_char != '\0') || + (left_char == 'L' && (right_char == 'M' || right_char == 'H')) || + (left_char == 'M' && right_char == 'H'); - return (left_string != "" && right_string == "") || - (left_string == "M" && right_string == "L") || - (left_string == "H" && (right_string == "M" || right_string == "L")); + return (left_char != '\0' && right_char == '\0') || + (left_char == 'M' && right_char == 'L') || + (left_char == 'H' && (right_char == 'M' || right_char == 'L')); } // Due Date. @@ -182,13 +183,10 @@ static bool sort_compare (int left, int right) if (left_string == right_string) continue; - left_date = atoi (left_string.c_str ()); - right_date = atoi (right_string.c_str ()); - if (ascending) - return left_date < right_date; + return left_string < right_string; - return left_date > right_date; + return left_string > right_string; } // Date. @@ -204,13 +202,10 @@ static bool sort_compare (int left, int right) if (left_string == right_string) continue; - left_date = atoi (left_string.c_str ()); - right_date = atoi (right_string.c_str ()); - if (ascending) - return left_date < right_date; + return left_string < right_string; - return left_date > right_date; + return left_string > right_string; } // Duration.