You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
concurrentqueue/benchmarks/dlib/sliding_buffer/sliding_buffer_kernel_c.h

223 lines
6.3 KiB
C++

// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_SLIDING_BUFFER_KERNEl_C_
#define DLIB_SLIDING_BUFFER_KERNEl_C_
#include "sliding_buffer_kernel_abstract.h"
#include "../algs.h"
#include "../assert.h"
#include <iostream>
namespace dlib
{
template <
typename sb_base
>
class sliding_buffer_kernel_c : public sb_base
{
typedef typename sb_base::type T;
public:
void set_size (
unsigned long exp_size
);
const T& operator[] (
unsigned long index
) const;
T& operator[] (
unsigned long index
);
unsigned long get_element_id (
unsigned long index
) const;
unsigned long get_element_index (
unsigned long element_id
) const;
const T& element (
) const;
T& element (
);
};
template <
typename sb_base
>
inline void swap (
sliding_buffer_kernel_c<sb_base>& a,
sliding_buffer_kernel_c<sb_base>& b
) { a.swap(b); }
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
// member function definitions
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
void sliding_buffer_kernel_c<sb_base>::
set_size (
unsigned long exp_size
)
{
// make sure requires clause is not broken
DLIB_CASSERT( 0 < exp_size && exp_size < 32,
"\tvoid sliding_buffer::set_size(unsigned long)"
<< "\n\texp_size must be some number between 1 and 31"
<< "\n\tthis: " << this
<< "\n\texp_size: " << exp_size
);
// call the real function
sb_base::set_size(exp_size);
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
unsigned long sliding_buffer_kernel_c<sb_base>::
get_element_id (
unsigned long index
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->size(),
"\tunsigned long sliding_buffer::get_element_id(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 sb_base::get_element_id(index);
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
unsigned long sliding_buffer_kernel_c<sb_base>::
get_element_index (
unsigned long element_id
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( element_id < this->size(),
"\tunsigned long sliding_buffer::get_element_index(unsigned long) const"
<< "\n\tid must be in the range 0 to size()-1"
<< "\n\tthis: " << this
<< "\n\tsize(): " << this->size()
<< "\n\tid: " << element_id
);
// call the real function
return sb_base::get_element_index(element_id);
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
const typename sb_base::type& sliding_buffer_kernel_c<sb_base>::
operator[] (
unsigned long index
) const
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->size(),
"\tconst T& sliding_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 sb_base::operator[](index);
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
typename sb_base::type& sliding_buffer_kernel_c<sb_base>::
operator[] (
unsigned long index
)
{
// make sure requires clause is not broken
DLIB_CASSERT( index < this->size(),
"\tT& sliding_buffer::operator[](unsigned long)"
<< "\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 sb_base::operator[](index);
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
const typename sb_base::type& sliding_buffer_kernel_c<sb_base>::
element (
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->current_element_valid() == true,
"\tconst T& sliding_buffer::element"
<< "\n\tyou can't access the current element if it doesn't exist"
<< "\n\tthis: " << this
);
// call the real function
return sb_base::element();
}
// ----------------------------------------------------------------------------------------
template <
typename sb_base
>
typename sb_base::type& sliding_buffer_kernel_c<sb_base>::
element (
)
{
// make sure requires clause is not broken
DLIB_CASSERT(this->current_element_valid() == true,
"\tT& sliding_buffer::element"
<< "\n\tyou can't access the current element if it doesn't exist"
<< "\n\tthis: " << this
);
// call the real function
return sb_base::element();
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_SLIDING_BUFFER_KERNEl_C_