102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
// 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_
|
|
|