Horizon
Loading...
Searching...
No Matches
board_rules_check_util.hpp
1#pragma once
2#include <string>
3#include "clipper/clipper.hpp"
4#include <cstdint>
5#include <range/v3/view.hpp>
7
8namespace horizon {
9std::string get_net_name(const class Net *net);
10
11ClipperLib::IntRect get_patch_bb(const ClipperLib::Paths &patch);
12bool bbox_test_overlap(const ClipperLib::IntRect &bb1, const ClipperLib::IntRect &bb2, uint64_t clearance);
13void format_progress(std::ostringstream &oss, size_t i, size_t n);
14
15
16template <typename... ArgsGetRule, typename Tfn, typename... ArgsGetClearance>
17auto find_clearance(const class BoardRules &rules, Tfn fn, const std::set<int> &layers,
18 std::tuple<ArgsGetRule...> args_get_rule, std::tuple<ArgsGetClearance...> args_get_clearance)
19{
20
21 return ranges::min(layers | ranges::views::transform([&rules, fn, &args_get_clearance, &args_get_rule](int layer) {
22 auto &rule = std::apply(
23 [&rules, fn, layer ](auto &&...args) -> const auto & {
24 return std::invoke(fn, rules, args..., layer);
25 },
26 args_get_rule);
27
28 return std::apply([&rule](auto &&...args) { return rule.get_clearance(args...); },
29 args_get_clearance);
30 }));
31}
32
33} // namespace horizon
Definition clipper.hpp:197