86 #ifndef pattern_extractor_h
87 #define pattern_extractor_h
89 #include "../r_code/time_buffer.h"
91 #include "binding_map.h"
92 #include "guard_builder.h"
93 #include "cst_controller.h"
98 class AutoFocusController;
105 bool eligible_cause_;
108 Input(
View *input,
_Fact *abstraction,
BindingMap *bindings) : input_(input->object_), ijt_(input->get_ijt()), eligible_cause_(IsEligibleCause(input)), abstraction_(abstraction), bindings_(bindings) {}
109 Input() : input_(NULL), eligible_cause_(
false), abstraction_(NULL), bindings_(NULL), ijt_(std::chrono::seconds(0)) {}
110 Input(
const Input &original) : input_(original.input_), eligible_cause_(original.eligible_cause_), abstraction_(original.abstraction_), bindings_(original.bindings_), ijt_(original.ijt_) {}
116 bool operator ()(
Input &i, Timestamp time_reference, std::chrono::microseconds thz)
const {
118 return (time_reference - i.ijt_ > thz);
130 CInput(
View *input,
_Fact *abstraction,
BindingMap *bindings) : input_(input), abstraction_(abstraction), bindings_(bindings), injected_(
false), ijt_(input->get_ijt()) {}
131 CInput() : input_(NULL), abstraction_(NULL), bindings_(NULL), injected_(
false), ijt_(std::chrono::seconds(0)) {}
133 bool operator ==(
const CInput &i)
const {
return input_ == i.input_; }
137 bool operator ()(
CInput &i, Timestamp time_reference, std::chrono::microseconds thz)
const {
139 return (time_reference - i.ijt_ > thz);
157 std::vector<P<BindingMap> > new_maps_;
166 _Fact *get_pattern()
const {
return abstracted_target_; }
167 BindingMap *get_bindings()
const {
return target_bindings_; }
170 virtual void signal(
View *input)
const;
171 virtual void ack_pred_success(
Success* success);
179 static const uint32 InputsInitialSize = 16;
196 this->f_icst = f_icst;
197 this->component_pattern = component_pattern;
201 _Fact* component_pattern;
205 std::vector<P<r_code::Code> > mdls_;
206 std::vector<P<r_code::Code> > csts_;
207 std::vector<P<_Fact> > f_icsts_;
209 void filter_icst_components(
ICST *icst, uint32 icst_index, std::vector<Component> &components);
220 static _Fact* find_f_icst_component(
_Fact* fact,
const _Fact* component,
int max_depth = 3);
230 void _find_f_icst(
_Fact *component, std::vector<FindFIcstResult>& results,
bool find_multiple);
240 void find_f_icst(
_Fact *component, std::vector<FindFIcstResult>& results,
bool find_multiple =
false);
260 bool build_requirement(
HLPBindingMap* bm,
r_code::Code* m0, std::chrono::microseconds period,
const std::vector<FindFIcstResult>& results,
262 void build_mdl_tail(
r_code::Code *mdl, uint16 write_index);
264 void inject_hlps()
const;
265 void inject_hlps(Timestamp analysis_starting_time);
267 virtual std::string get_header()
const = 0;
274 void debug(
View* ) {};
287 std::vector<P<_Fact> > predictions_;
292 std::string get_header()
const override;
298 void signal(
View *input)
const override;
305 void ack_pred_success(
Success* success)
override;
306 void reduce(
View *input);
319 bool build_mdl(
_Fact *cause,
_Fact *consequent,
GuardBuilder *guard_builder, std::chrono::microseconds period);
322 std::string get_header()
const override;
327 void signal(
View *input)
const override;
328 void reduce(
View *input);
342 bool stored_premise_;
345 GuardBuilder *get_default_guard_builder(
_Fact *cause,
_Fact *consequent, std::chrono::microseconds period);
348 bool build_mdl(
_Fact *cause,
_Fact *consequent,
GuardBuilder *guard_builder, std::chrono::microseconds period);
349 bool build_mdl(
_Fact *f_icst,
_Fact *cause_pattern,
_Fact *consequent,
GuardBuilder *guard_builder, std::chrono::microseconds period);
353 std::string get_header()
const override;