diff options
Diffstat (limited to 'Swift/Controllers/Roster')
| -rw-r--r-- | Swift/Controllers/Roster/LeastCommonSubsequence.h | 4 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/TableRoster.cpp | 25 |
2 files changed, 17 insertions, 12 deletions
diff --git a/Swift/Controllers/Roster/LeastCommonSubsequence.h b/Swift/Controllers/Roster/LeastCommonSubsequence.h index 8daa20c..7988ee7 100644 --- a/Swift/Controllers/Roster/LeastCommonSubsequence.h +++ b/Swift/Controllers/Roster/LeastCommonSubsequence.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2011-2016 Isode Limited. | 2 | * Copyright (c) 2011-2018 Isode Limited. |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * See the COPYING file for more information. | 4 | * See the COPYING file for more information. |
| 5 | */ | 5 | */ |
| @@ -32,7 +32,7 @@ namespace Swift { | |||
| 32 | Predicate predicate; | 32 | Predicate predicate; |
| 33 | for (size_t i = 1; i < width; ++i) { | 33 | for (size_t i = 1; i < width; ++i) { |
| 34 | for (size_t j = 1; j < height; ++j) { | 34 | for (size_t j = 1; j < height; ++j) { |
| 35 | result[i + j*width] = predicate(*(xBegin + boost::numeric_cast<long long>(i)-1), *(yBegin + boost::numeric_cast<long long >(j)-1)) ? result[(i-1) + (j-1)*width] + 1 : std::max(result[i + (j-1)*width], result[i-1 + (j*width)]); | 35 | result[i + j*width] = predicate(*(xBegin + static_cast<long long>(i)-1), *(yBegin + static_cast<long long>(j)-1)) ? result[(i-1) + (j-1)*width] + 1 : std::max(result[i + (j-1)*width], result[i-1 + (j*width)]); |
| 36 | } | 36 | } |
| 37 | } | 37 | } |
| 38 | } | 38 | } |
diff --git a/Swift/Controllers/Roster/TableRoster.cpp b/Swift/Controllers/Roster/TableRoster.cpp index 713f390..01bf4a6 100644 --- a/Swift/Controllers/Roster/TableRoster.cpp +++ b/Swift/Controllers/Roster/TableRoster.cpp | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2011-2016 Isode Limited. | 2 | * Copyright (c) 2011-2018 Isode Limited. |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * See the COPYING file for more information. | 4 | * See the COPYING file for more information. |
| 5 | */ | 5 | */ |
| @@ -132,15 +132,20 @@ void TableRoster::handleUpdateTimerTick() { | |||
| 132 | std::vector<size_t> itemRemoves; | 132 | std::vector<size_t> itemRemoves; |
| 133 | std::vector<size_t> itemInserts; | 133 | std::vector<size_t> itemInserts; |
| 134 | computeIndexDiff<Item, ItemEquals, ItemNeedsUpdate >(sections[sectionUpdates[i]].items, newSections[sectionPostUpdates[i]].items, itemUpdates, itemPostUpdates, itemRemoves, itemInserts); | 134 | computeIndexDiff<Item, ItemEquals, ItemNeedsUpdate >(sections[sectionUpdates[i]].items, newSections[sectionPostUpdates[i]].items, itemUpdates, itemPostUpdates, itemRemoves, itemInserts); |
| 135 | size_t end = update.insertedRows.size(); | 135 | try { |
| 136 | update.insertedRows.resize(update.insertedRows.size() + itemInserts.size()); | 136 | size_t end = update.insertedRows.size(); |
| 137 | std::transform(itemInserts.begin(), itemInserts.end(), update.insertedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionPostUpdates[i])); | 137 | update.insertedRows.resize(update.insertedRows.size() + itemInserts.size()); |
| 138 | end = update.deletedRows.size(); | 138 | std::transform(itemInserts.begin(), itemInserts.end(), update.insertedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionPostUpdates[i])); |
| 139 | update.deletedRows.resize(update.deletedRows.size() + itemRemoves.size()); | 139 | end = update.deletedRows.size(); |
| 140 | std::transform(itemRemoves.begin(), itemRemoves.end(), update.deletedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionUpdates[i])); | 140 | update.deletedRows.resize(update.deletedRows.size() + itemRemoves.size()); |
| 141 | end = update.updatedRows.size(); | 141 | std::transform(itemRemoves.begin(), itemRemoves.end(), update.deletedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionUpdates[i])); |
| 142 | update.updatedRows.resize(update.updatedRows.size() + itemUpdates.size()); | 142 | end = update.updatedRows.size(); |
| 143 | std::transform(itemUpdates.begin(), itemUpdates.end(), update.updatedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionPostUpdates[i])); | 143 | update.updatedRows.resize(update.updatedRows.size() + itemUpdates.size()); |
| 144 | std::transform(itemUpdates.begin(), itemUpdates.end(), update.updatedRows.begin() + boost::numeric_cast<long long>(end), CreateIndexForSection(sectionPostUpdates[i])); | ||
| 145 | } | ||
| 146 | catch (const boost::numeric::bad_numeric_cast&) { | ||
| 147 | // If any container claims it has more than long long max items, we have bigger issues, so letting this pass | ||
| 148 | } | ||
| 144 | } | 149 | } |
| 145 | 150 | ||
| 146 | // Switch the old model with the new | 151 | // Switch the old model with the new |
Swift