X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fyapi%2Flib%2FProcessWrapper.cpp;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fyapi%2Flib%2FProcessWrapper.cpp;h=de28efe7f14a82ec7b460b3b46e37899d2f5569b;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/yapi/lib/ProcessWrapper.cpp b/dol/src/dol/visitor/yapi/lib/ProcessWrapper.cpp new file mode 100644 index 0000000..de28efe --- /dev/null +++ b/dol/src/dol/visitor/yapi/lib/ProcessWrapper.cpp @@ -0,0 +1,107 @@ +#include "ProcessWrapper.h" +#include "dolSupport.h" + +/** + * + */ +ProcessWrapper::ProcessWrapper(const char* name, const Id& n) : Process(n) { + _name = new char[strlen(name) + 1]; + strcpy(_name, name); + + _isDetached = false; + for (int i = 0; i < 4; i++) { + _iteratorIndex[i] = getIndex(_name, "_", i); + } +} + +/** + * + */ +ProcessWrapper::~ProcessWrapper() { +} + +/** + * + */ +void ProcessWrapper::initialize() { + _process.init(&_process); +} + +/** + * + */ +int ProcessWrapper::fire() +{ + return _process.fire(&_process); +} + + +/** + * + */ +void ProcessWrapper::detach() { + _isDetached = true; +} + + +/** + * Gets an index of a string, where the index must be separated by + * a character specified in tokens. + * Returns -1, when an error occurs. + * + * Example: + * getIndex("name_1_2", "_", 0) will return 1. + * getIndex("name_1_2", "_", 1) will return 2. + * + * @param string string to parse + * @param tokens delimiter of indices + * @param indexNumber position of index (starting at 0) + */ +int ProcessWrapper::getIndex(const char* string, char* tokens, + int indexNumber) const { + char* string_copy; + char* token_pointer; + int index = 0; + + string_copy = (char*) malloc(sizeof(char) * (strlen(string) + 1)); + if (!string_copy) { + fprintf(stderr, "getIndex(): could not allocate memory.\n"); + return -1; + } + + strcpy(string_copy, string); + + token_pointer = strtok(string_copy, tokens); + do { + token_pointer = strtok(NULL, tokens); + index++; + } while (index <= indexNumber && token_pointer != 0); + + if (token_pointer) { + index = atoi(token_pointer); + free(string_copy); + return index; + } + + return -1; +} + + +/** + * Get the name of this process. + */ +char* ProcessWrapper::getName() const { + return _name; +} + + +/** + * Get the index of this process. + * @param indexNumber position of index (starting at 0) + */ +int ProcessWrapper::getIndex(unsigned indexNumber) const { + if (indexNumber < 4) { + return _iteratorIndex[indexNumber]; + } + return -1; +}