26 #ifndef MLN_CORE_ROUTINE_PRIMARY_HH
27 # define MLN_CORE_ROUTINE_PRIMARY_HH
36 # include <mln/core/concept/image.hh>
45 template <
typename I>
struct primary_type;
51 const typename internal::primary_type<I>::ret&
56 # ifndef MLN_INCLUDE_ONLY
64 template <
typename I>
struct primary_type;
66 template <
typename I,
typename C>
67 struct primary_type_helper
69 typedef typename I::delegatee D;
70 typedef typename primary_type<D>::ret
ret;
74 struct primary_type_helper< I, mln::trait::image::category::primary >
82 typedef mln_trait_image_category(I) Cat;
83 typedef typename primary_type_helper<I, Cat>::
ret ret;
90 const typename internal::primary_type<I>::ret&
91 primary_(const Image<I>& input);
95 const typename internal::primary_type<I>::ret&
96 primary_(trait::image::category::
primary,
97 const Image<I>& input)
102 template <
typename I>
104 const typename internal::primary_type<I>::ret&
105 primary_(trait::image::category::morpher,
106 const Image<I>& input)
108 return primary_(
exact(input).unmorph_());
111 template <
typename I>
113 const typename internal::primary_type<I>::ret&
114 primary_(
const Image<I>& input)
116 return primary_(mln_trait_image_category(I)(),
126 template <
typename I>
128 const typename internal::primary_type<I>::ret&
131 mln_precondition(
exact(input).is_valid());
132 return internal::primary_(input);
136 # endif // ! MLN_INCLUDE_ONLY
141 #endif // ! MLN_CORE_ROUTINE_PRIMARY_HH