27 #ifndef MLN_CORE_INTERNAL_BOX_IMPL_HH
28 # define MLN_CORE_INTERNAL_BOX_IMPL_HH
36 # include <mln/core/internal/force_exact.hh>
53 template <
unsigned n,
typename C,
typename E>
56 template <
typename C,
typename E>
57 struct box_impl_<3, C, E>
60 unsigned nslis()
const;
69 unsigned nrows()
const;
78 unsigned ncols()
const;
87 unsigned width()
const;
90 unsigned height()
const;
93 unsigned depth()
const;
96 template <
typename C,
typename E>
97 struct box_impl_<2, C, E>
100 unsigned nrows()
const;
109 unsigned ncols()
const;
118 unsigned width()
const;
121 unsigned height()
const;
125 template <
typename C,
typename E>
126 struct box_impl_<1, C, E>
129 unsigned ninds()
const;
139 # ifndef MLN_INCLUDE_ONLY
145 template <
typename C,
typename E>
147 unsigned box_impl_<3, C, E>::nslis()
const
149 return internal::force_exact<E>(*this).bbox().len(0);
152 template <
typename C,
typename E>
154 C box_impl_<3, C, E>::min_sli()
const
156 return internal::force_exact<E>(*this).bbox().pmin()[0];
159 template <
typename C,
typename E>
161 C box_impl_<3, C, E>::max_sli()
const
163 return internal::force_exact<E>(*this).bbox().pmax()[0];
166 template <
typename C,
typename E>
168 unsigned box_impl_<3, C, E>::nrows()
const
170 return internal::force_exact<E>(*this).bbox().len(1);
173 template <
typename C,
typename E>
175 C box_impl_<3, C, E>::min_row()
const
177 return internal::force_exact<E>(*this).bbox().pmin()[1];
180 template <
typename C,
typename E>
182 C box_impl_<3, C, E>::max_row()
const
184 return internal::force_exact<E>(*this).bbox().pmax()[1];
187 template <
typename C,
typename E>
189 unsigned box_impl_<3, C, E>::ncols()
const
191 return internal::force_exact<E>(*this).bbox().len(2);
194 template <
typename C,
typename E>
196 C box_impl_<3, C, E>::min_col()
const
198 return internal::force_exact<E>(*this).bbox().pmin()[2];
201 template <
typename C,
typename E>
203 C box_impl_<3, C, E>::max_col()
const
205 return internal::force_exact<E>(*this).bbox().pmax()[2];
209 template <
typename C,
typename E>
211 unsigned box_impl_<3, C, E>::width()
const
213 return internal::force_exact<E>(*this).bbox().len(2);
216 template <
typename C,
typename E>
218 unsigned box_impl_<3, C, E>::height()
const
220 return internal::force_exact<E>(*this).bbox().len(1);
223 template <
typename C,
typename E>
225 unsigned box_impl_<3, C, E>::depth()
const
227 return internal::force_exact<E>(*this).bbox().len(0);
233 template <
typename C,
typename E>
235 unsigned box_impl_<2, C, E>::nrows()
const
237 return internal::force_exact<E>(*this).bbox().len(0);
240 template <
typename C,
typename E>
242 C box_impl_<2, C, E>::min_row()
const
244 return internal::force_exact<E>(*this).bbox().pmin()[0];
247 template <
typename C,
typename E>
249 C box_impl_<2, C, E>::max_row()
const
251 return internal::force_exact<E>(*this).bbox().pmax()[0];
254 template <
typename C,
typename E>
256 unsigned box_impl_<2, C, E>::ncols()
const
258 return internal::force_exact<E>(*this).bbox().len(1);
261 template <
typename C,
typename E>
263 C box_impl_<2, C, E>::min_col()
const
265 return internal::force_exact<E>(*this).bbox().pmin()[1];
268 template <
typename C,
typename E>
270 C box_impl_<2, C, E>::max_col()
const
272 return internal::force_exact<E>(*this).bbox().pmax()[1];
275 template <
typename C,
typename E>
277 unsigned box_impl_<2, C, E>::width()
const
279 return internal::force_exact<E>(*this).bbox().len(1);
282 template <
typename C,
typename E>
284 unsigned box_impl_<2, C, E>::height()
const
286 return internal::force_exact<E>(*this).bbox().len(0);
291 template <
typename C,
typename E>
293 unsigned box_impl_<1, C, E>::ninds()
const
295 return internal::force_exact<E>(*this).bbox().len(0);
298 template <
typename C,
typename E>
300 C box_impl_<1, C, E>::min_ind()
const
302 return internal::force_exact<E>(*this).bbox().pmin()[0];
305 template <
typename C,
typename E>
307 C box_impl_<1, C, E>::max_ind()
const
309 return internal::force_exact<E>(*this).bbox().pmax()[0];
312 # endif // ! MLN_INCLUDE_ONLY
319 #endif // ! MLN_CORE_INTERNAL_BOX_IMPL_HH