From 3b313836adc0343dd7449549fe8ef45e67a2a902 Mon Sep 17 00:00:00 2001 From: karim kohel Date: Tue, 16 Jun 2020 17:27:41 +0200 Subject: [PATCH] finilised and documented the code --- DCW | Bin 37848 -> 37248 bytes DCW.c | 11 +++++------ general.h | 41 +++++++++++++++++++++++++++++------------ hashtable.h | 7 ++++--- linkedQ.h | 27 +++++++++++++++------------ main.h | 7 ++++--- tree.h | 3 +++ 7 files changed, 60 insertions(+), 36 deletions(-) diff --git a/DCW b/DCW index 6c367ce6b7d7db1484af84aaa3390038a81b470f..ad101374660cfb5c567731779dba2961cd478c8a 100755 GIT binary patch delta 13917 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 #include #include -// #include #include "errhandling.h" #include "linkedQ.h" #include "tree.h" @@ -10,15 +9,15 @@ #include "general.h" #include "main.h" +// ----The Delightful Compression Wizard---- // -// WELCOME -// for documentation, developement and commit history, the github repo +// for Usage, documentation, developement and commit history, the github repo // github.com/karimkohel/DCW should be publically available // by the time of this review. // // NOTICE: -// -to build on Visual Studio, the header files should be pointed to in the project properties -// menu under C/C++ > all options > include directories. +// -to build on Visual Studio: the header files should be pointed to in the project properties +// menu under C/C++ > all options -> additional include directories. // // -and to turn off the extra security checks by adding _CRT_SECURE_NO_WARNINGS into the // preprocessor definitions in project > project properties > C/C++ > preprocessor. @@ -30,7 +29,7 @@ // -> mohamed osama // -> aly khaled anas // -> omar tamer -// +// -> amr mekky // diff --git a/general.h b/general.h index 479d27c..599bb34 100644 --- a/general.h +++ b/general.h @@ -30,7 +30,7 @@ int greet(){ } void load_file_in(Q_t *q, FILE *file, long *count){ - + //loads the input file in the priority Q as a frequency table char c; long counter = 0; long wait = 10000000; @@ -77,8 +77,8 @@ void encode_tree(node_t *node, char code[], char *codes_table[]){ return; // base exit case for children of leaf nodes if(leaf_node(node)) - codes_table[((int)node->data)] = code; - + codes_table[((int)node->data)] = code;// place the code of that char in it's equvilant ascii number + // as a table index encode_tree(node->left, strcat2(code, "0"), codes_table); encode_tree(node->right, strcat2(code, "1"), codes_table); @@ -92,11 +92,13 @@ void get_codes(node_t *root, char *table[]){ tmp_code[0] = '\0'; encode_tree(root, tmp_code, table); - // print_table(table); + // print_table(table); // can be used for debugging and checking out the codes table } node_t *load_in_tree(Q_t *q){ + //handles the steps of creating the tree by deQing and enQing and returns the last node to enter the Q + node_t *tmp_node1 = NULL; node_t *tmp_node2 = NULL; node_t *joined_node = NULL; @@ -109,6 +111,7 @@ node_t *load_in_tree(Q_t *q){ } void trim_str(char *str, int offset){ + //trims the string from the beginning up to a certain offset int len = strlen(str); for(int i=0; i<(len-offset+1); i++){ str[i] = str[offset+i]; @@ -123,7 +126,7 @@ int encode_file(FILE *in_file, char *table[], int tree_hight, FILE *comp_file, c char in_c; int out_c; char out_c2; - char *buffer = (char *)malloc(tree_hight*tree_hight*sizeof(char)); + char *buffer = (char *)malloc(tree_hight*tree_hight*sizeof(char));//buffer to store bits of the codes combined buffer[0] = '\0'; // the string starts with garbage value for some reason char tmp[9]; int len; @@ -135,7 +138,7 @@ int encode_file(FILE *in_file, char *table[], int tree_hight, FILE *comp_file, c while(len > 7){ strncpy(tmp, buffer, BYTE_SIZE); - out_c = strtol(tmp, 0, 2); + out_c = strtol(tmp, 0, 2); // converts from binary to decimal out_c2 = out_c; fwrite(&out_c2, sizeof(char), 1, comp_file); trim_str(buffer, BYTE_SIZE); @@ -144,11 +147,12 @@ int encode_file(FILE *in_file, char *table[], int tree_hight, FILE *comp_file, c } } - *extra_bits = buffer; + *extra_bits = buffer;//return the extra bits by refrence to be written sepperatly in the start of file return count; } void write_extra_bits(FILE *file, char *bits){ + // write the extra bits to a file int len = strlen(bits); for(int i=0; ileft, file); @@ -180,6 +183,7 @@ void deserialize(node_t *root, FILE *file) { } void get_extra_bits(FILE *file, char *bits){ + // reads the extra bits from a file for(int i=0; inext; -// free(tmp); -// } -// } - bool insert_node_first(node_t **head, node_t *node){ if((*head) == NULL || node == NULL) return false; @@ -126,6 +117,15 @@ bool remove_node_first(node_t **head, node_t **node){ return true; } +// void free_list(node_t *head){ +// node_t *tmp; +// while(head != NULL){ +// tmp = head; +// head = head->next; +// free(tmp); +// } +// } + //////////////////////// END OF LINKED LIST DS ////////////////// ///////////////////// Q DS USING LINKED LIST /////////////////// @@ -138,9 +138,10 @@ typedef struct Q_t{ tail = NULL; } - ~Q_t(){ - // free_list(head); - } + // ~Q_t(){ + // free_list(head); + // } + }Q_t; bool enQ(Q_t* q, char item, node_t *node){ @@ -175,6 +176,8 @@ bool enQ(Q_t* q, char item, node_t *node){ bool deQ(Q_t* q, node_t **node){ + // when the Q is empty, will return false to stop the deQing and set the garbage node to NULL; + if(q->head == NULL){ (*node) = NULL; return false; diff --git a/main.h b/main.h index 089fb09..feb5c8b 100644 --- a/main.h +++ b/main.h @@ -6,6 +6,7 @@ void compress(const char *in_file_name, const char *out_file_name){ clock_t start_time = clock(); Q_t q; + FILE *in_file = fopen(in_file_name, "rb"); fcheck(in_file, 1); FILE *out_file = fopen(out_file_name, "wb"); @@ -28,15 +29,15 @@ void compress(const char *in_file_name, const char *out_file_name){ int tree_hight = find_hight(tree_root); - char buffer[8] = "0000000"; - write_extra_bits(out_file, buffer); + char buffer[8] = "0000000"; // this buffer holds a place in the beginning of the file for the + write_extra_bits(out_file, buffer);// extra bits that we will put in later serialize(tree_root, out_file); char *extra_bits; int out_count = encode_file(in_file, code_table, tree_hight, out_file, &extra_bits); - fseek(out_file, 0, SEEK_SET); + fseek(out_file, 0, SEEK_SET);// seek to start and place the extra bits we got write_extra_bits(out_file, extra_bits); diff --git a/tree.h b/tree.h index 8f6749d..b341360 100644 --- a/tree.h +++ b/tree.h @@ -11,6 +11,8 @@ bool leaf_node(node_t *node){ node_t *join_nodes(node_t *node1, node_t *node2){ + // take 2 nodes, join them as siblings under one parant, simple. + node_t *new_node = create_node('\0'); if(new_node == NULL) return NULL; @@ -36,6 +38,7 @@ void printPostorder(node_t *root){ } void free_tree(node_t *node){ + // no memory waste what so ever if(node == NULL) return;