[!T] Added reduce
This commit is contained in:
+33
-20
@@ -1,6 +1,7 @@
|
||||
#include <zmq.h>
|
||||
#include <ctype.h>
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -110,7 +111,7 @@ void* workerFunc(void *args){
|
||||
const TYPE type = get_request_type(request);
|
||||
char *content = request + TYPE_LENGTH;
|
||||
|
||||
char *ret;
|
||||
char *ret = NULL;
|
||||
|
||||
switch(type){
|
||||
case MAP:
|
||||
@@ -142,6 +143,7 @@ void* workerFunc(void *args){
|
||||
zmq_ctx_destroy(context);
|
||||
exit(1);
|
||||
}
|
||||
free(ret); // NULL free is safe
|
||||
} //loop
|
||||
}
|
||||
|
||||
@@ -188,22 +190,7 @@ char* get_word(const char *request){
|
||||
return word;
|
||||
}
|
||||
|
||||
char* map(const char *content, key_value_pair **head, key_value_pair **tail){
|
||||
char *content_iterator = (char*)content;
|
||||
void *content_start_address = (void*)content;
|
||||
size_t content_length = strlen(content);
|
||||
|
||||
while(content_iterator != NULL && content_iterator < content_start_address + content_length){
|
||||
char *word = get_word(content_iterator);
|
||||
if(word != NULL){
|
||||
if(strcmp(word, "") != 0){
|
||||
add_word(word, head, tail);
|
||||
}
|
||||
content_iterator += strlen(word) + 1; // skip current read word + one delimiter char
|
||||
free(word);
|
||||
}
|
||||
}
|
||||
|
||||
char *key_value_pair_list_to_string(key_value_pair **head){
|
||||
key_value_pair *kvp_it = *head;
|
||||
|
||||
char *ret = NULL;
|
||||
@@ -232,18 +219,44 @@ char* map(const char *content, key_value_pair **head, key_value_pair **tail){
|
||||
kvp_it = kvp_it->next;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* map(const char *content, key_value_pair **head, key_value_pair **tail){
|
||||
char *content_iterator = (char*)content;
|
||||
void *content_start_address = (void*)content;
|
||||
size_t content_length = strlen(content);
|
||||
|
||||
while(content_iterator != NULL && content_iterator < content_start_address + content_length){
|
||||
char *word = get_word(content_iterator);
|
||||
if(word != NULL){
|
||||
if(strcmp(word, "") != 0){
|
||||
add_word(word, head, tail);
|
||||
}
|
||||
content_iterator += strlen(word) + 1; // skip current read word + one delimiter char
|
||||
free(word);
|
||||
}
|
||||
}
|
||||
|
||||
char *ret = key_value_pair_list_to_string(head);
|
||||
|
||||
if(!ret){
|
||||
perror("Could not extract key value pairs");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free_key_value_pairs(head, tail);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* reduce(char *content){
|
||||
// free_key_value_pairs();
|
||||
return NULL;
|
||||
key_value_pair *head = NULL;
|
||||
key_value_pair *tail = NULL;
|
||||
|
||||
extract_key_value_pairs(content, &head, &tail);
|
||||
char *ret = key_value_pair_list_to_string(&head);
|
||||
|
||||
free_key_value_pairs(&head, &tail);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user