⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advconsole.cpp

📁 C++ image processing.Mainly it occupies some filters to detect some prperties of image. Release.
💻 CPP
字号:
/* 

This "SOFTWARE" is a free software.

You are allowed to download, use, modify and redistribute this software.
The software is provided "AS IS" without warranty of any kind.

Copyright: University of Koblenz-Landau

*/

/***********************************************
  Advanced Tools Version 1.0
  
  Copyright 2002, Patrick Sturm
************************************************/
 
#include <advconsole.h>
#include <stdlib.h>
#include <iostream>
using namespace std;


advConsoleParameters::advConsoleParameters(const string& initProgramName)
{
  programName=initProgramName;
}


void advConsoleParameters::addOptionSwitch(const string& name, const string& help)
{
  helpStr[name]=help;
  optionSwitchValues[name]=false;
}


void advConsoleParameters::addOptionProperty(const std::string& shortName, const std::string& fullName, const std::string& defaultValue, const std::string& help)
{
  if (shortName!="") optionFullnames[shortName]=fullName;
  helpStr[fullName]=help;
  helpStr[shortName]=help;
  optionPropertyValues[fullName]=defaultValue;
}


void advConsoleParameters::addObligatoryParameter(const string& name, const string& help)
{
  obligatoryParameters.push_back(name);
  obligatoryParameterValues.push_back(name);
  helpStr[name]=help;
}

std::string advConsoleParameters::GetHelp()
{

	std::string rvalue = "\n<<<<<<<<<< Help for " + programName + " >>>>>>>>>>\n\n";


	rvalue = rvalue + "Usage: \"" + programName + " ";

	int i;
	rvalue = rvalue + "[ ";
	for (std::map<std::string, std::string>::iterator itt = optionFullnames.begin(); itt != optionFullnames.end(); ++itt)
		rvalue = rvalue + itt->first + " ";// + optionPropertyValues[itt->second] + " ";
	rvalue = rvalue + "] ";

	for (i = 0; i < obligatoryParameters.size(); i++)
		rvalue = rvalue + obligatoryParameters[i] + " ";
	rvalue = rvalue + "\"\n\n";

	if (obligatoryParameters.size()) rvalue = rvalue + "mandatory parameters:" + "\n";
	for (i = 0; i < obligatoryParameters.size(); i++)
		rvalue = rvalue + obligatoryParameters[i] + " : " + GetHelp(obligatoryParameters[i]) + "\n";

	if (optionFullnames.size()) rvalue = rvalue + "optional parameters:" + "\n";
	for (std::map<std::string, std::string>::iterator it = optionFullnames.begin(); it != optionFullnames.end(); ++it)
		rvalue = rvalue + it->first + " : " + GetHelp(it->first) + "\n";

	if (optionSwitchValues.size()) rvalue = rvalue + "switches (boolean options):" + "\n";
	for (std::map<std::string, bool>::iterator itb = optionSwitchValues.begin(); itb != optionSwitchValues.end(); ++itb)
		rvalue = rvalue + itb->first + " : " + GetHelp(itb->first);

	rvalue = rvalue + "\n\n<<<<<<<<<< End of Help >>>>>>>>>>\n";

	//	optionFullnames
//	optionSwitchValues
	return rvalue;
}


bool advConsoleParameters::checkParameter(const string& name, const string& value)
{
  return true;
}


void advConsoleParameters::parseError(const string& message)
{
  cerr << message.c_str() << endl;
  exit(1);
}

#include <stdio.h>

int advConsoleParameters::parseCommandLine(int argc, const char* argv[])
{
  int i=0;

  // Start to read options
  while (i<argc)
  {
    if (optionSwitchValues.find(argv[i])!=optionSwitchValues.end())
    {
      optionSwitchValues[argv[i]]=true;
      i++; 
    }
    else if (optionFullnames.find(argv[i])!=optionFullnames.end())
    {
      if (i+1>=argc)
        parseError("Error: Too less parameters...");
      else if (!checkParameter(optionFullnames[argv[i]],argv[i+1]))
        parseError("Error: Parameter '"+string(argv[i+1])+"' is unknown...");
      else 
      {
        optionPropertyValues[optionFullnames[argv[i]]]=argv[i+1];
        i++;
      }
      i++;
    }
    else 
    {
      string property = argv[i];
      string::size_type firstPosition = property.find_first_of("=");

      if (firstPosition!=string::npos)
      {
        string key=property.substr(0,firstPosition);
        if (optionPropertyValues.find(key)!=optionPropertyValues.end())
        {
          string value=property.substr(firstPosition+1,property.length());
          if (!checkParameter(key,value))
            parseError("Error: Parameter '"+value+"' is unknown...");
          else optionPropertyValues[key]=value;
          i++;
        }
        else break;
      }
      else break;
    }
  }
  int paramNr = 0;
  while (i<argc && paramNr<obligatoryParameters.size())
  {
    if (checkParameter(obligatoryParameters[paramNr],argv[i]))
	{
      obligatoryParameterValues[paramNr]=argv[i];
	  paramNr++;
	}
    else parseError("Error: Parameter '"+string(argv[i])+"' is unknown...");
    i++;
  }
  if (i<argc) parseError("Error: Unknown parameter '"+string(argv[i])+"'...");

  return (argc-i);
}


const string& advConsoleParameters::getOptionProperty(const string& name)
{
  return optionPropertyValues[name];
}


const string& advConsoleParameters::getObligatoryParameter(const string& name)
{
  static string emptyString;

  int i=0;
  while (i<obligatoryParameters.size() && obligatoryParameters[i]!=name) i++;
  if (i<obligatoryParameters.size()) 
    return obligatoryParameterValues[i];

  return emptyString;
}


bool advConsoleParameters::isSwitchEnabled(const string& name)
{
  return optionSwitchValues[name];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -