29 #ifndef TOOLS_SIMPLE_POINT3D_LUT_TBB_HH
30 # define TOOLS_SIMPLE_POINT3D_LUT_TBB_HH
32 #include <tbb/blocked_range.h>
33 #include <tbb/parallel_for.h>
35 #include "simple_point3d_lut.hh"
44 template <
typename FG,
typename BG>
50 simple_point_lut_t& simple_point_lut)
51 : fg_fun_(fg_fun), bg_fun_(bg_fun), nbh_(nbh),
52 simple_point_lut_(simple_point_lut)
56 void operator()(
const tbb::blocked_range<config_3d_t>& r)
const
62 typedef mln_domain(I) B;
63 typedef mln_psite(I) P;
65 B b = make::box3d(-1,-1,-1, 1,1,1);
79 mln_fwd_niter_(
N) n(nbh_, p);
88 simple_point_lut_[i] = ( fg_fun_(fg_ima) == 1
89 && bg_fun_(bg_ima) == 1);
100 simple_point_lut_t& simple_point_lut_;
112 template <
typename FG,
typename BG>
114 simple_point3d_lut_tbb(FG fg_fun, BG bg_fun)
117 const unsigned dim = 3;
118 const unsigned max_nneighbs = mlc_pow_int(3, dim) - 1;
119 const unsigned nconfigs = mlc_pow_int(2, max_nneighbs);
123 simple_point_lut_t simple_point_lut(nconfigs,
false);
125 tbb::parallel_for(tbb::blocked_range<config_3d_t>(0, nconfigs),
130 return simple_point_lut;
140 simple_point3d_lut_tbb__6_26()
142 return simple_point3d_lut_tbb(connectivity_number_3d__6_26_one,
143 connectivity_number_3d__26_6_one);
153 simple_point3d_lut_tbb__26_6()
155 return simple_point3d_lut_tbb(connectivity_number_3d__26_6_one,
156 connectivity_number_3d__6_26_one);
166 simple_point3d_lut_tbb__6p_18()
168 return simple_point3d_lut_tbb(connectivity_number_3d__6p_18_one,
169 connectivity_number_3d__18_6p_one);
179 simple_point3d_lut_tbb__18_6p()
181 return simple_point3d_lut_tbb(connectivity_number_3d__18_6p_one,
182 connectivity_number_3d__6p_18_one);
185 #endif // ! TOOLS_SIMPLE_POINT3D_LUT_TBB_HH