#include <string>
#include <vector>
-#include <iostream>
#include "parameter.h"
Command(unsigned int argc, char *argv[], std::initializer_list<Parameter *> params)
: parameters(params) {
- matchArguments(argc, argv);
- invoke();
+ try {
+ matchArguments(argc, argv);
+ }
+ catch(std::invalid_argument exception) {
+ releaseMemory();
+ throw;
+ }
}
/**
* Destructor. Releases allocated memory.
*/
~Command() {
- for (Parameter * parameter : parameters) {
- delete parameter;
- }
+ releaseMemory();
}
protected:
/**
* Matches user passed arguments with available parameter handlers.
*/
- void matchArguments(unsigned int , char **) {
-// param->passUserValue();
+ void matchArguments(unsigned int argc, char *argv[]) {
+ for (unsigned int i = 1; i < argc; i++) {
+ for(Parameter *param : parameters) {
+ if (param->understand(argv[i])) {
+ param->handle();
+ break;
+ }
+ }
+ }
}
/**
- * Invokes passed parameter handlers
+ * Releases acquired memory
*/
- void invoke() {
- for(Parameter *param : parameters) {
- param->handle();
+ void releaseMemory() {
+ for (Parameter * parameter : parameters) {
+ if (parameter != NULL) {
+ delete parameter;
+ }
}
+ parameters.clear();
+ parameters.shrink_to_fit();
}
};
}