-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathgenerator.hpp
More file actions
86 lines (59 loc) · 1.91 KB
/
generator.hpp
File metadata and controls
86 lines (59 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#pragma once
#include <memory>
#include "lang/program.hpp"
#include "math/number.hpp"
#include "mine/stats.hpp"
#include "sys/util.hpp"
class Generator {
public:
using UPtr = std::unique_ptr<Generator>;
class Config {
public:
int64_t version = 1;
int64_t length = 0;
int64_t max_constant = 0;
int64_t max_index = 0;
double mutation_rate = 0.0;
bool loops = true;
bool calls = true;
bool indirect_access = false;
std::vector<std::string> templates;
std::string batch_file;
std::string miner;
};
class Factory {
public:
static Generator::UPtr createGenerator(const Config &config,
const Stats &stats);
};
Generator(const Config &config, const Stats &stats);
virtual ~Generator() {}
virtual Program generateProgram() = 0;
virtual std::pair<Operation, double> generateOperation() = 0;
virtual bool supportsRestart() const = 0;
virtual bool isFinished() const = 0;
const Config config;
const RandomProgramIds2 random_program_ids;
protected:
void generateStateless(Program &p, size_t num_operations);
void applyPostprocessing(Program &p);
std::vector<int64_t> fixCausality(Program &p);
void fixSingularities(Program &p);
void fixCalls(Program &p);
void ensureSourceNotOverwritten(Program &p);
void ensureTargetWritten(Program &p,
const std::vector<int64_t> &written_cells);
void ensureMeaningfulLoops(Program &p);
};
class MultiGenerator : public Generator {
public:
MultiGenerator(const Settings &settings, const Stats &stats);
virtual Program generateProgram() override;
virtual std::pair<Operation, double> generateOperation() override;
virtual bool supportsRestart() const override;
virtual bool isFinished() const override;
private:
std::vector<Generator::Config> configs;
std::vector<Generator::UPtr> generators;
size_t current_generator;
};