From 7f2f7f7c3e5d4c626d7e8d4d45fee2b11b6d5221 Mon Sep 17 00:00:00 2001 From: Matt Strapp Date: Thu, 24 Sep 2020 07:24:19 -0500 Subject: rearrange --- P1/src/mapper.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 P1/src/mapper.c (limited to 'P1/src/mapper.c') diff --git a/P1/src/mapper.c b/P1/src/mapper.c new file mode 100644 index 0000000..66ac2ef --- /dev/null +++ b/P1/src/mapper.c @@ -0,0 +1,134 @@ +#include "mapper.h" + +// combined value list corresponding to a word <1,1,1,1....> +valueList *createNewValueListNode(char *value){ + valueList *newNode = (valueList *)malloc (sizeof(valueList)); + strcpy(newNode -> value, value); + newNode -> next = NULL; + return newNode; +} + +// insert new count to value list +valueList *insertNewValueToList(valueList *root, char *count){ + valueList *tempNode = root; + if(root == NULL) + return createNewValueListNode(count); + while(tempNode -> next != NULL) + tempNode = tempNode -> next; + tempNode -> next = createNewValueListNode(count); + return root; +} + +// free value list +void freeValueList(valueList *root) { + if(root == NULL) return; + + valueList *tempNode = root -> next;; + while (tempNode != NULL){ + free(root); + root = tempNode; + tempNode = tempNode -> next; + } +} + +// create +intermediateDS *createNewInterDSNode(char *word, char *count){ + intermediateDS *newNode = (intermediateDS *)malloc (sizeof(intermediateDS)); + strcpy(newNode -> key, word); + newNode -> value = NULL; + newNode -> value = insertNewValueToList(newNode -> value, count); + newNode -> next = NULL; + return newNode; +} + +// insert or update a to intermediate DS +intermediateDS *insertPairToInterDS(intermediateDS *root, char *word, char *count){ + intermediateDS *tempNode = root; + if(root == NULL) + return createNewInterDSNode(word, count); + while(tempNode -> next != NULL) { + if(strcmp(tempNode -> key, word) == 0){ + tempNode -> value = insertNewValueToList(tempNode -> value, count); + return root; + } + tempNode = tempNode -> next; + + } + if(strcmp(tempNode -> key, word) == 0){ + tempNode -> value = insertNewValueToList(tempNode -> value, count); + } else { + tempNode -> next = createNewInterDSNode(word, count); + } + return root; +} + +// free the DS after usage. Call this once you are done with the writing of DS into file +void freeInterDS(intermediateDS *root) { + if(root == NULL) return; + + intermediateDS *tempNode = root -> next;; + while (tempNode != NULL){ + freeValueList(root -> value); + free(root); + root = tempNode; + tempNode = tempNode -> next; + } +} + +// emit the into intermediate DS +void emit(char *key, char *value) { + +} + +// map function +void map(char *chunkData){ + + // you can use getWord to retrieve words from the + // chunkData one by one. Example usage in utils.h +} + +// write intermediate data to separate word.txt files +// Each file will have only one line : word 1 1 1 1 1 ... +void writeIntermediateDS() { + +} + +int main(int argc, char *argv[]) { + + if (argc < 2) { + printf("Less number of arguments.\n"); + printf("./mapper mapperID\n"); + exit(0); + } + // ###### DO NOT REMOVE ###### + mapperID = strtol(argv[1], NULL, 10); + + // ###### DO NOT REMOVE ###### + // create folder specifically for this mapper in output/MapOut + // mapOutDir has the path to the folder where the outputs of + // this mapper should be stored + mapOutDir = createMapDir(mapperID); + + // ###### DO NOT REMOVE ###### + while(1) { + // create an array of chunkSize=1024B and intialize all + // elements with '\0' + char chunkData[chunkSize + 1]; // +1 for '\0' + memset(chunkData, '\0', chunkSize + 1); + + char *retChunk = getChunkData(mapperID); + if(retChunk == NULL) { + break; + } + + strcpy(chunkData, retChunk); + free(retChunk); + + map(chunkData); + } + + // ###### DO NOT REMOVE ###### + writeIntermediateDS(); + + return 0; +} \ No newline at end of file -- cgit v1.2.3