// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_LZP_BUFFER_KERNEl_C_
#define DLIB_LZP_BUFFER_KERNEl_C_
#include "lzp_buffer_kernel_abstract.h"
#include "../algs.h"
#include "../assert.h"
#include <iostream>
namespace dlib
{
template <
typename lzp_base
>
class lzp_buffer_kernel_c : public lzp_base
{
public:
lzp_buffer_kernel_c (
unsigned long buffer_size
);
unsigned char operator[] (
unsigned long index
) const;
unsigned long make_safe (
unsigned long buffer_size
)
/*!
ensures
- if ( 10 < buffer_size < 32) then
- returns buffer_size
- else
- throws due to failed CASSERT
!*/
{
// make sure requires clause is not broken
DLIB_CASSERT( 10 < buffer_size && buffer_size < 32,
"\tlzp_buffer::lzp_buffer(unsigned long)"
<< "\n\tbuffer_size must be in the range 11 to 31."
<< "\n\tthis: " << this
<< "\n\tbuffer_size: " << buffer_size
);
return buffer_size;
}
};
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
// member function definitions
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename lzp_base
>
unsigned char lzp_buffer_kernel_c<lzp_base>::
operator[] (
unsigned long index
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->size(),
"\tunsigned char lzp_buffer::operator[](unsigned long) const"
<< "\n\tindex must be in the range 0 to size()()-1"
<< "\n\tthis: " << this
<< "\n\tsize(): " << this->size()
<< "\n\tindex: " << index
);
// call the real function
return lzp_base::operator[](index);
}
// ----------------------------------------------------------------------------------------
template <
typename lzp_base
>
lzp_buffer_kernel_c<lzp_base>::
lzp_buffer_kernel_c (
unsigned long buffer_size
) :
lzp_base(make_safe(buffer_size))
{
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_LZP_BUFFER_KERNEl_C_