#ifndef RANDOM_HH #define RANDOM_HH #include #include #include #include #include #include #include "book.hh" #include "person.hh" namespace book_store::utility::random { constexpr std::array names = { "James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Thomas", "Charles", "Daniel", "Matthew", "Anthony", "Donald", "Mark", "Paul", "Steven", "Andrew", "Kenneth", "Joshua", "George", "Kevin", "Brian", "Edward", "Ronald", "Timothy", "Jason", "Jeffrey", "Ryan", "Jacob", "Gary", "Nicholas", "Eric", "Stephen", "Jonathan", "Larry", "Justin", "Scott", "Brandon", "Frank", "Benjamin", "Gregory", "Samuel", "Raymond", "Patrick", "Alexander", "Jack", "Dennis", "Jerry", "Tyler"}; constexpr std::array book_title_parts = { "The", "A", "An", "In", "Of", "And", "To", "For", "With", "On", "At", "By", "From", "Up", "About", "Into", "Over", "After", "Between", "Out", "Against", "Under", "Without", "Within", "Along", "Across", "Behind", "Beyond", "Through", "Around", "Among", "Upon", "Beside", "Toward", "Against", "Upon", "Amongst", "Between", "Within", "Without", "Underneath", "Under", "Over", "Into", "About", "Up", "From", "By", "At", "On"}; constexpr std::array publishers = { "Penguin", "Random House", "HarperCollins", "Simon & Schuster", "Macmillan", "Hachette", "Harlequin", "Scholastic", "Pearson", "Houghton Mifflin"}; class book_random_engine { private: std::mt19937 _random_number_generator; public: book_random_engine() : _random_number_generator(std::random_device{}()) {} explicit book_random_engine(std::mt19937 random_number_generator) : _random_number_generator(random_number_generator) {} book_random_engine(const book_random_engine &) = default; book_random_engine(book_random_engine &&) = default; auto title() -> std::string; auto name() -> std::string; auto author() -> consumer::person; auto authors() -> std::vector; auto publisher() -> std::string; auto isbn() -> std::string; auto price_usd() -> double; auto copy_count() -> product::book::size_type; auto id() -> std::size_t; auto operator=(const book_random_engine &) -> book_random_engine & = default; auto operator=(book_random_engine &&) -> book_random_engine & = default; }; } // namespace book_store::utility::random #endif // RANDOM_HH