src/services/selection.hpp
BeforeProposed
+14−2
33#include <algorithm>
44
55inline std::vector<Page> select_pages(const Catalogue& catalogue, const Json& selection) {
6 // Implement explicit page-range selection.
7 return catalogue.all();
6 if (selection.is_null()) return catalogue.all();
7 require(selection.is_array() && selection.size() <= 500, "selection must be an array");
8 std::vector<Page> result;
9 std::set<int> selected;
10 for (const auto& range : selection) {
11 require(range.is_object() && range.contains("from") && range.contains("to"), "selection range required");
12 auto first = bounded(range["from"], 1, static_cast<int>(catalogue.size()), "from");
13 auto last = bounded(range["to"], 1, static_cast<int>(catalogue.size()), "to");
14 require(first <= last, "selection ranges must ascend");
15 for (int page = first; page <= last; ++page) {
16 if (selected.insert(page).second) result.push_back(catalogue.at(page));
17 }
18 }
19 return result;
820}
921
1022inline Json selected_ids(const std::vector<Page>& pages) {