home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C20 / ProgVals.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.2 KB  |  44 lines

  1. //: C20:ProgVals.cpp {O}
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. #include "ProgVals.h"
  7. using namespace std;
  8.  
  9. ProgVals::ProgVals(
  10.   std::string defaults[][2], int sz) {
  11.   for(int i = 0; i < sz; i++)
  12.     insert(make_pair(
  13.       defaults[i][0], defaults[i][1]));
  14. }
  15.  
  16. void ProgVals::parse(int argc, char* argv[],
  17.   string usage, int offset) {
  18.   // Parse and apply additional
  19.   // command-line arguments:
  20.   for(int i = offset; i < argc; i++) {
  21.     string flag(argv[i]);
  22.     int equal = flag.find('=');
  23.     if(equal == string::npos) {
  24.       cerr << "Command line error: " <<
  25.         argv[i] << endl << usage << endl;
  26.       continue; // Next argument
  27.     }
  28.     string name = flag.substr(0, equal);
  29.     string value = flag.substr(equal + 1);
  30.     if(find(name) == end()) {
  31.       cerr << name << endl << usage << endl;
  32.       continue; // Next argument
  33.     }
  34.     operator[](name) = value;
  35.   }
  36. }
  37.  
  38. void ProgVals::print(ostream& out) {
  39.   out << "Program values:" << endl;
  40.   for(iterator it = begin(); it != end(); it++)
  41.     out << (*it).first << " = "
  42.         << (*it).second << endl;
  43. } ///:~
  44.