From c23a2b5f03aeba3deaaf77df78764b1b4d4172f6 Mon Sep 17 00:00:00 2001 From: Mark Niemeyer Date: Mon, 11 Dec 2023 12:24:45 +0100 Subject: [PATCH] merge the functions sortResultByTime and sortResultByTimeActualSorting --- .../include/seerep_core/core_dataset.h | 11 ++---- seerep_srv/seerep_core/src/core_dataset.cpp | 36 +++++++------------ 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/seerep_srv/seerep_core/include/seerep_core/core_dataset.h b/seerep_srv/seerep_core/include/seerep_core/core_dataset.h index f52d1672a..ec22fd457 100644 --- a/seerep_srv/seerep_core/include/seerep_core/core_dataset.h +++ b/seerep_srv/seerep_core/include/seerep_core/core_dataset.h @@ -300,15 +300,8 @@ class CoreDataset */ std::vector sortResultByTime(std::optional>& timetree_result, - std::set intersectionResult); - /** - * @brief does the actual sorting for the sortResultByTime method - * - * @param sortingVector the data to be sorted - * @return std::vector sorted vector of result uuids - */ - std::vector - sortResultByTimeActualSorting(std::vector>& sortingVector); + std::optional> intersectionResult = std::nullopt); + /** * @brief intersects a vector of sets pairwise recursively until one intersection set remains * @param vectorOfSets the vector of sets to be intersected diff --git a/seerep_srv/seerep_core/src/core_dataset.cpp b/seerep_srv/seerep_core/src/core_dataset.cpp index d0f6fe4f1..92f065be3 100644 --- a/seerep_srv/seerep_core/src/core_dataset.cpp +++ b/seerep_srv/seerep_core/src/core_dataset.cpp @@ -417,37 +417,31 @@ CoreDataset::intersectQueryResults(std::optional CoreDataset::sortResultByTime(std::optional>& timetree_result, - std::set intersectionResult) + std::optional> intersectionResult) { std::vector> sortingVector; for (auto it = std::make_move_iterator(timetree_result.value().begin()), end = std::make_move_iterator(timetree_result.value().end()); it != end; ++it) { - if (intersectionResult.find(it->second) != intersectionResult.end()) + if (!intersectionResult.has_value() || + intersectionResult.value().find(it->second) != intersectionResult.value().end()) { sortingVector.push_back(std::make_pair(boost::geometry::get<0>(it->first.min_corner()), it->second)); } } - return sortResultByTimeActualSorting(sortingVector); -} -std::vector -CoreDataset::sortResultByTimeActualSorting(std::vector>& sortingVector) -{ std::sort(sortingVector.begin(), sortingVector.end()); std::vector sortedResults; + sortedResults.reserve(sortingVector.size()); for (auto x : sortingVector) { - std::cout << x.first << std::endl; sortedResults.push_back(x.second); } return sortedResults; @@ -489,31 +483,25 @@ std::vector CoreDataset::getAllDatasetUuids(std::shared_ptr datatypeSpecifics, bool sortByTime) { - std::vector allIdsFromTimeTree = std::vector(); + std::optional> allIdsFromTimeTree = + std::vector(); seerep_core_msgs::AabbTime aabbtime(seerep_core_msgs::TimePoint(((int64_t)std::numeric_limits::min() << 32 | ((uint64_t)std::numeric_limits::min()))), seerep_core_msgs::TimePoint(((int64_t)std::numeric_limits::max()) << 32 | ((uint64_t)std::numeric_limits::max()))); datatypeSpecifics->timetree.query(boost::geometry::index::intersects(aabbtime), - std::back_inserter(allIdsFromTimeTree)); + std::back_inserter(allIdsFromTimeTree.value())); if (sortByTime) { - std::vector> sortingVector; - for (auto it = std::make_move_iterator(allIdsFromTimeTree.begin()), - end = std::make_move_iterator(allIdsFromTimeTree.end()); - it != end; ++it) - { - sortingVector.push_back(std::make_pair(boost::geometry::get<0>(it->first.min_corner()), it->second)); - } - return sortResultByTimeActualSorting(sortingVector); + return sortResultByTime(allIdsFromTimeTree); } else { std::vector allIds; - for (auto it = std::make_move_iterator(allIdsFromTimeTree.begin()), - end = std::make_move_iterator(allIdsFromTimeTree.end()); + for (auto it = std::make_move_iterator(allIdsFromTimeTree.value().begin()), + end = std::make_move_iterator(allIdsFromTimeTree.value().end()); it != end; ++it) { allIds.push_back(std::move(it->second));