14 #ifndef GIL_KERNEL_HPP 15 #define GIL_KERNEL_HPP 30 #include <boost/array.hpp> 31 #include "../../gil_config.hpp" 32 #include "../../utilities.hpp" 34 namespace boost {
namespace gil {
41 template <
typename Core>
47 explicit kernel_1d_adaptor(std::size_t center_in) : _center(center_in) {assert(_center<this->size());}
49 Core(size_in), _center(center_in) {assert(_center<this->size());}
53 Core::operator=(k_in);
57 std::size_t left_size()
const {assert(_center<this->size());
return _center;}
58 std::size_t right_size()
const {assert(_center<this->size());
return this->size()-_center-1;}
59 std::size_t& center() {
return _center;}
60 const std::size_t& center()
const {
return _center;}
66 template <
typename T,
typename Alloc = std::allocator<T> >
71 kernel_1d(std::size_t size_in,std::size_t center_in) : parent_t(size_in,center_in) {}
72 template <
typename FwdIterator>
73 kernel_1d(FwdIterator elements, std::size_t size_in, std::size_t center_in) : parent_t(size_in,center_in) {
74 detail::copy_n(elements,size_in,this->begin());
80 template <
typename T,std::
size_t Size>
85 explicit kernel_1d_fixed(std::size_t center_in) : parent_t(center_in) {}
87 template <
typename FwdIterator>
88 explicit kernel_1d_fixed(FwdIterator elements, std::size_t center_in) : parent_t(center_in) {
89 detail::copy_n(elements,Size,this->begin());
95 template <
typename Kernel>
97 Kernel result(kernel);
98 result.center()=kernel.right_size();
99 std::reverse(result.begin(), result.end());
Kernel reverse_kernel(const Kernel &kernel)
reverse a kernel
kernel adaptor for one-dimensional cores Core needs to provide size(),begin(),end(),operator[], value_type,iterator,const_iterator,reference,const_reference