// // tape.hpp // shared_random_generator // // Created by Sam Jaffe on 3/19/23. // Copyright © 2023 Sam Jaffe. All rights reserved. // #pragma once #include #include #include #include #include namespace engine::random { class Tape : public Device { public: // Allow for the serialization and de-serialization of this Tape using serial_type = std::vector>; private: enum class Type : char; template struct EntryT; struct Entry; private: size_t index_{0}; // transient std::vector entries_; public: Tape() = default; Tape(serial_type serial); explicit operator serial_type() const; unsigned int exclusive(unsigned int max) override; double exclusive(double min, double max) override; double inclusive(double min, double max) override; void exclusive(unsigned int max, unsigned int result); void exclusive(double min, double max, double result); void inclusive(double min, double max, double result); private: template T fetch(Type type, T min, T max); }; }