1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| // Le fichier à compiler
#include <iostream>
#include <cassert>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include "common.hpp"
#include "parameters.hpp"
/*===========================================================================*/
/*==================================[ Parameters ]===========================*/
/*===========================================================================*/
boost::scoped_ptr<Parameters> Parameters::instance_(0);
/*static*/ Parameters & Parameters::instance()
{
assert(instance_);
return *instance_;
}
/*static*/ Parameters & Parameters::construct_instance(int argc, char ** argv)
{
assert(!instance_);
instance_.reset(new Parameters(argc, argv));
return instance();
}
Parameters::Parameters(int argc, char ** argv)
: verbose_level_ (default_verbose_level)
{
// Some generic options
po::options_description generic("Options");
generic.add_options()
("version,V", "print version string")
("help,h", "produce help message")
;
// Specific options
po::options_description cw_opt_desc(PROGNAME " options");
cw_opt_desc.add_options()
("verbose,v", po::value(&verbose_level_)->default_value(default_verbose_level)->implicit(),
// PB: replace «arg» by «VERBOSE-LEVEL»
"\n\t" "If VERBOSE-LEVEL is not specified, it is assumed to be 1."
"\n\t" "== 0 : Silent execution [default]"
"\n\t" ">= 1 : Display xxxx"
)
("dest-dir,d",
po::value(&dest_dir_)->default_value(default_dest_dir)->implicit(),
"Destination directory")
("regex,r",
po::value(®ex_)->default_value(default_regex_)->implicit(),
"Regex used to determine xxxxxxx")
;
// Merge the multiple sources
po::options_description cmdline_options;
cmdline_options.add(generic).add(cw_opt_desc);
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, cmdline_options), vm);
po::notify(vm);
if (vm.count("help")) {
std::cout << help << "\n";
std::cout << cmdline_options << "\n";
throw 1;
}
if (vm.count("version")) {
std::cout << PROGNAME ", version " VERSION "\n";
throw 0;
}
regex_ = "<\\s*A\\s+[^>]*href\\s*=\\s*[\"']([^\"']*"
+ regex_ + ")[\"']";
// Display some internal variables if verbose_level >= 2
if (verbose_level_ >= 2) {
std::cout << "verbose = " << verbose_level_ << "\n";
std::cout << "dst-dir = " << dest_dir_ << "\n";
std::cout << "rgx = " << regex_ << "\n";
}
} |
Partager