dol: initial dol commit
[jump.git] / dol / src / dol / visitor / cbe / lib / ProcessWrapperHelp.h
diff --git a/dol/src/dol/visitor/cbe/lib/ProcessWrapperHelp.h b/dol/src/dol/visitor/cbe/lib/ProcessWrapperHelp.h
new file mode 100644 (file)
index 0000000..7d2a117
--- /dev/null
@@ -0,0 +1,100 @@
+/**************************************************************** \r
+ *     Process Wrapper Help functions\r
+ *     Creator: lschor, 2008-11-21\r
+ *     Description: General process wrapper fucntions\r
+ *     \r
+ *     Revision: \r
+ *     - 2008-11-21: Created\r
+ */\r
+\r
+#ifndef __PROCESS_WRAPPER_HELP_H__\r
+#define __PROCESS_WRAPPER_HELP_H__\r
+\r
+#include <stdarg.h>    // Used for va_list\r
+\r
+/**\r
+ * Gets an index of a string, where the index must be separated by\r
+ * a character specified in tokens.\r
+ * Returns -1, when an error occurs.\r
+ *\r
+ * Example:\r
+ * getIndex("name_1_2", "_", 0) will return 1.\r
+ * getIndex("name_1_2", "_", 1) will return 2.\r
+ *\r
+ * @param string string to parse\r
+ * @param tokens delimiter of indices\r
+ * @param indexNumber position of index (starting at 0)\r
+ */\r
+int getIndex(const char* string, char* tokens, int indexNumber) {\r
+    char* string_copy;\r
+    char* token_pointer;\r
+    int index = 0;\r
+\r
+    string_copy = (char*) malloc(sizeof(char) * (strlen(string) + 1));\r
+    if (!string_copy) {\r
+        fprintf(stderr, "getIndex(): could not allocate memory.\n");\r
+        return -1;\r
+    }\r
+\r
+    strcpy(string_copy, string);\r
+\r
+    token_pointer = strtok(string_copy, tokens);\r
+    do {\r
+        token_pointer = strtok(NULL, tokens);\r
+        index++;\r
+    } while (index <= indexNumber && token_pointer != 0);\r
+\r
+    if (token_pointer) {\r
+        index = atoi(token_pointer);\r
+        free(string_copy);\r
+        return index;\r
+    }\r
+\r
+    free(string_copy);\r
+    return -1;\r
+}\r
+\r
+/**\r
+ * Create the port name of an iterated port based on its basename and the\r
+ * given indices.\r
+ *\r
+ * @param port buffer where the result is stored (created using\r
+ *             CREATEPORTVAR)\r
+ * @param base basename of the port\r
+ * @param number_of_indices number of dimensions of the port\r
+ * @param index_range_pairs index and range values for each dimension\r
+ */\r
+int *createPort(int *port, int base, int number_of_indices,\r
+                int index_range_pairs, ...) {\r
+    int index[4];\r
+    int range[4];\r
+    int i;\r
+    int value;\r
+\r
+    va_list marker;\r
+    va_start(marker, index_range_pairs);\r
+\r
+    value = index_range_pairs;\r
+    for (i = 0; i < number_of_indices; i++) {\r
+        index[i] = value;\r
+        value = va_arg(marker, int);\r
+        range[i] = value;\r
+        if (i < number_of_indices - 1) {\r
+            value = va_arg(marker, int);\r
+        }\r
+    }\r
+\r
+    *port = base;\r
+    for (i = 0; i < number_of_indices; i++) {\r
+        int j;\r
+        int weight = 1;\r
+        for (j = 1; j < number_of_indices - i; j ++) {\r
+            weight *= range[j];\r
+        }\r
+        *port += index[i] * weight;\r
+    }\r
+\r
+    return port;\r
+}\r
+\r
+#endif\r