/* * params.cpp * * Created on: Oct 3, 2010 * Author: Michael J. Fischer * for use in Yale course CPSC 427a, Fall 2010 */ #include "params.hpp" Params::Params(int argc, char* argv[]) : flagSeed(false), flagFileName(false), seed(time(0)), fileName("") { // Extract command name from full path name provided by some shells char* slash = strrchr(argv[0], '/'); char* prog = slash == NULL ? argv[0] : slash + 1; // Parse command arguments bool parseError = false; int opt; while ((opt = getopt(argc, argv, "s:f:")) != -1) { switch (opt) { case 's': flagSeed = true; seed = strtoul(optarg, NULL, 0); break; case 'f': flagFileName = true; fileName = optarg; break; default: // '?' parseError = true; break; } } if (parseError || (flagSeed && flagFileName) || argc != optind + 1) { cout << "usage: " << prog << " [-f filename | -s seed] num_rounds" << endl; exit(1); } numRounds = strtol(argv[optind], NULL, 0); }; ostream& Params::print(ostream& out) const { out << "[Params:\n"; out << " flagSeed=" << flagSeed << "\n"; out << " flagFileName=" << flagFileName << "\n"; out << " seed=" << seed << "\n"; out << " fileName=" << fileName << "\n"; out << " flagFileName=" << flagFileName << "\n"; out << " numRounds=" << numRounds << "\n"; out << "End Params]" << endl; return out; }