Я делаю алгоритм сжатия LZ77, и я не могу понять, как реализовать скользящее окно и как записать информацию в буфер, а затем сдвинуть его.
У меня есть код
int encode(const char *infile_path, const char *outfile_path, unsigned sb_size, unsigned la_size)
{
FILE *infile = NULL, *outfile = NULL;
if (bread_file(&infile, infile_path) || bwrite_file(&outfile, outfile_path)) {
return -1;
}
size_t win_size = sb_size + la_size;
char *window = malloc(sizeof * window * win_size);
if (window == NULL) {
fprintf(stderr, "%s() error: Memory allocation failure!\n", __func__);
return -1;
}
size_t buf_size;
buf_size = fread(window + sb_size, sizeof(char), win_size - sb_size, infile);
if (feof(infile)) {
printf("EOF has been reached!\n");
}
else {
fprintf(stderr, "%s() error: Couldn't read info from the file!\n\n", __func__);
return -1;
}
}
Я застрял здесь. Не могли бы вы посоветовать подробную информацию по этому поводу?