#pragma once #include #include #include #include #include "random_generator.hpp" namespace fuzzer { using input_score = uint64_t; using input_handler = input_score(std::span); struct input_entry { std::vector data{}; input_score score{}; }; class input_generator { public: input_generator(); void access_input(const std::function& handler); input_entry get_highest_scorer(); double get_average_score(); private: std::mutex mutex_{}; random_generator rng{}; std::vector top_scorer_{}; input_score lowest_score{0}; size_t lowest_scorer{0}; input_entry highest_scorer_{}; std::vector generate_next_input(); void store_input_entry(input_entry entry); }; }