VIPRA Documentation
Loading...
Searching...
No Matches
subselector.hpp
1#pragma once
2
3#include <functional>
4#include <optional>
5
6#include "vipra/vipra_behaviors/conditions/condition.hpp"
7
8#include "vipra/vipra_behaviors/definitions/pedestrian_types.hpp"
9#include "vipra/vipra_behaviors/definitions/sim_pack.hpp"
10
11namespace VIPRA::Behaviors {
12
18 bool starved;
19 VIPRA::idxVec group;
20};
21
26using SelectorFunc =
27 std::function<SelectorResult(const VIPRA::idxVec&, const VIPRA::idxVec&, Simpack)>;
28
33class SubSelector {
34 NON_DEFAULT_CONSTRUCTIBLE(SubSelector)
35 COPYABLE(SubSelector)
36 MOVEABLE(SubSelector)
37
38 public:
39 SubSelector(typeUID grp, Ptype typ, bool req, SelectorFunc sel)
40 : group(grp), type(typ), required(req), _select(std::move(sel))
41 {
42 }
43
44 auto select_peds(const VIPRA::idxVec& totalGroup, const VIPRA::idxVec& usableGroup,
45 auto pack) -> SelectorResult
46 {
47 return _select(totalGroup, usableGroup, pack);
48 }
49
50 // NOLINTBEGIN - (rolland) Having these public increases readability : ignoring (cppcoreguidelines-non-private-member-variables-in-classes)
51 typeUID group;
52 Ptype type;
53 bool required;
54 // NOLINTEND
55
56 private:
57 SelectorFunc _select;
58 std::optional<Condition> _condition;
59};
60
61} // namespace VIPRA::Behaviors
Pedestrian Type, used as a composite of typeUIDs.
Definition pedestrian_types.hpp:23
Result of a selection.
Definition subselector.hpp:17
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23