28 void produce_output(std::random_device& rd,
int iterations) {
30 std::cout << rd() <<
"\n";
38 int main(
int argc,
char* argv[])
try {
40 cfg.process_cmdline(argc, argv);
43 std::random_device rd;
44 produce_output(rd, cfg.iterations());
46 std::random_device rd(cfg.token());
47 produce_output(rd, cfg.iterations());
51 std::cerr <<
"usage: " << ex.what() << std::endl;
53 }
catch (std::exception
const& ex) {
54 std::cerr <<
"standard exception raised: " << ex.what() << std::endl;
57 std::cerr <<
"unknown exception raised" << std::endl;
63 #ifndef JB_ITCH5_DEFAULT_check_random_device_token 64 #define JB_ITCH5_DEFAULT_check_random_device_token default_initialization_marker 65 #endif // JB_ITCH5_DEFAULT_check_random_device_token 67 #ifndef JB_ITCH5_DEFAULT_check_random_device_iterations 68 #define JB_ITCH5_DEFAULT_check_random_device_iterations 1000 69 #endif // JB_ITCH5_DEFAULT_check_random_device_iterations 80 "Define how many values to extract from std::random_device."),
84 "Define the parameter to initialize the random device." 85 "The semantics are implementation defined, but on libc++ and " 86 "libstd++ the value is the name of a device to read, such as " 87 "'/dev/random' or '/dev/urandom'"),
91 void config::validate()
const {
93 std::ostringstream os;
94 os <<
"--iterations (" <<
iterations() <<
") must be >= 0";
Define defaults for program parameters.
Base class for all configuration objects.
virtual void validate() const
Validate the settings.
#define JB_ITCH5_DEFAULT_check_random_device_token
#define config_object_constructors(NAME)
#define JB_ITCH5_DEFAULT_check_random_device_iterations
Helper class to easily define configuration attributes.
char const default_initialization_marker[]
A simple class to communicate the result of parsing the options.
int main(int argc, char *argv[])