4#include "downward/operator_id.h"
6#include "downward/algorithms/subscriber.h"
7#include "downward/utils/hash.h"
18 FactPair(
int var,
int value)
24 friend auto operator<=>(
const FactPair&,
const FactPair&) =
default;
31 static const FactPair no_fact;
34std::ostream& operator<<(std::ostream& os,
const FactPair& fact_pair);
37inline void feed(HashState& hash_state,
const FactPair& fact)
39 feed(hash_state, fact.var);
40 feed(hash_state, fact.value);
44class PlanningTask :
public subscriber::SubscriberService<PlanningTask> {
46 virtual int get_num_variables()
const = 0;
47 virtual std::string get_variable_name(
int var)
const = 0;
48 virtual int get_variable_domain_size(
int var)
const = 0;
49 virtual int get_variable_axiom_layer(
int var)
const = 0;
50 virtual int get_variable_default_axiom_value(
int var)
const = 0;
51 virtual std::string get_fact_name(
const FactPair& fact)
const = 0;
53 are_facts_mutex(
const FactPair& fact1,
const FactPair& fact2)
const = 0;
55 virtual int get_num_axioms()
const = 0;
56 virtual std::string get_axiom_name(
int index)
const = 0;
57 virtual int get_num_axiom_preconditions(
int index)
const = 0;
59 get_axiom_precondition(
int op_index,
int fact_index)
const = 0;
60 virtual int get_num_axiom_effects(
int op_index)
const = 0;
62 get_num_axiom_effect_conditions(
int op_index,
int eff_index)
const = 0;
64 get_axiom_effect_condition(
int op_index,
int eff_index,
int cond_index)
66 virtual FactPair get_axiom_effect(
int op_index,
int eff_index)
const = 0;
68 virtual std::string get_operator_name(
int index)
const = 0;
69 virtual int get_num_operators()
const = 0;
70 virtual int get_num_operator_preconditions(
int index)
const = 0;
72 get_operator_precondition(
int op_index,
int fact_index)
const = 0;
74 virtual int get_num_goals()
const = 0;
75 virtual FactPair get_goal_fact(
int index)
const = 0;
77 virtual std::vector<int> get_initial_state_values()
const = 0;
89 virtual void convert_ancestor_state_values(
90 std::vector<int>& values,
91 const PlanningTask* ancestor_task)
const = 0;
100 convert_operator_index(
int index,
const PlanningTask* ancestor_task)
104class AbstractTask :
public PlanningTask {
106 virtual int get_operator_cost(
int index)
const = 0;
108 virtual int get_num_operator_effects(
int op_index)
const = 0;
110 get_num_operator_effect_conditions(
int op_index,
int eff_index)
const = 0;
112 get_operator_effect_condition(
int op_index,
int eff_index,
int cond_index)
114 virtual FactPair get_operator_effect(
int op_index,
int eff_index)
const = 0;