1 #ifndef __COMMAND_COMMAND_H
2 #define __COMMAND_COMMAND_H
9 #include "exception/missingRequiredParameter.h"
13 * Main class for handling user passed parameters from command line.
17 std::vector<Parameter *> parameters;
20 * Default constructor.
22 * @param argc passed to the main function
23 * @param argv passed to the main function
24 * @param params initializer_list containing Parameter handlers
25 * responsible for correctly handle user data.
27 Command(unsigned int argc, char *argv[], std::initializer_list<Parameter *> params)
28 : parameters(params) {
31 matchArguments(argc, argv);
33 catch(const std::invalid_argument & exception) {
37 catch(const std::logic_error & exception) {
44 * Destructor. Releases allocated memory.
51 * Matches user passed arguments with available parameter handlers.
53 void matchArguments(unsigned int argc, char *argv[]) {
54 for (unsigned int i = 1; i < argc; i++) {
55 for(Parameter *param : parameters) {
56 if (param->understand(argv[i])) {
62 for(Parameter *param : parameters) {
63 if (param->isRequired() && !param->isUsed()) {
64 throw MissingRequiredParameter(param->describe() + " is required but it was not passed");
70 * Releases acquired memory
72 void releaseMemory() {
73 for (Parameter * parameter : parameters) {
74 if (parameter != NULL) {
79 parameters.shrink_to_fit();
84 #endif /* __COMMAND_COMMAND_H */