diff --git a/libmineziper/include/libmineziper.h b/libmineziper/include/libmineziper.h index e03016c..7e25008 100644 --- a/libmineziper/include/libmineziper.h +++ b/libmineziper/include/libmineziper.h @@ -8,6 +8,5 @@ bool detect_overlaps(char* filename); int get_uncompressed_size(zip* in); -int next_token(bitstream* bs, tree t); #endif \ No newline at end of file diff --git a/libmineziper/include/libmineziper_huffman_tree.h b/libmineziper/include/libmineziper_huffman_tree.h index b8437c2..1e1afe7 100644 --- a/libmineziper/include/libmineziper_huffman_tree.h +++ b/libmineziper/include/libmineziper_huffman_tree.h @@ -3,7 +3,7 @@ #include "libmineziper_bitstream.h" -#define DEFAULT_TREE_SIZE 288 +#define DEFAULT_TREE_SIZE 288 #define DEFAULT_DIST_TREE_SIZE 32 typedef struct leaf @@ -22,8 +22,11 @@ typedef struct tree unsigned int* sort(unsigned char* ints, int size); void print_huffman_tree(tree t); + tree build_tree(char* bit_lengths, int size); tree build_default_tree(); tree build_default_dist_tree(); +int next_token(bitstream* bs, tree t); + #endif \ No newline at end of file diff --git a/libmineziper/src/libmineziper.c b/libmineziper/src/libmineziper.c index 661380d..6858ddd 100644 --- a/libmineziper/src/libmineziper.c +++ b/libmineziper/src/libmineziper.c @@ -16,28 +16,3 @@ int get_uncompressed_size(zip* in) return size; } - -int next_token(bitstream* bs, tree t) -{ - // TODO handle if tmin is null elsewhere - int init = 0; - if (t.min > 0) - { - init = t.min - 1; - } - - unsigned int base = get_bits(bs, init); - - for (int k = t.min; k <= t.max; k++) - { - base += get_bits(bs, 1) << (k - 1); - - for (int i = 0; i < t.size; i++) - { - if (t.leaves[i].length == k && t.leaves[i].code == base) - return t.leaves[i].litteral; - } - } - - return -1; -} \ No newline at end of file diff --git a/libmineziper/src/libmineziper_huffman_tree.c b/libmineziper/src/libmineziper_huffman_tree.c index 407f35c..0ce5a36 100644 --- a/libmineziper/src/libmineziper_huffman_tree.c +++ b/libmineziper/src/libmineziper_huffman_tree.c @@ -106,3 +106,28 @@ void print_huffman_tree(tree t) printf("\n"); } } + +int next_token(bitstream* bs, tree t) +{ + // TODO handle if tmin is null elsewhere + int init = 0; + if (t.min > 0) + { + init = t.min - 1; + } + + unsigned int base = get_bits(bs, init); + + for (int k = t.min; k <= t.max; k++) + { + base += get_bits(bs, 1) << (k - 1); + + for (int i = 0; i < t.size; i++) + { + if (t.leaves[i].length == k && t.leaves[i].code == base) + return t.leaves[i].litteral; + } + } + + return -1; +}