PerceMon
monitoring.hpp
1#pragma once
2
3#ifndef __PERCEMON_MONITORING_HPP__
4#define __PERCEMON_MONITORING_HPP__
5
6#include "percemon/ast.hpp"
7#include "percemon/datastream.hpp"
8
9// TODO: Consider unordered_map if memory and hashing isn't an issue.
10#include <map>
11
12// TODO: Consider performance/space efficiency of deque vs vector.
13#include <deque>
14
15#include <optional>
16
17namespace percemon::monitoring {
18
25// bool is_past_time(const percemon::ast::Expr& expr);
26
31std::optional<size_t> get_horizon(const percemon::ast::Expr& expr);
32
37std::optional<size_t> get_horizon(const percemon::ast::Expr& expr, double fps);
38
43 public:
44 OnlineMonitor() = delete;
46 ast::Expr phi_,
47 const double fps_,
48 double x_boundary,
49 double y_boundary);
50
54 void add_frame(const datastream::Frame& frame);
55 void add_frame(datastream::Frame&& frame); // Efficient move semantics
56
60 double eval();
61
62 [[nodiscard]] size_t get_max_horizon() const { return max_horizon; }
63 [[nodiscard]] size_t get_fps() const { return fps; };
64 const ast::Expr& get_phi() { return phi; }
65
66 private:
70 const ast::Expr phi;
74 const double fps;
75
80 std::deque<datastream::Frame> buffer;
81
85 size_t max_horizon;
86
90 double universe_x, universe_y;
91};
92
93} // namespace percemon::monitoring
94
95#endif /* end of include guard: __PERCEMON_MONITORING_HPP__ */
Definition: datastream.hpp:50
Definition: monitoring.hpp:42
void add_frame(const datastream::Frame &frame)