diff --git a/libmineziper/include/libmineziper.h b/libmineziper/include/libmineziper.h index 2d0a6e6..e03016c 100644 --- a/libmineziper/include/libmineziper.h +++ b/libmineziper/include/libmineziper.h @@ -1,10 +1,13 @@ #ifndef LIBMINEZIPER_H #define LIBMINEZIPER_H -#include "libmineziper_zip.h" #include +#include "libmineziper_bitstream.h" +#include "libmineziper_huffman_tree.h" +#include "libmineziper_zip.h" 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/src/libmineziper.c b/libmineziper/src/libmineziper.c index 98ae817..661380d 100644 --- a/libmineziper/src/libmineziper.c +++ b/libmineziper/src/libmineziper.c @@ -15,4 +15,29 @@ 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