custom_order.cpp
Go to the documentation of this file.
2 
3 namespace f2c::rp {
4 
5 CustomOrder::CustomOrder(const std::vector<size_t>& order) :
6  custom_order(order) {
7 }
8 
9 CustomOrder::~CustomOrder() = default;
10 
11 void CustomOrder::setCustomOrder(const std::vector<size_t>& order) {
12  custom_order = order;
13 }
14 
15 
17  check(swaths);
18  F2CSwaths sorted_swaths(swaths.size());
19  for (size_t i = 0; i < custom_order.size(); ++i) {
20  sorted_swaths[i] = swaths[custom_order[i]];
21  }
22  swaths = std::move(sorted_swaths);
23 }
24 
25 void CustomOrder::check(const F2CSwaths& swaths) const {
26  // unique vector
27  std::vector<size_t> unique(custom_order.begin(), custom_order.end());
28  // sort the unique vector
29  std::sort(unique.begin(), unique.end());
30  auto last = std::unique(unique.begin(), unique.end());
31  unique.erase(last, unique.end());
32  // check the sizes
33  if (unique.size() != custom_order.size()) {
34  throw std::invalid_argument(
35  "Order vector does not contain unique elements.");
36  }
37 
38  if (swaths.size() != custom_order.size()) {
39  throw std::length_error(
40  "Lengths of the order vector and swaths must be the same.");
41  }
42  auto max_el = *std::max_element(custom_order.begin(), custom_order.end());
43  if (max_el > swaths.size() - 1) {
44  throw std::invalid_argument( \
45  "Custom order element is out of the swath range [" + \
46  std::to_string(max_el) + "]");
47  }
48 }
49 
50 } // namespace f2c::rp
5_route_planning.swaths
swaths
Definition: 5_route_planning.py:58
custom_order.h
f2c::rp::CustomOrder::sortSwaths
void sortSwaths(F2CSwaths &swaths) const override
Definition: custom_order.cpp:16
f2c::rp::CustomOrder::custom_order
std::vector< size_t > custom_order
Definition: custom_order.h:26
f2c::rp::CustomOrder::check
void check(const F2CSwaths &swaths) const
Definition: custom_order.cpp:25
f2c::rp::CustomOrder::setCustomOrder
void setCustomOrder(const std::vector< size_t > &order)
Definition: custom_order.cpp:11
f2c::rp
Route planning algorithms' namespace.
Definition: boustrophedon_order.h:14
f2c::rp::CustomOrder::~CustomOrder
~CustomOrder()
f2c::rp::CustomOrder::CustomOrder
CustomOrder(const std::vector< size_t > &order=std::vector< size_t >())
Definition: custom_order.cpp:5
f2c::types::Swaths
Definition: Swaths.h:20
f2c::types::to_string
std::string to_string(double d, const int precision=6)
Definition: Path.cpp:274


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31