sustaining_gazes/lib/3rdParty/dlib/include/dlib/lz77_buffer/lz77_buffer_kernel_c.h

170 lines
5.4 KiB
C++

// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_LZ77_BUFFER_KERNEl_C_
#define DLIB_LZ77_BUFFER_KERNEl_C_
#include "lz77_buffer_kernel_abstract.h"
#include "../algs.h"
#include "../assert.h"
#include <iostream>
namespace dlib
{
template <
typename lz77_base
>
class lz77_buffer_kernel_c : public lz77_base
{
public:
lz77_buffer_kernel_c (
unsigned long total_limit,
unsigned long lookahead_limit
);
unsigned char lookahead_buffer (
unsigned long index
) const;
unsigned char history_buffer (
unsigned long index
) const;
void shift_buffers (
unsigned long N
);
unsigned long make_safe (
unsigned long total_limit,
unsigned long lookahead_limit
)
/*!
ensures
- if ( 6 < total_limit < 32 &&
15 < lookahead_limit <= 2^(total_limit-2)
) then
- returns total_limit
- else
- throws due to failed CASSERT
!*/
{
unsigned long exp_size = (total_limit!=0)?total_limit-2:0;
unsigned long two_pow_total_limit_minus_2 = 1;
while (exp_size != 0)
{
--exp_size;
two_pow_total_limit_minus_2 <<= 1;
}
// make sure requires clause is not broken
DLIB_CASSERT( 6 < total_limit && total_limit < 32 &&
15 < lookahead_limit && lookahead_limit <= two_pow_total_limit_minus_2,
"\tlz77_buffer::lz77_buffer(unsigned long,unsigned long)"
<< "\n\ttotal_limit must be in the range 7 to 31 and \n\tlookahead_limit in the range 15 to 2^(total_limit-2)"
<< "\n\tthis: " << this
<< "\n\ttotal_limit: " << total_limit
<< "\n\tlookahead_limit: " << lookahead_limit
);
return total_limit;
}
};
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
// member function definitions
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename lz77_base
>
void lz77_buffer_kernel_c<lz77_base>::
shift_buffers (
unsigned long N
)
{
// make sure requires clause is not broken
DLIB_CASSERT( N <= this->get_lookahead_buffer_size(),
"\tvoid lz77_buffer::shift_buffers(unsigned long)"
<< "\n\tN must be <= the number of chars in the lookahead buffer"
<< "\n\tthis: " << this
<< "\n\tget_lookahead_buffer_size(): " << this->get_lookahead_buffer_size()
<< "\n\tN: " << N
);
// call the real function
lz77_base::shift_buffers(N);
}
// ----------------------------------------------------------------------------------------
template <
typename lz77_base
>
unsigned char lz77_buffer_kernel_c<lz77_base>::
history_buffer (
unsigned long index
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->get_history_buffer_size(),
"\tunsigned char lz77_buffer::history_buffer(unsigned long) const"
<< "\n\tindex must be in the range 0 to get_history_buffer_size()-1"
<< "\n\tthis: " << this
<< "\n\tget_history_buffer_size(): " << this->get_history_buffer_size()
<< "\n\tindex: " << index
);
// call the real function
return lz77_base::history_buffer(index);
}
// ----------------------------------------------------------------------------------------
template <
typename lz77_base
>
unsigned char lz77_buffer_kernel_c<lz77_base>::
lookahead_buffer (
unsigned long index
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->get_lookahead_buffer_size(),
"\tunsigned char lz77_buffer::lookahead_buffer(unsigned long) const"
<< "\n\tindex must be in the range 0 to get_lookahead_buffer_size()-1"
<< "\n\tthis: " << this
<< "\n\tget_lookahead_buffer_size(): " << this->get_lookahead_buffer_size()
<< "\n\tindex: " << index
);
// call the real function
return lz77_base::lookahead_buffer(index);
}
// ----------------------------------------------------------------------------------------
template <
typename lz77_base
>
lz77_buffer_kernel_c<lz77_base>::
lz77_buffer_kernel_c (
unsigned long total_limit,
unsigned long lookahead_limit
) :
lz77_base(make_safe(total_limit,lookahead_limit),lookahead_limit)
{
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_LZ77_BUFFER_KERNEl_C_