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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
/**
* @file BaseCmd.cpp
* @brief Abstract commandline implementation
* @author Christopher Han <xiphux@gmail.com>
*
* Base structure for commandline parser class implementation
* Copyright (C) 2005. Licensed under the terms of the
* GNU GPL, v2 or later.
*/
#include "StdAfx.h"
#include "BaseCmd.h"
#include <iostream>
#include <cstdlib>
#include <cstdio>
namespace po = boost::program_options;
/**
* The base constructor sets up the default help and
* version options that should be available on all platforms.
*/
BaseCmd::BaseCmd(int _argc, char* _argv[]) : desc("Allowed options")
{
argc = _argc;
argv = _argv;
AddSwitch('h', "help", "This help message");
AddSwitch('V', "version", "Display program version");
}
/**
* The destructor currently does nothing
*/
BaseCmd::~BaseCmd()
{
}
std::string BaseCmd::GetInputFile()
{
if (vm.count("input-file"))
return vm["input-file"].as<std::string>();
else
return "";
}
void BaseCmd::AddSwitch(const char shortopt, std::string longopt, std::string desc)
{
if (shortopt) {
longopt += std::string(",") + shortopt;
}
all.add_options()(longopt.c_str(), desc.c_str());
}
void BaseCmd::AddString(const char shortopt, std::string longopt, std::string desc)
{
if (shortopt) {
longopt += std::string(",") + shortopt;
}
all.add_options()(longopt.c_str(), po::value<std::string>(), desc.c_str());
}
void BaseCmd::AddInt(const char shortopt, std::string longopt, std::string desc)
{
if (shortopt) {
longopt += std::string(",") + shortopt;
}
all.add_options()(longopt.c_str(), po::value<int>(), desc.c_str());
}
/**
* Iterates through and processes arguments
*/
void BaseCmd::Parse()
{
desc.add(all);
all.add_options()("input-file", po::value<std::string>(), "input file");
po::positional_options_description p;
p.add("input-file", 1);
po::store(po::command_line_parser(argc, argv).options(all).positional(p).run(), vm);
po::notify(vm);
}
/**
* Print out usage information, along with a list of commandline
* options that have been set up for this commandline parser.
*/
void BaseCmd::PrintUsage(std::string program, std::string version)
{
if (!program.empty()) {
std::cout << program;
if (!version.empty())
std::cout << " " << version;
std::cout << std::endl;
std::cout << "This program is licensed under the GNU General Public License" << std::endl;
}
std::cout << desc << std::endl;
}
bool BaseCmd::IsSet(const std::string& var) const
{
if (vm.count(var))
return true;
else
return false;
}
std::string BaseCmd::GetString(const std::string& var) const
{
if (vm.count(var))
return vm[var].as<std::string>();
else
return "";
}
int BaseCmd::GetInt(const std::string& var) const
{
if (vm.count(var))
return vm[var].as<int>();
else
return 0;
}
|