93 lines
2.2 KiB
C
93 lines
2.2 KiB
C
|
/*
|
||
|
* fstdebug.c
|
||
|
|
||
|
* Debugging stubs for fast encoder
|
||
|
*/
|
||
|
#include <string.h>
|
||
|
#include <stdio.h>
|
||
|
#include <crtdbg.h>
|
||
|
#include "deflate.h"
|
||
|
|
||
|
|
||
|
#ifdef FULL_DEBUG
|
||
|
void FastEncoderVerifyHashes(t_encoder_context *context, long bufpos)
|
||
|
{
|
||
|
int i;
|
||
|
const t_search_node *lookup = context->fast_encoder->lookup;
|
||
|
const t_search_node *prev = context->fast_encoder->prev;
|
||
|
const BYTE *window = context->fast_encoder->window;
|
||
|
|
||
|
for (i = 0; i < FAST_ENCODER_HASH_TABLE_SIZE; i++)
|
||
|
{
|
||
|
t_search_node where = lookup[i];
|
||
|
t_search_node next_where;
|
||
|
|
||
|
while (where != 0 && bufpos - where < FAST_ENCODER_WINDOW_SIZE)
|
||
|
{
|
||
|
int hash = FAST_ENCODER_RECALCULATE_HASH(where);
|
||
|
|
||
|
_ASSERT(hash == i);
|
||
|
|
||
|
next_where = prev[where & FAST_ENCODER_WINDOW_MASK];
|
||
|
|
||
|
if (bufpos - next_where >= FAST_ENCODER_WINDOW_SIZE)
|
||
|
break;
|
||
|
|
||
|
_ASSERT(next_where < where);
|
||
|
|
||
|
where = next_where;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void FastEncoderVerifyHashChain(t_encoder_context *context, long bufpos, int chain_number)
|
||
|
{
|
||
|
const t_search_node *lookup = context->fast_encoder->lookup;
|
||
|
const t_search_node *prev = context->fast_encoder->prev;
|
||
|
BYTE *window = context->fast_encoder->window;
|
||
|
t_search_node where;
|
||
|
t_search_node next_where;
|
||
|
int print = 0;
|
||
|
|
||
|
top:
|
||
|
where = lookup[chain_number];
|
||
|
|
||
|
if (print)
|
||
|
printf("Verify chain %d\n", chain_number);
|
||
|
|
||
|
while (where != 0 && bufpos - where < FAST_ENCODER_WINDOW_SIZE)
|
||
|
{
|
||
|
int hash = FAST_ENCODER_RECALCULATE_HASH(where);
|
||
|
BYTE *window = context->fast_encoder->window;
|
||
|
|
||
|
if (print)
|
||
|
printf(" loc %d: char = %3d %3d %3d\n", where, window[where], window[where+1], window[where+2]);
|
||
|
|
||
|
if (hash != chain_number && print == 0)
|
||
|
{
|
||
|
print = 1;
|
||
|
goto top;
|
||
|
}
|
||
|
|
||
|
_ASSERT(hash == chain_number);
|
||
|
|
||
|
next_where = prev[where & FAST_ENCODER_WINDOW_MASK];
|
||
|
|
||
|
if (bufpos - next_where >= FAST_ENCODER_WINDOW_SIZE)
|
||
|
break;
|
||
|
|
||
|
if (next_where >= where && print == 0)
|
||
|
{
|
||
|
print = 1;
|
||
|
goto top;
|
||
|
}
|
||
|
|
||
|
_ASSERT(next_where < where);
|
||
|
|
||
|
where = next_where;
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|