Inter4ql  5.2
ModuleLocal.h
1 #ifndef __MODULELOCAL_H__
2 #define __MODULELOCAL_H__
3 
4 #include "ModuleGeneric.h"
5 
6 #include "Constraints.h"
7 #include "Types.h"
8 
9 #include <map>
10 #include <memory>
11 #include <string>
12 #include <unordered_map>
13 #include <vector>
14 
15 namespace Inter4ql {
16 
17  class Rule;
18  class Domain;
19  class Relation;
20  class Result;
21  class Fact;
24  class ModuleLocal : public ModuleGeneric {
25  public:
35  ModuleLocal(std::string a_name,
36  Constraints* _constraints,
37  std::vector<Domain*> *_domains,
38  std::vector<Relation*> *_relations,
39  std::vector<Rule*> *_rules,
40  std::vector<Fact*> *_facts);
44  ~ModuleLocal();
45  logic_type::type ask_for_ground_fact(Fact *instance) const;
46  Relation *get_relation(std::string s) const;
47  virtual std::vector<Domain*> *get_domains() const override;
48  std::vector<Relation*> *get_relations() const;
49  std::vector<Rule*> *get_rules() const;
50  std::vector<Fact*> *get_facts() const;
51  std::string get_name() const;
52  std::string print();
53  module_type::type get_module_type() const;
54  void generate_facts();
55  void reason();
56  void reason_with_rules(std::vector<Rule*>* rules);
57  Result ask_for_result(Fact * term) const;
63  variable_type::type get_domain_type(std::string name);
68  void add_domain(Domain *d);
73  void add_relation(Relation *r);
78  void add_fact(Fact *r);
83  void add_rule(Rule *r);
88  Constraints* get_constraints() const override { return constraints; };
93  virtual database* get_wsm_database() { return &database_; }
98  bool check_constraints_local(bool check_rigid, bool check_flexible) const override;
103  void set_disable_constraints(bool value) const override { disable_constraints = value; };
108  bool constraints_violated() override;
109  private:
110  /* returns true when actually adds something */
111  bool reason_about_rule(Rule * rule, logic_type::type target_logic_value);
112  void generate_unknown_facts(Relation * relation);
113  void initialize_database();
114  int database_fingerprint(Inter4ql::database db);
115 
116  bool add_to_variable_space(std::string module, std::string relation, std::vector<Value*> val);
117  void generate_domain_facts(bool should_initialize = true);
118 
119  void print_database();
120 
121  std::string name;
122  Constraints* constraints;
123  std::vector<Domain *> *domains;
124  std::vector<Relation *> *relations;
125  std::vector<Fact *> *facts;
126  std::vector<Rule*> *rules;
127 
128  mutable bool disable_constraints;
129 
130  std::vector<Domain *> *domainsToDelete;
131 
132  protected:
133  Inter4ql::database database_;
134  };
135 }
136 
137 #endif /* __MODULELOCAL_H__ */
138 
bool check_constraints_local(bool check_rigid, bool check_flexible) const override
allows for disabling constraints check
Definition: ModuleLocal.cc:287
virtual std::vector< Domain * > * get_domains() const override
getter for domains
Definition: ModuleLocal.cc:115
module_type::type get_module_type() const
getter for module type
Definition: ModuleLocal.cc:156
void add_domain(Domain *d)
method adds Domain into Domain vector
Definition: ModuleLocal.cc:164
type
Enumeration type for four-valued logic.
Definition: Types.h:45
class that implements a fact
Definition: Fact.h:14
void reason_with_rules(std::vector< Rule *> *rules)
performs reasing with additional Rules added
Definition: ModuleLocal.cc:184
Result ask_for_result(Fact *term) const
provides valuations matching given Fact
Definition: ModuleLocal.cc:307
Relation * get_relation(std::string s) const
getter for a relation
Definition: ModuleLocal.cc:100
std::string print()
function that returns string with module information
Definition: ModuleLocal.cc:123
virtual database * get_wsm_database()
fetches a database of facts from well-supported model (for summing purposes)
Definition: ModuleLocal.h:93
Definition: Result.h:16
Definition: Application.cc:37
~ModuleLocal()
destructor
Definition: ModuleLocal.cc:48
bool constraints_violated() override
checks whether constraints are violated
Definition: ModuleLocal.cc:682
Domain class - class that points to a data type.
Definition: Domain.h:12
void reason()
performs reasoning
Definition: ModuleLocal.cc:194
void set_disable_constraints(bool value) const override
allows for disabling constraints check
Definition: ModuleLocal.h:103
Generic class of module (only virtual methods)
Definition: ModuleGeneric.h:21
ModuleLocal(std::string a_name, Constraints *_constraints, std::vector< Domain *> *_domains, std::vector< Relation *> *_relations, std::vector< Rule *> *_rules, std::vector< Fact *> *_facts)
constructor
Definition: ModuleLocal.cc:21
Implementation of ModuleGeneric for modules with reasoning.
Definition: ModuleLocal.h:24
void add_relation(Relation *r)
method adds Relation into Relation vector
Definition: ModuleLocal.cc:169
class that handles rules in ModuleLocal
Definition: Rule.h:14
std::vector< Relation * > * get_relations() const
getter for module relations
Definition: ModuleLocal.cc:107
Constraints * get_constraints() const override
getter for constraints
Definition: ModuleLocal.h:88
void add_fact(Fact *r)
method adds Fact into Fact vector
Definition: ModuleLocal.cc:174
Output class handles standard output of interpreter.
Definition: Constraints.h:68
std::string get_name() const
getter for a name of module
Definition: ModuleLocal.cc:119
type
Enumeration type for types of values.
Definition: Types.h:26
void add_rule(Rule *r)
method adds Rule into Rule vector
Definition: ModuleLocal.cc:179
variable_type::type get_domain_type(std::string name)
method gives type of a domain inside module
Definition: ModuleLocal.cc:85
class that handles relation instance inside modules
Definition: Relation.h:13