VIPRA Documentation
Loading...
Searching...
No Matches
condition.hpp
1#pragma once
2
3#include <algorithm>
4#include <optional>
5#include <vector>
6
7#include "vipra/vipra_behaviors/conditions/sub_condition.hpp"
8#include "vipra/vipra_behaviors/definitions/sim_pack.hpp"
9#include "vipra/vipra_behaviors/targets/target.hpp"
10#include "vipra/vipra_behaviors/util/class_types.hpp"
11#include "vipra/vipra_behaviors/util/timed_latch.hpp"
12
13namespace VIPRA::Behaviors {
14class Condition {
15 DEFAULT_CONSTRUCTIBLE(Condition)
16 COPYABLE(Condition)
17 MOVEABLE(Condition)
18 public:
19 void initialize(Simpack pack)
20 {
21 if ( _conditions.size() > 1 ) {
22 _temp.resize(pack.pedset.num_pedestrians());
23 std::fill(_temp.begin(), _temp.end(), false);
24 }
25 }
26
37 void evaluate(Simpack pack, VIPRA::idxVec const& peds, std::vector<bool>& met,
38 std::vector<Target> const& targets,
39 std::optional<TimedLatchCollection>& latches);
40
41 void add_operation(BoolOp oper) { _steps.emplace_back(oper); }
42 void add_subcondition(SubCondition&& condition) { _conditions.emplace_back(condition); }
43
44 private:
45 std::vector<SubCondition> _conditions;
46 std::vector<BoolOp> _steps;
47 std::vector<bool> _temp;
48
57 static void handle_latches(Simpack pack, std::optional<TimedLatchCollection>& latches,
58 std::vector<bool>& met);
59};
60} // namespace VIPRA::Behaviors
Definition condition.hpp:14
void evaluate(Simpack pack, VIPRA::idxVec const &peds, std::vector< bool > &met, std::vector< Target > const &targets, std::optional< TimedLatchCollection > &latches)
Evaluates whether a condition is met for a group of pedestrians, writes to 'met' vector.
Definition condition.cpp:19
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23