vspline 1.1.0
Generic C++11 Code for Uniform B-Splines
Public Types | Public Member Functions | Public Attributes | List of all members
vspline::mirror_gate< rc_type, _vsize > Struct Template Reference

mirror gate 'folds' coordinates into the range. From the infinite number of mirror images resulting from mirroring the input on the bounds, the only one inside the range is picked as the result. When using this gate type with splines with MIRROR boundary conditions, if the shape of the core for the axis in question is M, _lower would be passed 0 and _upper M-1. For splines with REFLECT boundary conditions, we'd pass -0.5 to _lower and M-0.5 to upper, since here we mirror 'between bounds' and the defined range is wider. More...

#include <map.h>

Inheritance diagram for vspline::mirror_gate< rc_type, _vsize >:
vspline::unary_functor< rc_type, rc_type, vspline::vector_traits< rc_type > ::size > vspline::unary_functor_tag< _vsize >

Public Types

typedef vspline::unary_functor< rc_type, rc_type, _vsize > base_type
 
typedef vector_traits< IN, vsize >::type in_v
 vectorized in_type and out_type. vspline::vector_traits supplies these types so that multidimensional/multichannel data come as vigra::TinyVectors, while 'singular' data won't be made into TinyVectors of one element. More...
 
typedef vector_traits< OUT, vsize >::type out_v
 
- Public Types inherited from vspline::unary_functor< rc_type, rc_type, vspline::vector_traits< rc_type > ::size >
enum  
 
enum  
 
enum  
 
typedef rc_type in_type
 
typedef rc_type out_type
 
typedef vspline::vector_traits< rc_type >::ele_type in_ele_type
 
typedef vspline::vector_traits< rc_type >::ele_type out_ele_type
 
typedef vigra::TinyVector< in_ele_type, dim_inin_nd_ele_type
 
typedef vigra::TinyVector< out_ele_type, dim_outout_nd_ele_type
 
typedef vector_traits< rc_type, vsize >::ele_v in_ele_v
 a simdized type of the elementary type of result_type, which is used for coefficients and results. this is fixed via the traits class vector_traits (in vector.h). Note how we derive this type using vsize from the template argument, not what vspline::vector_traits deems appropriate for ele_type - though both numbers will be the same in most cases. More...
 
typedef vector_traits< rc_type, vsize >::ele_v out_ele_v
 
typedef vector_traits< rc_type, vsize >::nd_ele_v in_nd_ele_v
 
typedef vector_traits< rc_type, vsize >::nd_ele_v out_nd_ele_v
 
typedef vector_traits< rc_type, vsize >::type in_v
 vectorized in_type and out_type. vspline::vector_traits supplies these types so that multidimensional/multichannel data come as vigra::TinyVectors, while 'singular' data won't be made into TinyVectors of one element. More...
 
typedef vector_traits< rc_type, vsize >::type out_v
 
typedef vector_traits< int, vsize >::ele_v ic_v
 vsize wide vector of ints, used for gather/scatter indexes More...
 

Public Member Functions

 mirror_gate (rc_type _lower, rc_type _upper)
 
void eval (const rc_type &c, rc_type &result) const
 
template<typename = std::enable_if < ( _vsize > 1 ) >>
void eval (const in_v &c, out_v &result) const
 

Public Attributes

const rc_type lower
 
const rc_type upper
 

Additional Inherited Members

- Static Public Attributes inherited from vspline::unary_functor< rc_type, rc_type, vspline::vector_traits< rc_type > ::size >
static const bool has_capped_eval
 

Detailed Description

template<typename rc_type, size_t _vsize = vspline::vector_traits < rc_type > :: size>
struct vspline::mirror_gate< rc_type, _vsize >

mirror gate 'folds' coordinates into the range. From the infinite number of mirror images resulting from mirroring the input on the bounds, the only one inside the range is picked as the result. When using this gate type with splines with MIRROR boundary conditions, if the shape of the core for the axis in question is M, _lower would be passed 0 and _upper M-1. For splines with REFLECT boundary conditions, we'd pass -0.5 to _lower and M-0.5 to upper, since here we mirror 'between bounds' and the defined range is wider.

Note how this mode of 'mirroring' allows use of arbitrary coordinates, rather than limiting the range of acceptable input to the first reflection, as some implementations do.

Definition at line 293 of file map.h.

Member Typedef Documentation

◆ base_type

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
typedef vspline::unary_functor< rc_type , rc_type , _vsize > vspline::mirror_gate< rc_type, _vsize >::base_type

Definition at line 326 of file map.h.

◆ in_v

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
typedef vector_traits<IN,vsize>::type vspline::unary_functor< IN, OUT, _vsize >::in_v

vectorized in_type and out_type. vspline::vector_traits supplies these types so that multidimensional/multichannel data come as vigra::TinyVectors, while 'singular' data won't be made into TinyVectors of one element.

Definition at line 254 of file unary_functor.h.

◆ out_v

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
typedef vector_traits<OUT,vsize>::type vspline::unary_functor< IN, OUT, _vsize >::out_v

Definition at line 255 of file unary_functor.h.

Constructor & Destructor Documentation

◆ mirror_gate()

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
vspline::mirror_gate< rc_type, _vsize >::mirror_gate ( rc_type  _lower,
rc_type  _upper 
)
inline

Definition at line 299 of file map.h.

Member Function Documentation

◆ eval() [1/2]

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
template<typename = std::enable_if < ( _vsize > 1 ) >>
void vspline::mirror_gate< rc_type, _vsize >::eval ( const in_v c,
out_v result 
) const
inline

Definition at line 332 of file map.h.

◆ eval() [2/2]

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
void vspline::mirror_gate< rc_type, _vsize >::eval ( const rc_type c,
rc_type result 
) const
inline

Definition at line 307 of file map.h.

Member Data Documentation

◆ lower

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
const rc_type vspline::mirror_gate< rc_type, _vsize >::lower

Definition at line 296 of file map.h.

◆ upper

template<typename rc_type , size_t _vsize = vspline::vector_traits < rc_type > :: size>
const rc_type vspline::mirror_gate< rc_type, _vsize >::upper

Definition at line 297 of file map.h.


The documentation for this struct was generated from the following file: