File config.hpp¶
File List > application > config.hpp
Go to the documentation of this file
#ifndef ZMBT_APPLICATION_CONFIG_HPP_
#define ZMBT_APPLICATION_CONFIG_HPP_
#include <boost/json.hpp>
#include <atomic>
#include <functional>
#include <memory>
#include <random>
#include "test_failure.hpp"
namespace zmbt {
class Config final
{
public:
using FailureHandler = std::function<void(boost::json::value const&)>;
Config();
Config(Config const&) = default;
Config(Config &&) = default;
Config& operator=(Config const&) = default;
Config& operator=(Config &&) = default;
~Config() = default;
Config& SetRngSeed(std::uint64_t const seed);
Config& ResetRng();
std::mt19937& Rng();
Config& SetFailureHandler(FailureHandler const& fn);
Config& ResetFailureHandler();
Config& HandleTestFailure(boost::json::value const& diagnostics);
std::uint64_t RngSeed() const;
private:
struct PersistentConfig
{
std::uint64_t rng_seed{0x6a09e667f3bcc909ULL};
std::atomic<std::uint64_t> rng_counter{0};
std::atomic<std::uint64_t> rng_epoch{0};
FailureHandler failure_handler {&zmbt::default_test_failure};
};
std::shared_ptr<PersistentConfig> config_;
};
}
#endif // ZMBT_APPLICATION_CONFIG_HPP_