AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
successor_generator_factory.h
1#ifndef TASK_UTILS_SUCCESSOR_GENERATOR_FACTORY_H
2#define TASK_UTILS_SUCCESSOR_GENERATOR_FACTORY_H
3
4#include <memory>
5#include <vector>
6
7class PlanningTaskProxy;
8
9namespace successor_generator {
10class GeneratorBase;
11
12using GeneratorPtr = std::unique_ptr<GeneratorBase>;
13
14struct OperatorRange;
15class OperatorInfo;
16
17class SuccessorGeneratorFactory {
18 using ValuesAndGenerators = std::vector<std::pair<int, GeneratorPtr>>;
19
20 const PlanningTaskProxy& task_proxy;
21 std::vector<OperatorInfo> operator_infos;
22
23 GeneratorPtr construct_fork(std::vector<GeneratorPtr> nodes) const;
24 GeneratorPtr construct_leaf(OperatorRange range) const;
25 GeneratorPtr construct_switch(
26 int switch_var_id,
27 ValuesAndGenerators values_and_generators) const;
28 GeneratorPtr construct_recursive(int depth, OperatorRange range) const;
29
30public:
31 explicit SuccessorGeneratorFactory(const PlanningTaskProxy& task_proxy);
32 // Destructor cannot be implicit because OperatorInfo is forward-declared.
33 ~SuccessorGeneratorFactory();
34 GeneratorPtr create();
35};
36} // namespace successor_generator
37
38#endif