From 515e9055d0de4bf1fb8a072f1d4fd97b5e7f3ee1 Mon Sep 17 00:00:00 2001 From: atomega Date: Sun, 7 Mar 2021 17:17:29 +0000 Subject: [PATCH] Successfull implementation of The command mananger --- developpment/interfacer/commandManager.cpp | 87 +++++++++++++++++++++ developpment/interfacer/commandManager.h | 53 +++++++++++++ developpment/interfacer/commandManager.o | Bin 0 -> 23436 bytes developpment/interfacer/errorHandling.cpp | 29 ++++--- developpment/interfacer/errorHandling.o | Bin 0 -> 7116 bytes developpment/interfacer/interfacer.cpp | 24 ++++-- developpment/interfacer/interfacer.o | Bin 0 -> 24948 bytes developpment/interfacer/runtest | Bin 0 -> 26752 bytes 8 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 developpment/interfacer/commandManager.h create mode 100644 developpment/interfacer/commandManager.o create mode 100644 developpment/interfacer/errorHandling.o create mode 100644 developpment/interfacer/interfacer.o create mode 100755 developpment/interfacer/runtest diff --git a/developpment/interfacer/commandManager.cpp b/developpment/interfacer/commandManager.cpp index b4f7dec..4c89a55 100644 --- a/developpment/interfacer/commandManager.cpp +++ b/developpment/interfacer/commandManager.cpp @@ -8,3 +8,90 @@ * TODO : Comment the code wiht odxygen * */ + +#include "commandManager.h" + + +CommandManager:: CommandManager():emptyIndex(0) +{ +} + +void CommandManager::addNewCommand( const std::string& commmand, + const std::string& description, + commanCallback_t callBack) +{ + if(emptyIndex >= MAX_MUNBER_OF_COMMANDS) // Check if the command list is full + { + std::cout << "Error | Intern | Command list is full!" << std::endl; + exit(1); + } + if(getLookUpIndex(commmand) >= 0) // Chek for command duplicats + { + std::cout << "Error | Intern | Command already exitst!" << std::endl; + exit(1); + } + + + commandLookup[emptyIndex].commmand = commmand; + commandLookup[emptyIndex].description = description; + commandLookup[emptyIndex].callBack = callBack; + emptyIndex++; +} + +void CommandManager::operator()(const std::string cmdName) +{ + int index = 0; + + if(cmdName == "help" || cmdName == "Help") + { + printHelp(); + exit(1); + } + + if(cmdName == "-h" || cmdName == "-H") + { + printCommads(); + exit(1); + } + + index = getLookUpIndex(cmdName); + + if(index < 0) + { + std::cout << "Error | Intern | Invalid Command!" << std::endl; + exit(1); + } + + commandLookup[index].callBack(); + exit(1); +} + + +// +// Privat memeber functions +// + + +int CommandManager::getLookUpIndex(const std::string& cmd) +{ + int index = 0; + for (index = 0; index < emptyIndex; index++) + { + if(commandLookup[index].commmand == cmd) + { + return index; + } + } + return -1; +} + +void CommandManager::printHelp() +{ + std::cout << "Function : printHelp is under construction" << std::endl; +} + +void CommandManager::printCommads() +{ + std::cout << "Function : printCommads is under construction" << std::endl; +} + diff --git a/developpment/interfacer/commandManager.h b/developpment/interfacer/commandManager.h new file mode 100644 index 0000000..5d7eff2 --- /dev/null +++ b/developpment/interfacer/commandManager.h @@ -0,0 +1,53 @@ +/* + * Authors : Kerem Yollu & Edwin Koch + * Date : 07.03.2021 + * + * Description : + * TODO : Inplement singleton pattern + * TODO : Write description + * TODO : Comment the code wiht odxygen + * + */ + + +#ifndef _COMMMANDMANAGER_H_ +#define _COMMMANDMANAGER_H_ + +#include +#include +#include +#include + +#define MAX_MUNBER_OF_COMMANDS 4 + +class CommandManager +{ + public: + typedef std::function commanCallback_t; + CommandManager(); + void addNewCommand( const std::string& commmand, + const std::string& description, + commanCallback_t callBack); + + void operator()(const std::string cmdName); + + + private: + unsigned int emptyIndex; + + struct commant_t{ + std::string commmand; + std::string description; + commanCallback_t callBack; // The Callback function could only be a void returning a void. + }; + + std::array commandLookup; + int getLookUpIndex(const std::string& cmd); // If command exists retunrs the index otherwise -1 + void printHelp(); // Prints all awailbale commands and their description. + void printCommads(); // Prints all awailable commnads without description. +}; + + + + +#endif // _COMMMANDMANAGER_H_ diff --git a/developpment/interfacer/commandManager.o b/developpment/interfacer/commandManager.o new file mode 100644 index 0000000000000000000000000000000000000000..c9eefcfa4aa02184388118e5dc428d6f07807555 GIT binary patch literal 23436 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 KU9iQF(ffZ{Jwp@# literal 0 HcmV?d00001 diff --git a/developpment/interfacer/errorHandling.cpp b/developpment/interfacer/errorHandling.cpp index 4e72b7c..9e30a38 100644 --- a/developpment/interfacer/errorHandling.cpp +++ b/developpment/interfacer/errorHandling.cpp @@ -4,18 +4,6 @@ ErrorHandler::ErrorHandler(): emptyIndex(0) { } -int ErrorHandler::getLookUpIndex(int errNo) -{ - int i = 0; - for(i = 0; i < emptyIndex; i++) - { - if(errNo == errorLookup[i].errNo) - { - return i; - } - } - return -1; -} void ErrorHandler::handleError(int errNo) { @@ -51,3 +39,20 @@ void ErrorHandler::addNewError(const int& no, const std::string& message) errorLookup[emptyIndex].errMessage = message; emptyIndex++; } + +// +// Privat memeber functions +// + +int ErrorHandler::getLookUpIndex(int errNo) +{ + int i = 0; + for(i = 0; i < emptyIndex; i++) + { + if(errNo == errorLookup[i].errNo) + { + return i; + } + } + return -1; +} diff --git a/developpment/interfacer/errorHandling.o b/developpment/interfacer/errorHandling.o new file mode 100644 index 0000000000000000000000000000000000000000..5826368bc58cef7ff195f7d5f25abb058656ab29 GIT binary patch literal 7116 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 Ad;kCd literal 0 HcmV?d00001 diff --git a/developpment/interfacer/interfacer.cpp b/developpment/interfacer/interfacer.cpp index fb667af..500ffab 100644 --- a/developpment/interfacer/interfacer.cpp +++ b/developpment/interfacer/interfacer.cpp @@ -7,11 +7,13 @@ * */ -#include "errorHandling.h" #include - +#include "errorHandling.h" +#include "commandManager.h" ErrorHandler errorHandle; +CommandManager commander; + int initPlatform() { @@ -20,17 +22,23 @@ int initPlatform() return 0; } - +void dummy() +{ + std::cout << "HElllooo from the the other side signed adele" << std::endl; +} int main(int argc, char *argv[]) { - errorHandle.addNewError(-34,"Test eroor 1"); -// errorHandle.handleError(-34); - - errorHandle.addNewError(-34,"Test eroor"); - // Init std::cout << "Main" << std::endl; + //errorHandle.addNewError(-34,"Test eroor 1"); + //errorHandle.handleError(-34); + + commander.addNewCommand("test", "The test command for testing the test", dummy); + + commander(argv[1]); + + return 1; } diff --git a/developpment/interfacer/interfacer.o b/developpment/interfacer/interfacer.o new file mode 100644 index 0000000000000000000000000000000000000000..7f2055ed1376d91a339fcbedf563bfeec9ad06b0 GIT binary patch literal 24948 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 literal 0 HcmV?d00001 diff --git a/developpment/interfacer/runtest b/developpment/interfacer/runtest new file mode 100755 index 0000000000000000000000000000000000000000..6b6d4e2151fa2f5b57d6a48a7456b5bc544e6c7e GIT binary patch literal 26752 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 literal 0 HcmV?d00001