#pragma once
#include <memory>
#include <utility>
#include <vector>
#include "context.hpp"
#include "memory_resource.hpp"
#include "pointer.hpp"
#include "ruleset.hpp"
namespace ddwaf {
class waf {
public:
explicit waf(std::shared_ptr<ruleset> ruleset) : ruleset_(std::move(ruleset)) {}
waf(const waf &) = default;
waf(waf &&) = default;
waf &operator=(const waf &) = default;
waf &operator=(waf &&) = default;
~waf() = default;
context create_context(nonnull_ptr<memory::memory_resource> alloc)
{
return context(ruleset_, alloc);
}
[[nodiscard]] const std::vector<const char *> &get_root_addresses() const
{
return ruleset_->get_root_addresses();
}
[[nodiscard]] const std::vector<const char *> &get_available_action_types() const
{
return ruleset_->get_available_action_types();
}
protected:
std::shared_ptr<ruleset> ruleset_;
};
}