Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/mash/Command.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/mash/Command.h Tue Mar 18 17:55:14 2025 -0400 @@ -0,0 +1,107 @@ +// Copyright © 2015, Battelle National Biodefense Institute (BNBI); +// all rights reserved. Authored by: Brian Ondov, Todd Treangen, +// Sergey Koren, and Adam Phillippy +// +// See the LICENSE.txt file included with this software for license information. + +#ifndef INCLUDED_Command +#define INCLUDED_Command + +#include <map> +#include <string> +#include <vector> +#include <set> + +namespace mash { + +class Command +{ + +// A base class for handling command line parsing and usage messages. Specific +// commands can be implemented by subclassing and overriding the run() method. +// The run() method will be called by this base class from run(argc, argv) once +// it has parsed options, which can be accessed from the 'options' map using the +// name strings given when adding them (not 'identifier', which is its parsing +// name to appear after the '-'). Arguments (i.e. operands given after the +// options on the command line) will be available in the 'arguments' vector. + +public: + + class Option + { + public: + + enum Type + { + Boolean, + Number, + Integer, + Size, + File, + String + } + type; + + std::string category; + std::string identifier; + std::string description; + std::string argument; + std::string argumentDefault; + + float argumentAsNumber; + float argumentMin; + float argumentMax; + + bool active; + bool changed; + + Option() {} + Option(Type typeNew, std::string identifierNew, std::string categoryNew, std::string descriptionNew, std::string argumentDefaultNew = "", float argumentMinNew = 0, float argumentMaxNew = 0); + + float getArgumentAsNumber() const {return argumentAsNumber;} + void setArgument(std::string argumentNew); + }; + + Command(); + virtual ~Command() {}; + + void addOption(std::string name, Option option); + const Option & getOption(std::string name) const; + inline bool hasOption(std::string name) const {return options.count(name);} + void print() const; + virtual int run() const = 0; + int run(int argc, const char ** argv); + + std::string name; + std::string summary; + std::string description; + std::string argumentString; + +protected: + + void useOption(std::string name); + void useSketchOptions(); + + std::map<std::string, Option> options; + std::map<std::string, Option> optionsAvailable; + std::vector<std::string> arguments; + +private: + + void addAvailableOption(std::string name, Option option); + void addCategory(std::string name, std::string displayName); + + std::map<std::string, std::string> optionNamesByIdentifier; + std::map<std::string, std::vector<std::string> > optionNamesByCategory; + std::vector<std::string> categories; + std::map<std::string, std::string> categoryDisplayNames; +}; + +inline const Command::Option & Command::getOption(std::string name) const {return options.at(name);} +void splitFile(const std::string & file, std::vector<std::string> & lines); +void printColumns(const std::vector<std::vector<std::string>> & columns, int indent = 2, int spacing = 2, const char * missing = "-", int max = 80); +void printColumns(const std::vector<std::vector<std::string>> & columns, const std::vector<std::pair<int, std::string>> & dividers, int indent = 2, int spacing = 2, const char * missing = "-", int max = 80); + +} // namespace mash + +#endif