8 #include <boost/unordered_map.hpp>
11 #include "timed_word.hh"
19 virtual bool answerQuery(
const TimedWord &timedWord) = 0;
20 [[nodiscard]]
virtual std::size_t count()
const = 0;
23 virtual std::ostream &printStatistics(std::ostream &stream)
const {
24 stream <<
"Number of membership queries: " << this->count() <<
"\n";
35 std::unique_ptr<SUL> sul;
41 std::string word = timedWord.getWord();
42 std::vector<double> duration = timedWord.getDurations();
43 bool result = sul->step(duration[0]);
44 for (std::size_t i = 0; i < timedWord.
wordSize(); i++) {
46 result = sul->step(duration[i + 1]);
53 [[nodiscard]]
size_t count()
const override {
54 return this->sul->count();
62 std::unique_ptr<MembershipOracle> oracle;
63 boost::unordered_map<TimedWord, bool> membershipCache;
64 std::size_t countNoCache = 0;
67 explicit MembershipOracleCache(std::unique_ptr<MembershipOracle> &&oracle) : oracle(std::move(oracle)) {}
69 bool answerQuery(
const TimedWord &timedWord)
override {
71 auto it = this->membershipCache.find(timedWord);
72 if (it != membershipCache.end()) {
75 const auto result = this->oracle->answerQuery(timedWord);
76 this->membershipCache[timedWord] = result;
81 [[nodiscard]]
size_t count()
const override {
82 return this->oracle->count();
85 std::ostream &printStatistics(std::ostream &stream)
const override {
86 stream <<
"Number of membership queries: " << countNoCache <<
"\n";
87 stream <<
"Number of membership queries (with cache): " << this->count() <<
"\n";
Wrapper of a membership oracle to cache the result.
Definition: membership_oracle.hh:61
Interface of a membership oracle.
Definition: membership_oracle.hh:17
Membership oracle defined by an SUL.
Definition: membership_oracle.hh:33
A timed word.
Definition: timed_word.hh:25
std::size_t wordSize() const
Return the number of the actions in this timed word.
Definition: timed_word.hh:150
Definition: experiment_runner.hh:23