diff --git a/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h b/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h index cc91d13156c656324380141672066e1ece5fee6a..31442cce2ab320dc02421d8b906e28377ee8dc23 100644 --- a/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h +++ b/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h @@ -71,7 +71,7 @@ private: Mantid::API::MatrixWorkspace_const_sptr inputWorkspace, Mantid::API::MatrixWorkspace_sptr outputWorkspace, const size_t sizeOfX, const size_t sizeOfY, - unsigned int specNum); + unsigned int specNum); }; } // namespace Algorithms diff --git a/Framework/Algorithms/src/SortXAxis2.cpp b/Framework/Algorithms/src/SortXAxis2.cpp index 6747920f126908444e32506fecda4933c042e366..60f0c2c7599f7502635ce7db9a0c4c5a8edada71 100644 --- a/Framework/Algorithms/src/SortXAxis2.cpp +++ b/Framework/Algorithms/src/SortXAxis2.cpp @@ -67,22 +67,26 @@ std::vector<std::size_t> SortXAxis::createIndexes(const size_t sizeOfX) { return workspaceIndicies; } +template <typename Comparator> +void sortByXValue(std::vector<std::size_t> &workspaceIndicies, + MatrixWorkspace_const_sptr inputWorkspace, + unsigned int specNum, + Comparator const& compare) { + std::sort(workspaceIndicies.begin(), workspaceIndicies.end(), + [&](std::size_t lhs, std::size_t rhs) -> bool { + return compare(inputWorkspace->x(specNum)[lhs], + inputWorkspace->x(specNum)[rhs]); + }); +} + void SortXAxis::sortIndicesByX(std::vector<std::size_t> &workspaceIndicies, std::string order, MatrixWorkspace_const_sptr inputWorkspace, unsigned int specNum) { if (order == "Ascending") { - std::sort(workspaceIndicies.begin(), workspaceIndicies.end(), - [&](std::size_t lhs, std::size_t rhs) -> bool { - return inputWorkspace->x(specNum)[lhs] < - inputWorkspace->x(specNum)[rhs]; - }); + sortByXValue(workspaceIndicies, inputWorkspace, specNum, std::less<double>()); } else if (order == "Descending") { - std::sort(workspaceIndicies.begin(), workspaceIndicies.end(), - [&](std::size_t lhs, std::size_t rhs) -> bool { - return inputWorkspace->x(specNum)[lhs] > - inputWorkspace->x(specNum)[rhs]; - }); + sortByXValue(workspaceIndicies, inputWorkspace, specNum, std::greater<double>()); } }