Olena-patches
Threads by month
- ----- 2025 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 9625 discussions
* tests/unit_test/Makefile.am: update list of tests.
* tests/unit_test/mln_accu_center.cc,
* tests/unit_test/mln_accu_land_basic.cc,
* tests/unit_test/mln_accu_transform.cc,
* tests/unit_test/mln_accu_transform_diagonal.cc,
* tests/unit_test/mln_accu_transform_directional.cc,
* tests/unit_test/mln_accu_transform_snake.cc,
* tests/unit_test/mln_accu_transform_stop.cc,
* tests/unit_test/mln_arith_diff_abs.cc,
* tests/unit_test/mln_canvas_distance_geodesic.cc,
* tests/unit_test/mln_core_alias_complex_geometry.cc,
* tests/unit_test/mln_core_alias_complex_image.cc,
* tests/unit_test/mln_core_internal_graph_neighborhood_base.cc,
* tests/unit_test/mln_core_internal_graph_psite_base.cc,
* tests/unit_test/mln_core_internal_graph_window_base.cc,
* tests/unit_test/mln_core_site_set_p_edges_psite.cc,
* tests/unit_test/mln_core_site_set_p_vertices_psite.cc,
* tests/unit_test/mln_debug_draw_graph.cc,
* tests/unit_test/mln_extension_adjust.cc,
* tests/unit_test/mln_extension_duplicate.cc,
* tests/unit_test/mln_fun_internal_array_base.cc,
* tests/unit_test/mln_fun_l2l_relabel.cc,
* tests/unit_test/mln_fun_v2b_lnot.cc,
* tests/unit_test/mln_fun_vv2v_diff_abs.cc,
* tests/unit_test/mln_fun_vv2v_land.cc,
* tests/unit_test/mln_fun_vv2v_land_not.cc,
* tests/unit_test/mln_fun_vv2v_lor.cc,
* tests/unit_test/mln_fun_vv2v_lxor.cc,
* tests/unit_test/mln_fun_vv2v_macros.cc,
* tests/unit_test/mln_fun_vv2v_vec.cc,
* tests/unit_test/mln_fun_x2v_l1_norm.cc,
* tests/unit_test/mln_labeling_relabel.cc,
* tests/unit_test/mln_level_domain.cc,
* tests/unit_test/mln_level_transform_inplace.cc,
* tests/unit_test/mln_linear_convolve_2x1d.cc,
* tests/unit_test/mln_linear_sobel_2d.cc,
* tests/unit_test/mln_logical_includes.cc,
* tests/unit_test/mln_logical_xor.cc,
* tests/unit_test/mln_make_graph.cc,
* tests/unit_test/mln_make_relabelfun.cc,
* tests/unit_test/mln_math_diff_abs.cc,
* tests/unit_test/mln_metal_ands.cc,
* tests/unit_test/mln_morpho_skeleton_constrained.cc,
* tests/unit_test/mln_set_compute.cc,
* tests/unit_test/mln_topo_is_simple_2d.cc,
* tests/unit_test/mln_transform_distance_geodesic.cc,
* tests/unit_test/mln_transform_influence_zone_geodesic.cc,
* tests/unit_test/mln_util_dual_graph.cc,
* tests/unit_test/mln_util_edge.cc,
* tests/unit_test/mln_util_max.cc,
* tests/unit_test/mln_util_vertex.cc,
* tests/unit_test/mln_value_label_16.cc,
* tests/unit_test/mln_value_label_8.cc: new tests.
* tests/unit_test/mln_util_internal_graph_edge.cc,
* tests/unit_test/mln_util_internal_graph_edge_psite.cc,
* tests/unit_test/mln_util_internal_graph_psite_base.cc,
* tests/unit_test/mln_core_alias_bin_2complex_image3df.cc,
* tests/unit_test/mln_core_image_line_graph_psite.cc,
* tests/unit_test/mln_core_site_set_p_graph.cc,
* tests/unit_test/mln_core_site_set_p_line_graph.cc,
* tests/unit_test/mln_core_site_set_p_line_graph_piter.cc,
* tests/unit_test/mln_debug_graph.cc,
* tests/unit_test/mln_linear_line_x2_convolve.cc,
* tests/unit_test/mln_linear_sobel.cc,
* tests/unit_test/mln_logical_and_not_spe.cc,
* tests/unit_test/mln_logical_and_spe.cc,
* tests/unit_test/mln_logical_or_spe.cc,
* tests/unit_test/mln_util_internal_graph_vertex.cc,
* tests/unit_test/mln_util_internal_graph_vertex_psite.cc: remove.
File were removed or renamed.
* mln_arith_min_spe.cc,
* mln_arith_revert_spe.cc,
* mln_arith_times_spe.cc,
* mln_debug_iota_spe.cc,
* mln_debug_println_spe.cc,
* mln_debug_println_with_border_spe.cc,
* mln_histo_compute_spe.cc,
* mln_labeling_level_spe.cc,
* mln_level_apply_spe.cc,
* mln_level_assign_spe.cc,
* mln_level_fill_with_image_spe.cc,
* mln_level_fill_with_value_spe.cc,
* mln_level_paste_spe.cc,
* mln_level_transform_spe.cc,
* mln_logical_not_spe.cc,
* mln_morpho_erosion_spe.cc: removed. Can't include directly .spe.hh
files.
---
milena/ChangeLog | 96 +
milena/tests/unit_test/Makefile.am | 3568 ++++++++++----------
milena/tests/unit_test/build_unit_test.sh | 4 +-
milena/tests/unit_test/mln_accu_center.cc | 8 +
milena/tests/unit_test/mln_accu_land_basic.cc | 8 +
milena/tests/unit_test/mln_accu_transform.cc | 8 +
.../tests/unit_test/mln_accu_transform_diagonal.cc | 8 +
.../unit_test/mln_accu_transform_directional.cc | 8 +
milena/tests/unit_test/mln_accu_transform_snake.cc | 8 +
milena/tests/unit_test/mln_accu_transform_stop.cc | 8 +
milena/tests/unit_test/mln_arith_diff_abs.cc | 8 +
milena/tests/unit_test/mln_arith_min_spe.cc | 8 -
milena/tests/unit_test/mln_arith_revert_spe.cc | 8 -
milena/tests/unit_test/mln_arith_times_spe.cc | 8 -
.../unit_test/mln_canvas_distance_geodesic.cc | 8 +
.../mln_core_alias_bin_2complex_image3df.cc | 8 -
.../unit_test/mln_core_alias_complex_geometry.cc | 8 +
.../unit_test/mln_core_alias_complex_image.cc | 8 +
.../unit_test/mln_core_image_line_graph_psite.cc | 8 -
.../mln_core_internal_graph_neighborhood_base.cc | 8 +
.../mln_core_internal_graph_psite_base.cc | 8 +
.../mln_core_internal_graph_window_base.cc | 8 +
.../unit_test/mln_core_site_set_p_edges_psite.cc | 8 +
.../tests/unit_test/mln_core_site_set_p_graph.cc | 8 -
.../unit_test/mln_core_site_set_p_line_graph.cc | 8 -
.../mln_core_site_set_p_line_graph_piter.cc | 8 -
.../mln_core_site_set_p_vertices_psite.cc | 8 +
milena/tests/unit_test/mln_debug_draw_graph.cc | 8 +
milena/tests/unit_test/mln_debug_graph.cc | 8 -
milena/tests/unit_test/mln_debug_iota_spe.cc | 8 -
milena/tests/unit_test/mln_debug_println_spe.cc | 8 -
.../unit_test/mln_debug_println_with_border_spe.cc | 8 -
milena/tests/unit_test/mln_extension_adjust.cc | 8 +
milena/tests/unit_test/mln_extension_duplicate.cc | 8 +
.../tests/unit_test/mln_fun_internal_array_base.cc | 8 +
milena/tests/unit_test/mln_fun_l2l_relabel.cc | 8 +
milena/tests/unit_test/mln_fun_v2b_lnot.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_diff_abs.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_land.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_land_not.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_lor.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_lxor.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_macros.cc | 8 +
milena/tests/unit_test/mln_fun_vv2v_vec.cc | 8 +
milena/tests/unit_test/mln_fun_x2v_l1_norm.cc | 8 +
milena/tests/unit_test/mln_histo_compute_spe.cc | 8 -
milena/tests/unit_test/mln_labeling_level_spe.cc | 8 -
milena/tests/unit_test/mln_labeling_relabel.cc | 8 +
milena/tests/unit_test/mln_level_apply_spe.cc | 8 -
milena/tests/unit_test/mln_level_assign_spe.cc | 8 -
milena/tests/unit_test/mln_level_domain.cc | 8 +
.../unit_test/mln_level_fill_with_image_spe.cc | 8 -
.../unit_test/mln_level_fill_with_value_spe.cc | 8 -
milena/tests/unit_test/mln_level_paste_spe.cc | 8 -
.../tests/unit_test/mln_level_transform_inplace.cc | 8 +
milena/tests/unit_test/mln_level_transform_spe.cc | 8 -
milena/tests/unit_test/mln_linear_convolve_2x1d.cc | 8 +
.../tests/unit_test/mln_linear_line_x2_convolve.cc | 8 -
milena/tests/unit_test/mln_linear_sobel.cc | 8 -
milena/tests/unit_test/mln_linear_sobel_2d.cc | 8 +
milena/tests/unit_test/mln_logical_and_not_spe.cc | 8 -
milena/tests/unit_test/mln_logical_and_spe.cc | 8 -
milena/tests/unit_test/mln_logical_includes.cc | 8 +
milena/tests/unit_test/mln_logical_not_spe.cc | 8 -
milena/tests/unit_test/mln_logical_or_spe.cc | 8 -
milena/tests/unit_test/mln_logical_xor.cc | 8 +
milena/tests/unit_test/mln_make_graph.cc | 8 +
milena/tests/unit_test/mln_make_relabelfun.cc | 8 +
milena/tests/unit_test/mln_math_diff_abs.cc | 8 +
milena/tests/unit_test/mln_metal_ands.cc | 8 +
milena/tests/unit_test/mln_morpho_erosion_spe.cc | 8 -
.../unit_test/mln_morpho_skeleton_constrained.cc | 8 +
milena/tests/unit_test/mln_set_compute.cc | 8 +
milena/tests/unit_test/mln_topo_is_simple_2d.cc | 8 +
.../unit_test/mln_transform_distance_geodesic.cc | 8 +
.../mln_transform_influence_zone_geodesic.cc | 8 +
milena/tests/unit_test/mln_util_dual_graph.cc | 8 +
milena/tests/unit_test/mln_util_edge.cc | 8 +
.../unit_test/mln_util_internal_graph_edge.cc | 8 -
.../mln_util_internal_graph_edge_psite.cc | 8 -
.../mln_util_internal_graph_psite_base.cc | 8 -
.../unit_test/mln_util_internal_graph_vertex.cc | 8 -
.../mln_util_internal_graph_vertex_psite.cc | 8 -
milena/tests/unit_test/mln_util_max.cc | 8 +
milena/tests/unit_test/mln_util_vertex.cc | 8 +
milena/tests/unit_test/mln_value_label_16.cc | 8 +
milena/tests/unit_test/mln_value_label_8.cc | 8 +
87 files changed, 2317 insertions(+), 2023 deletions(-)
create mode 100644 milena/tests/unit_test/mln_accu_center.cc
create mode 100644 milena/tests/unit_test/mln_accu_land_basic.cc
create mode 100644 milena/tests/unit_test/mln_accu_transform.cc
create mode 100644 milena/tests/unit_test/mln_accu_transform_diagonal.cc
create mode 100644 milena/tests/unit_test/mln_accu_transform_directional.cc
create mode 100644 milena/tests/unit_test/mln_accu_transform_snake.cc
create mode 100644 milena/tests/unit_test/mln_accu_transform_stop.cc
create mode 100644 milena/tests/unit_test/mln_arith_diff_abs.cc
delete mode 100644 milena/tests/unit_test/mln_arith_min_spe.cc
delete mode 100644 milena/tests/unit_test/mln_arith_revert_spe.cc
delete mode 100644 milena/tests/unit_test/mln_arith_times_spe.cc
create mode 100644 milena/tests/unit_test/mln_canvas_distance_geodesic.cc
delete mode 100644 milena/tests/unit_test/mln_core_alias_bin_2complex_image3df.cc
create mode 100644 milena/tests/unit_test/mln_core_alias_complex_geometry.cc
create mode 100644 milena/tests/unit_test/mln_core_alias_complex_image.cc
delete mode 100644 milena/tests/unit_test/mln_core_image_line_graph_psite.cc
create mode 100644 milena/tests/unit_test/mln_core_internal_graph_neighborhood_base.cc
create mode 100644 milena/tests/unit_test/mln_core_internal_graph_psite_base.cc
create mode 100644 milena/tests/unit_test/mln_core_internal_graph_window_base.cc
create mode 100644 milena/tests/unit_test/mln_core_site_set_p_edges_psite.cc
delete mode 100644 milena/tests/unit_test/mln_core_site_set_p_graph.cc
delete mode 100644 milena/tests/unit_test/mln_core_site_set_p_line_graph.cc
delete mode 100644 milena/tests/unit_test/mln_core_site_set_p_line_graph_piter.cc
create mode 100644 milena/tests/unit_test/mln_core_site_set_p_vertices_psite.cc
create mode 100644 milena/tests/unit_test/mln_debug_draw_graph.cc
delete mode 100644 milena/tests/unit_test/mln_debug_graph.cc
delete mode 100644 milena/tests/unit_test/mln_debug_iota_spe.cc
delete mode 100644 milena/tests/unit_test/mln_debug_println_spe.cc
delete mode 100644 milena/tests/unit_test/mln_debug_println_with_border_spe.cc
create mode 100644 milena/tests/unit_test/mln_extension_adjust.cc
create mode 100644 milena/tests/unit_test/mln_extension_duplicate.cc
create mode 100644 milena/tests/unit_test/mln_fun_internal_array_base.cc
create mode 100644 milena/tests/unit_test/mln_fun_l2l_relabel.cc
create mode 100644 milena/tests/unit_test/mln_fun_v2b_lnot.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_diff_abs.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_land.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_land_not.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_lor.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_lxor.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_macros.cc
create mode 100644 milena/tests/unit_test/mln_fun_vv2v_vec.cc
create mode 100644 milena/tests/unit_test/mln_fun_x2v_l1_norm.cc
delete mode 100644 milena/tests/unit_test/mln_histo_compute_spe.cc
delete mode 100644 milena/tests/unit_test/mln_labeling_level_spe.cc
create mode 100644 milena/tests/unit_test/mln_labeling_relabel.cc
delete mode 100644 milena/tests/unit_test/mln_level_apply_spe.cc
delete mode 100644 milena/tests/unit_test/mln_level_assign_spe.cc
create mode 100644 milena/tests/unit_test/mln_level_domain.cc
delete mode 100644 milena/tests/unit_test/mln_level_fill_with_image_spe.cc
delete mode 100644 milena/tests/unit_test/mln_level_fill_with_value_spe.cc
delete mode 100644 milena/tests/unit_test/mln_level_paste_spe.cc
create mode 100644 milena/tests/unit_test/mln_level_transform_inplace.cc
delete mode 100644 milena/tests/unit_test/mln_level_transform_spe.cc
create mode 100644 milena/tests/unit_test/mln_linear_convolve_2x1d.cc
delete mode 100644 milena/tests/unit_test/mln_linear_line_x2_convolve.cc
delete mode 100644 milena/tests/unit_test/mln_linear_sobel.cc
create mode 100644 milena/tests/unit_test/mln_linear_sobel_2d.cc
delete mode 100644 milena/tests/unit_test/mln_logical_and_not_spe.cc
delete mode 100644 milena/tests/unit_test/mln_logical_and_spe.cc
create mode 100644 milena/tests/unit_test/mln_logical_includes.cc
delete mode 100644 milena/tests/unit_test/mln_logical_not_spe.cc
delete mode 100644 milena/tests/unit_test/mln_logical_or_spe.cc
create mode 100644 milena/tests/unit_test/mln_logical_xor.cc
create mode 100644 milena/tests/unit_test/mln_make_graph.cc
create mode 100644 milena/tests/unit_test/mln_make_relabelfun.cc
create mode 100644 milena/tests/unit_test/mln_math_diff_abs.cc
create mode 100644 milena/tests/unit_test/mln_metal_ands.cc
delete mode 100644 milena/tests/unit_test/mln_morpho_erosion_spe.cc
create mode 100644 milena/tests/unit_test/mln_morpho_skeleton_constrained.cc
create mode 100644 milena/tests/unit_test/mln_set_compute.cc
create mode 100644 milena/tests/unit_test/mln_topo_is_simple_2d.cc
create mode 100644 milena/tests/unit_test/mln_transform_distance_geodesic.cc
create mode 100644 milena/tests/unit_test/mln_transform_influence_zone_geodesic.cc
create mode 100644 milena/tests/unit_test/mln_util_dual_graph.cc
create mode 100644 milena/tests/unit_test/mln_util_edge.cc
delete mode 100644 milena/tests/unit_test/mln_util_internal_graph_edge.cc
delete mode 100644 milena/tests/unit_test/mln_util_internal_graph_edge_psite.cc
delete mode 100644 milena/tests/unit_test/mln_util_internal_graph_psite_base.cc
delete mode 100644 milena/tests/unit_test/mln_util_internal_graph_vertex.cc
delete mode 100644 milena/tests/unit_test/mln_util_internal_graph_vertex_psite.cc
create mode 100644 milena/tests/unit_test/mln_util_max.cc
create mode 100644 milena/tests/unit_test/mln_util_vertex.cc
create mode 100644 milena/tests/unit_test/mln_value_label_16.cc
create mode 100644 milena/tests/unit_test/mln_value_label_8.cc
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 07bdbdc..3dfa998 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,4 +1,100 @@
2008-11-20 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Update unit tests.
+
+ * tests/unit_test/Makefile.am: update list of tests.
+
+ * tests/unit_test/mln_accu_center.cc,
+ * tests/unit_test/mln_accu_land_basic.cc,
+ * tests/unit_test/mln_accu_transform.cc,
+ * tests/unit_test/mln_accu_transform_diagonal.cc,
+ * tests/unit_test/mln_accu_transform_directional.cc,
+ * tests/unit_test/mln_accu_transform_snake.cc,
+ * tests/unit_test/mln_accu_transform_stop.cc,
+ * tests/unit_test/mln_arith_diff_abs.cc,
+ * tests/unit_test/mln_canvas_distance_geodesic.cc,
+ * tests/unit_test/mln_core_alias_complex_geometry.cc,
+ * tests/unit_test/mln_core_alias_complex_image.cc,
+ * tests/unit_test/mln_core_internal_graph_neighborhood_base.cc,
+ * tests/unit_test/mln_core_internal_graph_psite_base.cc,
+ * tests/unit_test/mln_core_internal_graph_window_base.cc,
+ * tests/unit_test/mln_core_site_set_p_edges_psite.cc,
+ * tests/unit_test/mln_core_site_set_p_vertices_psite.cc,
+ * tests/unit_test/mln_debug_draw_graph.cc,
+ * tests/unit_test/mln_extension_adjust.cc,
+ * tests/unit_test/mln_extension_duplicate.cc,
+ * tests/unit_test/mln_fun_internal_array_base.cc,
+ * tests/unit_test/mln_fun_l2l_relabel.cc,
+ * tests/unit_test/mln_fun_v2b_lnot.cc,
+ * tests/unit_test/mln_fun_vv2v_diff_abs.cc,
+ * tests/unit_test/mln_fun_vv2v_land.cc,
+ * tests/unit_test/mln_fun_vv2v_land_not.cc,
+ * tests/unit_test/mln_fun_vv2v_lor.cc,
+ * tests/unit_test/mln_fun_vv2v_lxor.cc,
+ * tests/unit_test/mln_fun_vv2v_macros.cc,
+ * tests/unit_test/mln_fun_vv2v_vec.cc,
+ * tests/unit_test/mln_fun_x2v_l1_norm.cc,
+ * tests/unit_test/mln_labeling_relabel.cc,
+ * tests/unit_test/mln_level_domain.cc,
+ * tests/unit_test/mln_level_transform_inplace.cc,
+ * tests/unit_test/mln_linear_convolve_2x1d.cc,
+ * tests/unit_test/mln_linear_sobel_2d.cc,
+ * tests/unit_test/mln_logical_includes.cc,
+ * tests/unit_test/mln_logical_xor.cc,
+ * tests/unit_test/mln_make_graph.cc,
+ * tests/unit_test/mln_make_relabelfun.cc,
+ * tests/unit_test/mln_math_diff_abs.cc,
+ * tests/unit_test/mln_metal_ands.cc,
+ * tests/unit_test/mln_morpho_skeleton_constrained.cc,
+ * tests/unit_test/mln_set_compute.cc,
+ * tests/unit_test/mln_topo_is_simple_2d.cc,
+ * tests/unit_test/mln_transform_distance_geodesic.cc,
+ * tests/unit_test/mln_transform_influence_zone_geodesic.cc,
+ * tests/unit_test/mln_util_dual_graph.cc,
+ * tests/unit_test/mln_util_edge.cc,
+ * tests/unit_test/mln_util_max.cc,
+ * tests/unit_test/mln_util_vertex.cc,
+ * tests/unit_test/mln_value_label_16.cc,
+ * tests/unit_test/mln_value_label_8.cc: new tests.
+
+ * tests/unit_test/mln_util_internal_graph_edge.cc,
+ * tests/unit_test/mln_util_internal_graph_edge_psite.cc,
+ * tests/unit_test/mln_util_internal_graph_psite_base.cc,
+ * tests/unit_test/mln_core_alias_bin_2complex_image3df.cc,
+ * tests/unit_test/mln_core_image_line_graph_psite.cc,
+ * tests/unit_test/mln_core_site_set_p_graph.cc,
+ * tests/unit_test/mln_core_site_set_p_line_graph.cc,
+ * tests/unit_test/mln_core_site_set_p_line_graph_piter.cc,
+ * tests/unit_test/mln_debug_graph.cc,
+ * tests/unit_test/mln_linear_line_x2_convolve.cc,
+ * tests/unit_test/mln_linear_sobel.cc,
+ * tests/unit_test/mln_logical_and_not_spe.cc,
+ * tests/unit_test/mln_logical_and_spe.cc,
+ * tests/unit_test/mln_logical_or_spe.cc,
+ * tests/unit_test/mln_util_internal_graph_vertex.cc,
+ * tests/unit_test/mln_util_internal_graph_vertex_psite.cc: removed.
+ File were removed or renamed.
+
+ * mln_arith_min_spe.cc,
+ * mln_arith_revert_spe.cc,
+ * mln_arith_times_spe.cc,
+ * mln_debug_iota_spe.cc,
+ * mln_debug_println_spe.cc,
+ * mln_debug_println_with_border_spe.cc,
+ * mln_histo_compute_spe.cc,
+ * mln_labeling_level_spe.cc,
+ * mln_level_apply_spe.cc,
+ * mln_level_assign_spe.cc,
+ * mln_level_fill_with_image_spe.cc,
+ * mln_level_fill_with_value_spe.cc,
+ * mln_level_paste_spe.cc,
+ * mln_level_transform_spe.cc,
+ * mln_logical_not_spe.cc,
+ * mln_morpho_erosion_spe.cc: removed. Can't include directly .spe.hh
+ files.
+
+
+2008-11-20 Guillaume Lazzara <z(a)lrde.epita.fr>
Add labeling::relabel.
diff --git a/milena/tests/unit_test/Makefile.am b/milena/tests/unit_test/Makefile.am
index a5fbee7..e1c7897 100644
--- a/milena/tests/unit_test/Makefile.am
+++ b/milena/tests/unit_test/Makefile.am
@@ -3,1960 +3,2000 @@
include $(top_srcdir)/milena/tests/tests.mk
check_PROGRAMS = \
-mln_neighb_essential\
+mln_histo_all\
+mln_histo_data\
+mln_histo_compute\
+mln_histo_essential\
+mln_geom_pmin_pmax\
+mln_geom_max_row\
+mln_geom_chamfer\
+mln_geom_min_row\
+mln_geom_seeds2tiling\
+mln_geom_size1d\
+mln_geom_all\
+mln_geom_size2d\
+mln_geom_max_ind\
+mln_geom_max_col\
+mln_geom_size3d\
+mln_geom_ninds\
+mln_geom_nslis\
+mln_geom_delta\
+mln_geom_resize\
+mln_geom_nsites\
+mln_geom_min_col\
+mln_geom_complex_geometry\
+mln_geom_ncols\
+mln_geom_nrows\
+mln_geom_min_ind\
+mln_geom_bbox\
+mln_geom_seeds2tiling_roundness\
+mln_geom_min_sli\
+mln_geom_essential\
+mln_geom_max_sli\
+mln_draw_box\
+mln_draw_all\
+mln_draw_plot\
+mln_draw_label\
+mln_draw_line\
+mln_draw_essential\
+mln_pw_image\
+mln_pw_all\
+mln_pw_value\
+mln_pw_cst\
+mln_pw_var\
+mln_pw_essential\
mln_neighb_image\
mln_neighb_all\
mln_neighb_get\
-mln_util_nil\
-mln_util_ord_pair\
-mln_util_ord\
-mln_util_eat\
-mln_util_tree\
-mln_util_tree_fast_to_image\
-mln_util_tracked_ptr\
-mln_util_dindex\
-mln_util_site_pair\
-mln_util_set\
-mln_util_greater_point\
-mln_util_greater_psite\
-mln_util_ignore\
-mln_util_pix\
-mln_util_lazy_set\
-mln_util_essential\
-mln_util_branch_iter\
+mln_neighb_essential\
+mln_literal_zero\
+mln_literal_ops\
+mln_literal_origin\
+mln_literal_grays\
+mln_literal_all\
+mln_literal_colors\
+mln_literal_black\
+mln_literal_one\
+mln_literal_white\
+mln_literal_essential\
+mln_registration_get_rtransf\
+mln_registration_internal_rms\
+mln_registration_get_rot\
+mln_registration_all\
+mln_registration_multiscale\
+mln_registration_registration\
+mln_registration_essential\
+mln_registration_icp\
mln_util_graph\
-mln_util_index\
-mln_util_tree_to_fast\
+mln_util_dual_graph\
+mln_util_max\
+mln_util_lazy_set\
+mln_util_set\
+mln_util_tree_to_image\
mln_util_lemmings\
-mln_util_all\
-mln_util_internal_graph_psite_base\
-mln_util_internal_boost_graph_property\
-mln_util_internal_graph_vertex\
-mln_util_internal_graph_edge_psite\
-mln_util_internal_graph_vertex_impl\
+mln_util_greater_point\
+mln_util_internal_graph_edge_impl\
mln_util_internal_graph_iter_base\
-mln_util_internal_boost_graph\
-mln_util_internal_graph_edge\
-mln_util_internal_boost_graph_structure\
mln_util_internal_boost_graph_access\
-mln_util_internal_graph_base\
-mln_util_internal_graph_edge_impl\
+mln_util_internal_boost_graph_structure\
+mln_util_internal_graph_iter\
mln_util_internal_graph_nbh_iter\
+mln_util_internal_graph_base\
+mln_util_internal_graph_vertex_impl\
+mln_util_internal_boost_graph\
mln_util_internal_graph_nbh_iter_base\
-mln_util_internal_graph_iter\
-mln_util_internal_graph_vertex_psite\
+mln_util_internal_boost_graph_property\
+mln_util_ord_pair\
+mln_util_edge\
+mln_util_all\
+mln_util_dindex\
+mln_util_tracked_ptr\
+mln_util_ignore\
+mln_util_greater_psite\
+mln_util_timer\
mln_util_yes\
+mln_util_ord\
+mln_util_tree_fast_to_image\
+mln_util_tree\
+mln_util_index\
mln_util_multi_site\
-mln_util_timer\
-mln_util_tree_fast\
+mln_util_branch_iter\
mln_util_branch_iter_ind\
-mln_util_tree_to_image\
+mln_util_tree_to_fast\
mln_util_array\
-mln_fun_c\
-mln_fun_cast\
+mln_util_vertex\
+mln_util_pix\
+mln_util_tree_fast\
+mln_util_site_pair\
+mln_util_nil\
+mln_util_eat\
+mln_util_essential\
+mln_tag_init\
+mln_tag_skeleton\
+mln_tag_all\
+mln_tag_essential\
+mln_trace_entering\
+mln_trace_all\
+mln_trace_warning\
+mln_trace_exiting\
+mln_trace_resume\
+mln_trace_quiet\
+mln_trace_stop\
+mln_trace_essential\
+mln_make_graph\
+mln_make_double_neighb2d\
+mln_make_dpoint2d_h\
+mln_make_w_window\
+mln_make_image\
+mln_make_vec\
+mln_make_all\
+mln_make_dual_neighb\
+mln_make_w_window3d\
+mln_make_mat\
+mln_make_win_chamfer\
+mln_make_w_window2d_int\
+mln_make_box1d\
+mln_make_voronoi\
+mln_make_box2d\
+mln_make_w_window2d\
+mln_make_box3d\
+mln_make_relabelfun\
+mln_make_pixel\
+mln_make_pix\
+mln_make_box2d_h\
+mln_make_w_window1d\
+mln_make_image2d\
+mln_make_w_window_directional\
+mln_make_w_window3d_int\
+mln_make_essential\
+mln_make_w_window1d_int\
+mln_make_point2d_h\
+mln_display_remove\
+mln_display_all\
+mln_display_color_pretty\
+mln_display_save\
+mln_display_save_and_show\
+mln_display_show\
+mln_display_essential\
+mln_extension_adjust\
+mln_extension_duplicate\
+mln_extension_adjust_duplicate\
+mln_extension_all\
+mln_extension_adjust_fill\
+mln_extension_fill\
+mln_extension_essential\
+mln_fun_p2b_chess\
+mln_fun_p2b_all\
+mln_fun_p2b_has\
+mln_fun_p2b_essential\
mln_fun_x2p_closest_point\
-mln_fun_x2p_essential\
mln_fun_x2p_all\
-mln_fun_p2v_elifs\
-mln_fun_p2v_iota\
-mln_fun_p2v_essential\
-mln_fun_p2v_all\
-mln_fun_p2v_ternary\
+mln_fun_x2p_essential\
+mln_fun_ops\
+mln_fun_c\
mln_fun_vv2v_max\
-mln_fun_vv2v_essential\
+mln_fun_vv2v_lor\
+mln_fun_vv2v_land_not\
+mln_fun_vv2v_vec\
mln_fun_vv2v_all\
+mln_fun_vv2v_macros\
+mln_fun_vv2v_lxor\
+mln_fun_vv2v_diff_abs\
+mln_fun_vv2v_land\
mln_fun_vv2v_min\
-mln_fun_x2x_composed\
-mln_fun_x2x_essential\
-mln_fun_x2x_rotation\
-mln_fun_x2x_all\
-mln_fun_x2x_translation\
-mln_fun_essential\
-mln_fun_v2v_rgb_to_hsi\
-mln_fun_v2v_enc\
-mln_fun_v2v_cast\
-mln_fun_v2v_saturate\
+mln_fun_vv2v_essential\
+mln_fun_internal_array_base\
+mln_fun_internal_x2x_linear_impl\
+mln_fun_internal_selector\
+mln_fun_p2v_ternary\
+mln_fun_p2v_iota\
+mln_fun_p2v_elifs\
+mln_fun_p2v_all\
+mln_fun_p2v_essential\
+mln_fun_all\
+mln_fun_v2b_lnot\
+mln_fun_v2b_all\
+mln_fun_v2b_threshold\
+mln_fun_v2b_essential\
mln_fun_v2v_norm\
-mln_fun_v2v_convert\
-mln_fun_v2v_id\
-mln_fun_v2v_essential\
mln_fun_v2v_linear\
+mln_fun_v2v_id\
+mln_fun_v2v_saturate\
+mln_fun_v2v_inc\
mln_fun_v2v_all\
-mln_fun_v2v_abs\
mln_fun_v2v_dec\
-mln_fun_v2v_inc\
-mln_fun_i2v_essential\
+mln_fun_v2v_abs\
+mln_fun_v2v_cast\
+mln_fun_v2v_rgb_to_hsi\
+mln_fun_v2v_enc\
+mln_fun_v2v_convert\
+mln_fun_v2v_essential\
+mln_fun_cast\
mln_fun_i2v_all\
-mln_fun_i2v_all_to\
mln_fun_i2v_array\
-mln_fun_ops\
-mln_fun_all\
-mln_fun_v2b_essential\
-mln_fun_v2b_all\
-mln_fun_v2b_threshold\
-mln_fun_internal_selector\
-mln_fun_internal_x2x_linear_impl\
-mln_fun_x2v_essential\
+mln_fun_i2v_all_to\
+mln_fun_i2v_essential\
+mln_fun_l2l_relabel\
+mln_fun_x2x_composed\
+mln_fun_x2x_all\
+mln_fun_x2x_translation\
+mln_fun_x2x_rotation\
+mln_fun_x2x_essential\
mln_fun_x2v_linear\
-mln_fun_x2v_all\
mln_fun_x2v_bilinear\
+mln_fun_x2v_all\
+mln_fun_x2v_l1_norm\
mln_fun_x2v_nneighbor\
-mln_fun_p2b_essential\
-mln_fun_p2b_has\
-mln_fun_p2b_all\
-mln_fun_p2b_chess\
-mln_extension_essential\
-mln_extension_fill\
-mln_extension_adjust_duplicate\
-mln_extension_adjust_fill\
-mln_extension_all\
-mln_histo_data\
-mln_histo_compute_spe\
-mln_histo_essential\
-mln_histo_compute\
-mln_histo_all\
-mln_transform_essential\
-mln_transform_distance\
-mln_transform_all\
-mln_trait_windows\
-mln_trait_images\
-mln_trait_solve\
-mln_trait_window_print\
-mln_trait_window_props\
-mln_trait_image_from_grid\
-mln_trait_site_sets\
+mln_fun_x2v_essential\
+mln_fun_essential\
+mln_convert_to_p_set\
+mln_convert_to\
+mln_convert_to_upper_window\
+mln_convert_to_image\
+mln_convert_to_fun\
+mln_convert_all\
+mln_convert_to_tiles\
+mln_convert_to_window\
+mln_convert_from_to\
+mln_convert_to_std_set\
+mln_convert_impl_from_value_to_value\
+mln_convert_impl_all\
+mln_convert_impl_from_image_to_site_set\
+mln_convert_to_dpoint\
+mln_convert_to_p_array\
+mln_convert_to_rgb\
+mln_convert_essential\
+mln_value_float01_f\
+mln_value_float01_16\
+mln_value_lut_vec\
+mln_value_glf\
+mln_value_other\
+mln_value_graylevel_f\
+mln_value_aliases\
+mln_value_label_16\
+mln_value_ops\
+mln_value_set\
+mln_value_int_u_sat\
+mln_value_float01_8\
+mln_value_int_u8\
+mln_value_equiv\
+mln_value_internal_integer\
+mln_value_internal_gray_f\
+mln_value_internal_all\
+mln_value_internal_value_like\
+mln_value_internal_iterable_set\
+mln_value_internal_encoding\
+mln_value_internal_convert\
+mln_value_internal_gray_\
+mln_value_internal_essential\
+mln_value_proxy\
+mln_value_viter\
+mln_value_graylevel\
+mln_value_all\
+mln_value_super_value\
+mln_value_builtin_symbolics\
+mln_value_builtin_ops\
+mln_value_builtin_all\
+mln_value_builtin_promotions\
+mln_value_builtin_integers\
+mln_value_builtin_floatings\
+mln_value_builtin_essential\
+mln_value_sign\
+mln_value_hsi\
+mln_value_interval\
+mln_value_gl16\
+mln_value_scalar\
+mln_value_float01\
+mln_value_cast\
+mln_value_int_u\
+mln_value_int_s8\
+mln_value_int_s16\
+mln_value_int_u16\
+mln_value_label\
+mln_value_rgb\
+mln_value_stack\
+mln_value_concept_integer\
+mln_value_concept_structured\
+mln_value_concept_built_in\
+mln_value_concept_all\
+mln_value_concept_scalar\
+mln_value_concept_data\
+mln_value_concept_floating\
+mln_value_concept_symbolic\
+mln_value_concept_vectorial\
+mln_value_concept_essential\
+mln_value_int_s\
+mln_value_rgb8\
+mln_value_int_s32\
+mln_value_float01_\
+mln_value_rgb16\
+mln_value_int_u32\
+mln_value_gl8\
+mln_value_label_8\
+mln_value_essential\
+mln_accu_tuple\
+mln_accu_min_h\
+mln_accu_max\
+mln_accu_rank\
+mln_accu_transform_stop\
+mln_accu_maj_h\
+mln_accu_min_max\
+mln_accu_internal_base\
+mln_accu_transform_snake\
+mln_accu_rank_high_quant\
+mln_accu_count\
+mln_accu_median_h\
+mln_accu_all\
+mln_accu_land_basic\
+mln_accu_p\
+mln_accu_transform\
+mln_accu_median_alt\
+mln_accu_volume\
+mln_accu_sum\
+mln_accu_height\
+mln_accu_land\
+mln_accu_take\
+mln_accu_histo\
+mln_accu_pair\
+mln_accu_count_adjacent_vertices\
+mln_accu_convolve\
+mln_accu_v\
+mln_accu_rank_bool\
+mln_accu_min\
+mln_accu_transform_directional\
+mln_accu_compute\
+mln_accu_mean\
+mln_accu_transform_diagonal\
+mln_accu_nil\
+mln_accu_bbox\
+mln_accu_center\
+mln_accu_line\
+mln_accu_essential\
+mln_accu_max_h\
+mln_level_compare\
+mln_level_memset_\
+mln_level_transform_inplace\
+mln_level_replace\
+mln_level_memcpy_\
+mln_level_apply\
+mln_level_approx_all\
+mln_level_approx_essential\
+mln_level_approx_median\
+mln_level_saturate\
+mln_level_all\
+mln_level_paste\
+mln_level_fast_median\
+mln_level_abs\
+mln_level_fill_with_image\
+mln_level_transform\
+mln_level_fill_with_value\
+mln_level_stretch\
+mln_level_domain\
+mln_level_was_median\
+mln_level_compute\
+mln_level_convert\
+mln_level_to_enc\
+mln_level_naive_all\
+mln_level_naive_essential\
+mln_level_naive_median\
+mln_level_sort_psites\
+mln_level_update\
+mln_level_fill\
+mln_level_essential\
+mln_level_assign\
+mln_level_median\
+mln_math_jacobi\
+mln_math_max\
+mln_math_sqr\
+mln_math_all\
+mln_math_sign\
+mln_math_abs\
+mln_math_diff_abs\
+mln_math_round\
+mln_math_min\
+mln_math_sqrt\
+mln_math_essential\
+mln_math_round_sat\
+mln_binarization_includes\
+mln_binarization_all\
+mln_binarization_binarization\
+mln_binarization_threshold\
+mln_binarization_essential\
+mln_trait_site_set_props\
+mln_trait_site_set_print\
+mln_trait_promote\
mln_trait_solve_binary\
mln_trait_value_\
-mln_trait_promote\
-mln_trait_essential\
-mln_trait_concrete\
-mln_trait_op_ord\
-mln_trait_op_div\
+mln_trait_all\
+mln_trait_value_all\
+mln_trait_value_nature\
+mln_trait_value_quant\
+mln_trait_value_kind\
+mln_trait_value_print\
+mln_trait_value_essential\
+mln_trait_images\
+mln_trait_window_props\
+mln_trait_window_print\
+mln_trait_ch_value\
+mln_trait_solve\
+mln_trait_solve_unary\
+mln_trait_op_postdec\
mln_trait_op_mod\
+mln_trait_op_lor\
+mln_trait_op_neq\
+mln_trait_op_plus\
+mln_trait_op_xor\
+mln_trait_op_all\
+mln_trait_op_geq\
+mln_trait_op_uminus\
mln_trait_op_not\
-mln_trait_op_or\
+mln_trait_op_times\
+mln_trait_op_less\
+mln_trait_op_decl\
+mln_trait_op_ord\
mln_trait_op_and\
-mln_trait_op_xor\
-mln_trait_op_essential\
+mln_trait_op_or\
+mln_trait_op_predec\
+mln_trait_op_minus\
+mln_trait_op_div\
+mln_trait_op_leq\
mln_trait_op_preinc\
mln_trait_op_greater\
-mln_trait_op_predec\
-mln_trait_op_neq\
mln_trait_op_postinc\
mln_trait_op_uplus\
-mln_trait_op_geq\
-mln_trait_op_uminus\
-mln_trait_op_all\
-mln_trait_op_plus\
+mln_trait_op_essential\
mln_trait_op_eq\
-mln_trait_op_leq\
-mln_trait_op_less\
-mln_trait_op_postdec\
-mln_trait_op_minus\
-mln_trait_op_times\
-mln_trait_op_decl\
-mln_trait_op_lor\
-mln_trait_all\
+mln_trait_concrete\
+mln_trait_windows\
+mln_trait_site_sets\
+mln_trait_image_from_grid\
mln_trait_undef\
-mln_trait_image_print\
mln_trait_image_props\
-mln_trait_solve_unary\
-mln_trait_site_set_print\
-mln_trait_site_set_props\
+mln_trait_image_print\
mln_trait_neighborhood\
-mln_trait_ch_value\
-mln_trait_value_print\
-mln_trait_value_nature\
-mln_trait_value_kind\
-mln_trait_value_quant\
-mln_trait_value_essential\
-mln_trait_value_all\
-mln_win_disk2d\
-mln_win_cuboid3d\
-mln_win_segment1d\
-mln_win_octagon2d\
+mln_trait_essential\
+mln_canvas_labeling\
+mln_canvas_browsing_hyper_directional\
+mln_canvas_browsing_snake_generic\
+mln_canvas_browsing_backdiagonal2d\
+mln_canvas_browsing_snake_vert\
+mln_canvas_browsing_snake_fwd\
+mln_canvas_browsing_all\
+mln_canvas_browsing_diagonal2d\
+mln_canvas_browsing_fwd\
+mln_canvas_browsing_dir_struct_elt_incr_update\
+mln_canvas_browsing_directional\
+mln_canvas_browsing_essential\
+mln_canvas_chamfer\
+mln_canvas_distance_geodesic\
+mln_canvas_all\
+mln_canvas_morpho_all\
+mln_canvas_morpho_algebraic_union_find\
+mln_canvas_morpho_essential\
+mln_canvas_essential\
+mln_metal_is_const\
+mln_metal_none\
+mln_metal_equal\
+mln_metal_unptr\
+mln_metal_not_equal\
+mln_metal_is_ref\
+mln_metal_ret\
+mln_metal_unqualif\
+mln_metal_is_not\
+mln_metal_vec\
+mln_metal_is\
+mln_metal_bool\
+mln_metal_all\
+mln_metal_math_pow\
+mln_metal_math_max\
+mln_metal_math_all\
+mln_metal_math_root\
+mln_metal_math_sqrt\
+mln_metal_mat\
+mln_metal_is_not_const\
+mln_metal_fix_return\
+mln_metal_ands\
+mln_metal_const\
+mln_metal_is_unqualif\
+mln_metal_unconst\
+mln_metal_bexpr\
+mln_metal_array2d\
+mln_metal_is_not_a\
+mln_metal_is_a\
+mln_metal_array1d\
+mln_metal_if\
+mln_metal_unref\
+mln_metal_array\
+mln_metal_ref\
+mln_metal_same_point\
+mln_metal_int\
+mln_metal_abort\
+mln_metal_same_coord\
+mln_metal_templated_by\
+mln_metal_has_neighborhood\
+mln_metal_goes_to\
+mln_metal_is_not_ref\
+mln_metal_converts_to\
+mln_metal_essential\
+mln_metal_array3d\
+mln_algebra_vec\
+mln_algebra_all\
+mln_algebra_h_vec\
+mln_algebra_mat\
+mln_algebra_h_mat\
+mln_algebra_quat\
+mln_algebra_essential\
+mln_linear_convolve_2x1d\
+mln_linear_all\
+mln_linear_ch_convolve\
+mln_linear_gaussian\
+mln_linear_convolve\
+mln_linear_sobel_2d\
+mln_linear_local_convolve\
+mln_linear_lap\
+mln_linear_convolve_directional\
+mln_linear_log\
+mln_linear_essential\
+mln_morpho_thinning\
+mln_morpho_meyer_wst\
+mln_morpho_opening\
+mln_morpho_includes\
+mln_morpho_elementary_opening\
+mln_morpho_elementary_gradient_internal\
+mln_morpho_elementary_dilation\
+mln_morpho_elementary_laplacian\
+mln_morpho_elementary_all\
+mln_morpho_elementary_gradient_external\
+mln_morpho_elementary_like_ero_fun\
+mln_morpho_elementary_gradient\
+mln_morpho_elementary_like_ero_set\
+mln_morpho_elementary_closing\
+mln_morpho_elementary_top_hat\
+mln_morpho_elementary_erosion\
+mln_morpho_elementary_essential\
+mln_morpho_thin_fit\
+mln_morpho_skeleton_constrained\
+mln_morpho_complementation\
+mln_morpho_line_gradient\
+mln_morpho_hit_or_miss\
+mln_morpho_closing_height\
+mln_morpho_plus\
+mln_morpho_erosion_fast\
+mln_morpho_internal_elementary\
+mln_morpho_contrast\
+mln_morpho_opening_area\
+mln_morpho_opening_height\
+mln_morpho_thickening\
+mln_morpho_dilation\
+mln_morpho_laplacian\
+mln_morpho_all\
+mln_morpho_opening_attribute\
+mln_morpho_opening_volume\
+mln_morpho_dilation_fast\
+mln_morpho_closing_area_on_vertices\
+mln_morpho_closing_volume\
+mln_morpho_minus\
+mln_morpho_gradient\
+mln_morpho_opening_area_on_vertices\
+mln_morpho_min\
+mln_morpho_closing\
+mln_morpho_top_hat\
+mln_morpho_erosion\
+mln_morpho_Rd\
+mln_morpho_closing_area\
+mln_morpho_thick_miss\
+mln_morpho_closing_attribute\
+mln_morpho_rank_filter\
+mln_morpho_essential\
+mln_topo_n_face_iter\
+mln_topo_face_iter\
+mln_topo_is_simple_2d\
+mln_topo_centered_iter_adapter\
+mln_topo_internal_complex_set_iterator_base\
+mln_topo_internal_complex_iterator_base\
+mln_topo_internal_complex_relative_iterator_base\
+mln_topo_internal_complex_relative_iterator_sequence\
+mln_topo_algebraic_n_face\
+mln_topo_attic_faces_iter\
+mln_topo_adj_lower_dim_connected_n_face_iter\
+mln_topo_n_face\
+mln_topo_adj_lower_higher_face_iter\
+mln_topo_all\
+mln_topo_face_data\
+mln_topo_static_n_face_iter\
+mln_topo_face\
+mln_topo_adj_m_face_iter\
+mln_topo_complex\
+mln_topo_adj_higher_face_iter\
+mln_topo_adj_lower_face_iter\
+mln_topo_complex_iterators\
+mln_topo_center_only_iter\
+mln_topo_adj_higher_dim_connected_n_face_iter\
+mln_topo_algebraic_face\
+mln_topo_n_faces_set\
+mln_topo_essential\
+mln_essential_1d\
+mln_essential_routine\
+mln_essential_3d\
+mln_essential_2d\
+mln_win_inter\
mln_win_backdiag2d\
-mln_win_diag2d\
+mln_win_segment1d\
+mln_win_cuboid3d\
mln_win_vline2d\
-mln_win_essential\
+mln_win_octagon2d\
+mln_win_all\
+mln_win_multiple_size\
+mln_win_cube3d\
mln_win_shift\
mln_win_sym\
-mln_win_hline2d\
-mln_win_inter\
-mln_win_all\
mln_win_diff\
-mln_win_rectangle2d\
mln_win_multiple\
+mln_win_diag2d\
+mln_win_disk2d\
+mln_win_rectangle2d\
+mln_win_hline2d\
mln_win_line\
-mln_win_multiple_size\
-mln_win_cube3d\
-mln_core_category\
-mln_core_pixter1d\
-mln_core_routine_init\
-mln_core_routine_essential\
-mln_core_routine_primary\
-mln_core_routine_clone\
-mln_core_routine_ops\
-mln_core_routine_all\
-mln_core_routine_initialize\
-mln_core_routine_extend\
-mln_core_routine_exact\
-mln_core_trait_qlf_value\
-mln_core_trait_op_mult\
-mln_core_trait_essential\
-mln_core_trait_pixter\
-mln_core_trait_all\
-mln_core_a_point_of\
-mln_core_def_coordf\
-mln_core_def_essential\
+mln_win_essential\
+mln_core_clock_neighb\
+mln_core_pixter2d\
mln_core_def_all\
+mln_core_def_coordf\
mln_core_def_coord\
-mln_core_dpoints_pixter\
+mln_core_def_essential\
+mln_core_site_set_box\
+mln_core_site_set_p_vertices\
+mln_core_site_set_p_vaccess\
+mln_core_site_set_p_if_piter\
+mln_core_site_set_p_run_piter\
+mln_core_site_set_p_key\
+mln_core_site_set_p_double\
+mln_core_site_set_p_complex_piter\
+mln_core_site_set_p_complex\
+mln_core_site_set_p_image\
+mln_core_site_set_attic_p_complex_faces_piter\
+mln_core_site_set_attic_p_faces_piter\
+mln_core_site_set_p_priority\
+mln_core_site_set_p_set_of\
+mln_core_site_set_all\
+mln_core_site_set_p_edges\
+mln_core_site_set_box_piter\
+mln_core_site_set_p_faces\
+mln_core_site_set_p_set\
+mln_core_site_set_p_queue\
+mln_core_site_set_p_if\
+mln_core_site_set_p_mutable_array_of\
+mln_core_site_set_p_edges_psite\
+mln_core_site_set_complex_psite\
+mln_core_site_set_p_run\
+mln_core_site_set_p_n_faces_piter\
+mln_core_site_set_p_centered\
+mln_core_site_set_p_bgraph\
+mln_core_site_set_p_bgraph_piter\
+mln_core_site_set_p_array\
+mln_core_site_set_p_vertices_psite\
+mln_core_site_set_p_line2d\
+mln_core_site_set_p_queue_fast\
+mln_core_site_set_p_graph_piter\
+mln_core_site_set_essential\
mln_core_dpsites_piter\
-mln_core_tags\
-mln_core_window\
-mln_core_pixter2d\
-mln_core_essential\
mln_core_w_window\
-mln_core_alias_point2d\
-mln_core_alias_box2d_h\
-mln_core_alias_box2d\
-mln_core_alias_point2d_h\
-mln_core_alias_neighb3d\
-mln_core_alias_window1d\
-mln_core_alias_point3df\
-mln_core_alias_w_window2d_int\
-mln_core_alias_point1d\
-mln_core_alias_w_window3d_float\
-mln_core_alias_w_window1d_int\
-mln_core_alias_dpoint2d_h\
-mln_core_alias_dpoint1d\
-mln_core_alias_p_run2d\
-mln_core_alias_w_window1d_float\
-mln_core_alias_w_window3d_int\
-mln_core_alias_box3d\
-mln_core_alias_neighb1d\
-mln_core_alias_neighb2d\
-mln_core_alias_w_window2d_float\
-mln_core_alias_window2d\
-mln_core_alias_bin_2complex_image3df\
-mln_core_alias_window3d\
-mln_core_alias_point3d\
-mln_core_alias_dpoint3d\
-mln_core_alias_dpoint2d\
-mln_core_alias_box1d\
-mln_core_alias_p_runs2d\
-mln_core_point\
-mln_core_clock_neighb\
-mln_core_neighb\
-mln_core_dpoint\
-mln_core_var\
-mln_core_faces_psite\
-mln_core_contract\
-mln_core_macros\
-mln_core_all\
-mln_core_internal_image_primary\
-mln_core_internal_window_base\
-mln_core_internal_data\
-mln_core_internal_site_set_impl\
-mln_core_internal_piter_adaptor\
-mln_core_internal_image_morpher\
+mln_core_grids\
+mln_core_dpoints_pixter\
+mln_core_internal_graph_psite_base\
+mln_core_internal_run_image\
+mln_core_internal_pixel_impl\
+mln_core_internal_site_set_base\
mln_core_internal_image_value_morpher\
-mln_core_internal_complex_window_p_base\
+mln_core_internal_site_iterator_base\
+mln_core_internal_complex_neighborhood_base\
+mln_core_internal_site_relative_iterator_base\
+mln_core_internal_site_set_impl\
+mln_core_internal_exact\
mln_core_internal_p_complex_piter_base\
-mln_core_internal_site_set_base\
-mln_core_internal_site_set_iterator_base\
-mln_core_internal_set_of\
-mln_core_internal_check_image_fastest\
-mln_core_internal_check_image_all\
-mln_core_internal_image_if_base\
+mln_core_internal_pixel_iterator_base\
mln_core_internal_classical_window_base\
-mln_core_internal_graph_relative_piter\
+mln_core_internal_image_if_base\
+mln_core_internal_data\
mln_core_internal_force_exact\
-mln_core_internal_pixel_iterator_base\
+mln_core_internal_image_base\
+mln_core_internal_check_image_fastest\
+mln_core_internal_check_image_all\
mln_core_internal_line_graph_vicinity_piter\
-mln_core_internal_coord_impl\
-mln_core_internal_pixel_impl\
-mln_core_internal_site_iterator_base\
-mln_core_internal_run_image\
mln_core_internal_fixme\
-mln_core_internal_pseudo_site_base\
mln_core_internal_morpher_lvalue\
mln_core_internal_image_domain_morpher\
-mln_core_internal_complex_neighborhood_base\
-mln_core_internal_image_identity\
-mln_core_internal_geom_bbox\
+mln_core_internal_image_primary\
+mln_core_internal_set_of\
+mln_core_internal_complex_window_p_base\
+mln_core_internal_graph_relative_piter\
+mln_core_internal_graph_window_base\
+mln_core_internal_piter_adaptor\
mln_core_internal_weighted_window_base\
mln_core_internal_neighborhood_base\
-mln_core_internal_site_relative_iterator_base\
-mln_core_internal_exact\
+mln_core_internal_image_morpher\
+mln_core_internal_coord_impl\
+mln_core_internal_geom_bbox\
+mln_core_internal_image_identity\
+mln_core_internal_pseudo_site_base\
+mln_core_internal_window_base\
mln_core_internal_box_impl\
-mln_core_internal_image_base\
-mln_core_clock_neighb2d\
-mln_core_image_obased_rle_encode\
-mln_core_image_plain\
-mln_core_image_decorated_image\
-mln_core_image_graph_image\
-mln_core_image_complex_neighborhood_piter\
-mln_core_image_graph_window_piter\
-mln_core_image_hexa_piter\
-mln_core_image_rle_encode\
-mln_core_image_translate_image\
-mln_core_image_extension_val\
-mln_core_image_line_graph_neighborhood_piter\
-mln_core_image_tr_image\
-mln_core_image_fi_adaptor\
-mln_core_image_graph_elt_neighborhood\
-mln_core_image_extension_ima\
-mln_core_image_sparse_encode\
-mln_core_image_lazy_image\
-mln_core_image_hexa\
-mln_core_image_flat_image\
-mln_core_image_graph_neighborhood_piter\
-mln_core_image_essential\
-mln_core_image_value_enc_image\
-mln_core_image_image_if\
-mln_core_image_complex_image\
-mln_core_image_image2d_h\
-mln_core_image_rle_image\
-mln_core_image_complex_window_piter\
-mln_core_image_mono_rle_image\
-mln_core_image_graph_elt_window\
-mln_core_image_interpolated\
-mln_core_image_image1d\
-mln_core_image_value_encode\
-mln_core_image_mono_obased_rle_image\
-mln_core_image_t_image\
-mln_core_image_image2d\
-mln_core_image_cast_image\
-mln_core_image_obased_rle_image\
-mln_core_image_line_graph_window_piter\
-mln_core_image_all\
-mln_core_image_complex_windows\
-mln_core_image_safe\
-mln_core_image_extended\
-mln_core_image_sparse_image\
-mln_core_image_bgraph_image\
-mln_core_image_image3d\
-mln_core_image_bgraph_psite\
-mln_core_image_sub_image_if\
-mln_core_image_line_graph_elt_window\
-mln_core_image_line_graph_psite\
-mln_core_image_tr_mesh\
-mln_core_image_sub_image\
-mln_core_image_line_graph_elt_neighborhood\
-mln_core_image_ch_piter\
-mln_core_image_extension_fun\
-mln_core_image_mono_obased_rle_encode\
-mln_core_image_line_graph_image\
-mln_core_image_mono_rle_encode\
-mln_core_image_complex_neighborhoods\
-mln_core_pixter3d\
-mln_core_concept_site\
-mln_core_concept_value\
-mln_core_concept_gdpoint\
-mln_core_concept_pseudo_site\
-mln_core_concept_delta_point_site\
-mln_core_concept_site_set\
-mln_core_concept_value_set\
-mln_core_concept_gpoint\
+mln_core_internal_graph_neighborhood_base\
+mln_core_internal_site_set_iterator_base\
+mln_core_contract\
+mln_core_all\
+mln_core_point\
+mln_core_neighb\
+mln_core_routine_initialize\
+mln_core_routine_primary\
+mln_core_routine_init\
+mln_core_routine_ops\
+mln_core_routine_all\
+mln_core_routine_clone\
+mln_core_routine_exact\
+mln_core_routine_extend\
+mln_core_routine_essential\
+mln_core_trait_op_mult\
+mln_core_trait_all\
+mln_core_trait_pixter\
+mln_core_trait_qlf_value\
+mln_core_trait_essential\
+mln_core_pixter1d\
+mln_core_category\
+mln_core_macros\
+mln_core_box_runstart_piter\
+mln_core_tags\
+mln_core_dpoint\
+mln_core_alias_dpoint2d_h\
+mln_core_alias_p_run2d\
+mln_core_alias_point3d\
+mln_core_alias_neighb3d\
+mln_core_alias_window3d\
+mln_core_alias_neighb2d\
+mln_core_alias_complex_image\
+mln_core_alias_w_window1d_float\
+mln_core_alias_neighb1d\
+mln_core_alias_w_window2d_float\
+mln_core_alias_w_window2d_int\
+mln_core_alias_box1d\
+mln_core_alias_box2d\
+mln_core_alias_window1d\
+mln_core_alias_point1d\
+mln_core_alias_box3d\
+mln_core_alias_dpoint3d\
+mln_core_alias_complex_geometry\
+mln_core_alias_w_window3d_float\
+mln_core_alias_box2d_h\
+mln_core_alias_point2d\
+mln_core_alias_window2d\
+mln_core_alias_p_runs2d\
+mln_core_alias_point3df\
+mln_core_alias_dpoint1d\
+mln_core_alias_w_window3d_int\
+mln_core_alias_dpoint2d\
+mln_core_alias_w_window1d_int\
+mln_core_alias_point2d_h\
+mln_core_window\
mln_core_concept_site_proxy\
-mln_core_concept_window\
-mln_core_concept_mesh\
+mln_core_concept_point_site\
mln_core_concept_box\
+mln_core_concept_generalized_pixel\
mln_core_concept_graph\
-mln_core_concept_point\
-mln_core_concept_value_iterator\
-mln_core_concept_doc_site_set\
+mln_core_concept_iterator\
+mln_core_concept_doc_point_site\
+mln_core_concept_doc_box\
+mln_core_concept_doc_generalized_pixel\
+mln_core_concept_doc_iterator\
mln_core_concept_doc_image_fastest\
+mln_core_concept_doc_image\
mln_core_concept_doc_value_set\
-mln_core_concept_doc_window\
-mln_core_concept_doc_box\
-mln_core_concept_doc_value_iterator\
mln_core_concept_doc_weighted_window\
-mln_core_concept_doc_image\
+mln_core_concept_doc_pixel_iterator\
+mln_core_concept_doc_value_iterator\
mln_core_concept_doc_dpoint\
-mln_core_concept_doc_iterator\
+mln_core_concept_doc_window\
mln_core_concept_doc_accumulator\
+mln_core_concept_doc_site_set\
+mln_core_concept_doc_object\
mln_core_concept_doc_neighborhood\
-mln_core_concept_doc_pixel_iterator\
mln_core_concept_doc_point_iterator\
-mln_core_concept_doc_object\
-mln_core_concept_doc_generalized_pixel\
-mln_core_concept_doc_point_site\
-mln_core_concept_weighted_window\
+mln_core_concept_pseudo_site\
mln_core_concept_image\
-mln_core_concept_function\
-mln_core_concept_browsing\
-mln_core_concept_dpoint\
-mln_core_concept_iterator\
-mln_core_concept_meta_accumulator\
-mln_core_concept_accumulator\
+mln_core_concept_value_set\
mln_core_concept_proxy\
-mln_core_concept_neighborhood\
-mln_core_concept_pixel_iterator\
-mln_core_concept_literal\
+mln_core_concept_site\
+mln_core_concept_weighted_window\
+mln_core_concept_gpoint\
mln_core_concept_site_iterator\
+mln_core_concept_point\
+mln_core_concept_literal\
+mln_core_concept_pixel_iterator\
+mln_core_concept_value_iterator\
+mln_core_concept_meta_accumulator\
+mln_core_concept_gdpoint\
mln_core_concept_regular_grid\
+mln_core_concept_mesh\
+mln_core_concept_dpoint\
+mln_core_concept_function\
+mln_core_concept_window\
+mln_core_concept_value\
+mln_core_concept_accumulator\
+mln_core_concept_site_set\
mln_core_concept_object\
-mln_core_concept_generalized_pixel\
-mln_core_concept_point_site\
-mln_core_site_set_p_array\
-mln_core_site_set_p_priority\
-mln_core_site_set_p_bgraph\
-mln_core_site_set_p_queue\
-mln_core_site_set_p_double\
-mln_core_site_set_p_set\
-mln_core_site_set_p_complex\
-mln_core_site_set_p_graph_piter\
-mln_core_site_set_p_n_faces_piter\
-mln_core_site_set_p_set_of\
-mln_core_site_set_p_line_graph\
-mln_core_site_set_p_vaccess\
-mln_core_site_set_box_piter\
-mln_core_site_set_complex_psite\
-mln_core_site_set_p_run\
-mln_core_site_set_essential\
-mln_core_site_set_box\
-mln_core_site_set_p_line2d\
-mln_core_site_set_p_mutable_array_of\
-mln_core_site_set_p_run_piter\
-mln_core_site_set_p_faces\
-mln_core_site_set_p_if_piter\
-mln_core_site_set_all\
-mln_core_site_set_p_edges\
-mln_core_site_set_p_bgraph_piter\
-mln_core_site_set_p_centered\
-mln_core_site_set_p_key\
-mln_core_site_set_p_vertices\
-mln_core_site_set_p_if\
-mln_core_site_set_p_queue_fast\
-mln_core_site_set_p_image\
-mln_core_site_set_p_line_graph_piter\
-mln_core_site_set_p_complex_piter\
-mln_core_site_set_p_graph\
-mln_core_site_set_attic_p_faces_piter\
-mln_core_site_set_attic_p_complex_faces_piter\
+mln_core_concept_delta_point_site\
+mln_core_concept_neighborhood\
+mln_core_concept_browsing\
mln_core_pixel\
-mln_core_box_runstart_piter\
-mln_core_grids\
-mln_io_abort\
-mln_io_pbm_all\
-mln_io_pbm_load\
-mln_io_pbm_save\
-mln_io_essential\
-mln_io_off_all\
-mln_io_off_load\
-mln_io_off_save\
-mln_io_pfm_all\
-mln_io_pfm_load\
-mln_io_pfm_save\
-mln_io_pgm_all\
+mln_core_clock_neighb2d\
+mln_core_pixter3d\
+mln_core_image_obased_rle_encode\
+mln_core_image_plain\
+mln_core_image_translate_image\
+mln_core_image_graph_image\
+mln_core_image_image3d\
+mln_core_image_decorated_image\
+mln_core_image_extension_ima\
+mln_core_image_flat_image\
+mln_core_image_complex_neighborhood_piter\
+mln_core_image_tr_mesh\
+mln_core_image_graph_elt_window\
+mln_core_image_obased_rle_image\
+mln_core_image_mono_obased_rle_image\
+mln_core_image_interpolated\
+mln_core_image_graph_neighborhood_piter\
+mln_core_image_lazy_image\
+mln_core_image_t_image\
+mln_core_image_hexa_piter\
+mln_core_image_value_enc_image\
+mln_core_image_graph_elt_neighborhood\
+mln_core_image_sub_image_if\
+mln_core_image_all\
+mln_core_image_mono_rle_image\
+mln_core_image_complex_image\
+mln_core_image_cast_image\
+mln_core_image_rle_encode\
+mln_core_image_complex_window_piter\
+mln_core_image_tr_image\
+mln_core_image_sub_image\
+mln_core_image_rle_image\
+mln_core_image_line_graph_elt_window\
+mln_core_image_mono_rle_encode\
+mln_core_image_bgraph_psite\
+mln_core_image_sparse_image\
+mln_core_image_bgraph_image\
+mln_core_image_complex_neighborhoods\
+mln_core_image_graph_window_piter\
+mln_core_image_sparse_encode\
+mln_core_image_safe\
+mln_core_image_extension_fun\
+mln_core_image_image1d\
+mln_core_image_extension_val\
+mln_core_image_image_if\
+mln_core_image_hexa\
+mln_core_image_line_graph_elt_neighborhood\
+mln_core_image_extended\
+mln_core_image_image2d_h\
+mln_core_image_line_graph_neighborhood_piter\
+mln_core_image_line_graph_window_piter\
+mln_core_image_image2d\
+mln_core_image_ch_piter\
+mln_core_image_complex_windows\
+mln_core_image_fi_adaptor\
+mln_core_image_mono_obased_rle_encode\
+mln_core_image_line_graph_image\
+mln_core_image_value_encode\
+mln_core_image_essential\
+mln_core_a_point_of\
+mln_core_var\
+mln_core_essential\
+mln_core_faces_psite\
+mln_labeling_blobs\
+mln_labeling_background\
+mln_labeling_relabel\
+mln_labeling_all\
+mln_labeling_level\
+mln_labeling_flat_zones\
+mln_labeling_foreground\
+mln_labeling_regional_maxima\
+mln_labeling_compute\
+mln_labeling_regional_minima\
+mln_labeling_essential\
+mln_test_predicate\
+mln_test_all\
+mln_test_positive\
+mln_test_essential\
+mln_transform_distance_geodesic\
+mln_transform_all\
+mln_transform_influence_zone_geodesic\
+mln_transform_distance\
+mln_transform_essential\
+mln_arith_includes\
+mln_arith_plus\
+mln_arith_all\
+mln_arith_times\
+mln_arith_diff_abs\
+mln_arith_minus\
+mln_arith_min\
+mln_arith_revert\
+mln_arith_essential\
mln_io_pgm_load\
+mln_io_pgm_all\
mln_io_pgm_save\
+mln_io_ppm_load\
+mln_io_ppm_all\
+mln_io_ppm_save\
+mln_io_pfm_load\
+mln_io_pfm_all\
+mln_io_pfm_save\
mln_io_all\
-mln_io_fits_all\
-mln_io_fits_load\
+mln_io_pbm_load\
+mln_io_pbm_all\
+mln_io_pbm_save\
mln_io_pnm_max_component\
-mln_io_pnm_save_header\
-mln_io_pnm_macros\
-mln_io_pnm_all\
mln_io_pnm_load\
mln_io_pnm_load_header\
+mln_io_pnm_all\
+mln_io_pnm_macros\
mln_io_pnm_save\
-mln_io_ppm_all\
-mln_io_ppm_load\
-mln_io_ppm_save\
+mln_io_pnm_save_header\
mln_io_txt_all\
mln_io_txt_save\
-mln_make_vec\
-mln_make_box2d_h\
-mln_make_box2d\
-mln_make_point2d_h\
-mln_make_double_neighb2d\
-mln_make_w_window2d_int\
-mln_make_w_window1d\
-mln_make_pix\
-mln_make_w_window1d_int\
-mln_make_dpoint2d_h\
-mln_make_essential\
-mln_make_w_window\
-mln_make_image\
-mln_make_w_window3d_int\
-mln_make_box3d\
-mln_make_image2d\
-mln_make_all\
-mln_make_dual_neighb\
-mln_make_win_chamfer\
-mln_make_pixel\
-mln_make_w_window2d\
-mln_make_w_window_directional\
-mln_make_box1d\
-mln_make_mat\
-mln_make_voronoi\
-mln_make_w_window3d\
-mln_topo_adj_lower_face_iter\
-mln_topo_adj_lower_dim_connected_n_face_iter\
-mln_topo_face_iter\
-mln_topo_algebraic_n_face\
-mln_topo_complex\
-mln_topo_face_data\
-mln_topo_adj_higher_dim_connected_n_face_iter\
-mln_topo_essential\
-mln_topo_static_n_face_iter\
-mln_topo_n_faces_set\
-mln_topo_adj_higher_face_iter\
-mln_topo_all\
-mln_topo_internal_complex_iterator_base\
-mln_topo_internal_complex_relative_iterator_sequence\
-mln_topo_internal_complex_relative_iterator_base\
-mln_topo_internal_complex_set_iterator_base\
-mln_topo_adj_m_face_iter\
-mln_topo_n_face\
-mln_topo_complex_iterators\
-mln_topo_adj_lower_higher_face_iter\
-mln_topo_face\
-mln_topo_center_only_iter\
-mln_topo_centered_iter_adapter\
-mln_topo_algebraic_face\
-mln_topo_n_face_iter\
-mln_topo_attic_faces_iter\
-mln_subsampling_essential\
-mln_subsampling_subsampling\
-mln_subsampling_all\
-mln_subsampling_gaussian_subsampling\
-mln_canvas_labeling\
-mln_canvas_essential\
-mln_canvas_morpho_algebraic_union_find\
-mln_canvas_morpho_essential\
-mln_canvas_morpho_all\
-mln_canvas_all\
-mln_canvas_chamfer\
-mln_canvas_browsing_directional\
-mln_canvas_browsing_fwd\
-mln_canvas_browsing_essential\
-mln_canvas_browsing_snake_vert\
-mln_canvas_browsing_snake_fwd\
-mln_canvas_browsing_backdiagonal2d\
-mln_canvas_browsing_snake_generic\
-mln_canvas_browsing_all\
-mln_canvas_browsing_hyper_directional\
-mln_canvas_browsing_dir_struct_elt_incr_update\
-mln_canvas_browsing_diagonal2d\
-mln_estim_mean\
-mln_estim_essential\
-mln_estim_all\
-mln_estim_min_max\
-mln_estim_sum\
-mln_arith_times_spe\
-mln_arith_min_spe\
-mln_arith_essential\
-mln_arith_includes\
-mln_arith_revert_spe\
-mln_arith_all\
-mln_arith_plus\
-mln_arith_min\
-mln_arith_minus\
-mln_arith_revert\
-mln_arith_times\
-mln_algebra_vec\
-mln_algebra_h_mat\
-mln_algebra_quat\
-mln_algebra_essential\
-mln_algebra_all\
-mln_algebra_h_vec\
-mln_algebra_mat\
-mln_display_essential\
-mln_display_show\
-mln_display_all\
-mln_display_remove\
-mln_display_color_pretty\
-mln_display_save_and_show\
-mln_display_save\
-mln_test_positive\
-mln_test_essential\
-mln_test_all\
-mln_test_predicate\
-mln_border_mirror\
-mln_border_adjust\
-mln_border_find\
-mln_border_essential\
-mln_border_equalize\
-mln_border_fill\
-mln_border_resize\
-mln_border_all\
-mln_border_duplicate\
-mln_border_thickness\
-mln_border_get\
-mln_trace_exiting\
-mln_trace_entering\
-mln_trace_resume\
-mln_trace_stop\
-mln_trace_essential\
-mln_trace_quiet\
-mln_trace_all\
-mln_trace_warning\
-mln_debug_iota_spe\
-mln_debug_println_with_border\
-mln_debug_println_spe\
+mln_io_abort\
+mln_io_fits_load\
+mln_io_fits_all\
+mln_io_off_load\
+mln_io_off_all\
+mln_io_off_save\
+mln_io_essential\
+mln_logical_includes\
+mln_logical_and_not\
+mln_logical_xor\
+mln_logical_all\
+mln_logical_not\
+mln_logical_and\
+mln_logical_or\
+mln_logical_essential\
+mln_norm_all\
+mln_norm_l1\
+mln_norm_l2\
+mln_norm_linfty\
+mln_norm_essential\
mln_debug_iota\
+mln_debug_all\
+mln_debug_println_with_border\
mln_debug_colorize\
-mln_debug_essential\
-mln_debug_graph\
+mln_debug_draw_graph\
+mln_debug_put_word\
mln_debug_format\
-mln_debug_all\
mln_debug_println\
-mln_debug_put_word\
-mln_debug_println_with_border_spe\
-mln_morpho_thick_miss\
-mln_morpho_opening_volume\
-mln_morpho_gradient\
-mln_morpho_closing_area_on_vertices\
-mln_morpho_meyer_wst\
-mln_morpho_closing_area\
-mln_morpho_Rd\
-mln_morpho_complementation\
-mln_morpho_opening_area_on_vertices\
-mln_morpho_thinning\
-mln_morpho_contrast\
-mln_morpho_erosion_spe\
-mln_morpho_opening_height\
-mln_morpho_erosion\
-mln_morpho_essential\
-mln_morpho_elementary_gradient\
-mln_morpho_elementary_erosion\
-mln_morpho_elementary_essential\
-mln_morpho_elementary_all\
-mln_morpho_elementary_like_ero_fun\
-mln_morpho_elementary_dilation\
-mln_morpho_elementary_opening\
-mln_morpho_elementary_closing\
-mln_morpho_elementary_like_ero_set\
-mln_morpho_elementary_laplacian\
-mln_morpho_elementary_gradient_internal\
-mln_morpho_elementary_gradient_external\
-mln_morpho_elementary_top_hat\
-mln_morpho_includes\
-mln_morpho_thickening\
-mln_morpho_dilation_fast\
-mln_morpho_opening_attribute\
-mln_morpho_closing_height\
-mln_morpho_line_gradient\
-mln_morpho_thin_fit\
-mln_morpho_opening_area\
-mln_morpho_all\
-mln_morpho_hit_or_miss\
-mln_morpho_internal_elementary\
-mln_morpho_plus\
-mln_morpho_erosion_fast\
-mln_morpho_dilation\
-mln_morpho_closing_attribute\
-mln_morpho_opening\
-mln_morpho_min\
-mln_morpho_minus\
-mln_morpho_closing_volume\
-mln_morpho_rank_filter\
-mln_morpho_closing\
-mln_morpho_laplacian\
-mln_morpho_top_hat\
-mln_accu_nil\
-mln_accu_max\
-mln_accu_max_h\
-mln_accu_histo\
-mln_accu_rank_bool\
-mln_accu_mean\
-mln_accu_median_alt\
-mln_accu_convolve\
-mln_accu_essential\
-mln_accu_min_h\
-mln_accu_compute\
-mln_accu_take\
-mln_accu_pair\
-mln_accu_all\
-mln_accu_height\
-mln_accu_internal_base\
-mln_accu_v\
-mln_accu_count\
-mln_accu_volume\
-mln_accu_tuple\
-mln_accu_min\
-mln_accu_median_h\
-mln_accu_line\
-mln_accu_count_adjacent_vertices\
-mln_accu_min_max\
-mln_accu_land\
-mln_accu_bbox\
-mln_accu_sum\
-mln_accu_rank_high_quant\
-mln_accu_p\
-mln_accu_rank\
-mln_accu_maj_h\
-mln_registration_get_rtransf\
-mln_registration_icp\
-mln_registration_essential\
-mln_registration_multiscale\
-mln_registration_all\
-mln_registration_internal_rms\
-mln_registration_get_rot\
-mln_registration_registration\
-mln_pw_value\
-mln_pw_cst\
-mln_pw_essential\
-mln_pw_image\
-mln_pw_var\
-mln_pw_all\
-mln_binarization_essential\
-mln_binarization_includes\
-mln_binarization_all\
-mln_binarization_binarization\
-mln_binarization_threshold\
-mln_linear_log\
-mln_linear_line_x2_convolve\
-mln_linear_ch_convolve\
-mln_linear_local_convolve\
-mln_linear_convolve\
-mln_linear_essential\
-mln_linear_lap\
-mln_linear_sobel\
-mln_linear_convolve_directional\
-mln_linear_all\
-mln_linear_gaussian\
-mln_essential_1d\
-mln_essential_2d\
-mln_essential_routine\
-mln_essential_3d\
-mln_metal_vec\
-mln_metal_is_not_ref\
-mln_metal_unconst\
-mln_metal_array3d\
-mln_metal_abort\
-mln_metal_has_neighborhood\
-mln_metal_ref\
-mln_metal_is_const\
-mln_metal_same_point\
-mln_metal_int\
-mln_metal_is\
-mln_metal_essential\
-mln_metal_unref\
-mln_metal_is_a\
-mln_metal_not_equal\
-mln_metal_none\
-mln_metal_is_unqualif\
-mln_metal_is_not\
-mln_metal_unptr\
-mln_metal_array1d\
-mln_metal_if\
-mln_metal_is_ref\
-mln_metal_is_not_a\
-mln_metal_all\
-mln_metal_same_coord\
-mln_metal_array2d\
-mln_metal_templated_by\
-mln_metal_ret\
-mln_metal_is_not_const\
-mln_metal_math_root\
-mln_metal_math_max\
-mln_metal_math_all\
-mln_metal_math_pow\
-mln_metal_math_sqrt\
-mln_metal_bexpr\
-mln_metal_bool\
-mln_metal_fix_return\
-mln_metal_converts_to\
-mln_metal_goes_to\
-mln_metal_equal\
-mln_metal_unqualif\
-mln_metal_mat\
-mln_metal_array\
-mln_metal_const\
+mln_debug_essential\
+mln_estim_min_max\
+mln_estim_all\
+mln_estim_sum\
+mln_estim_mean\
+mln_estim_essential\
+mln_set_uni\
+mln_set_inter\
+mln_set_all\
+mln_set_get\
mln_set_sym_diff\
-mln_set_essential\
mln_set_has\
mln_set_is_subset_of\
-mln_set_inter\
-mln_set_all\
mln_set_diff\
-mln_set_uni\
-mln_set_get\
-mln_convert_to_p_array\
-mln_convert_to_fun\
-mln_convert_to\
-mln_convert_to_image\
-mln_convert_to_p_set\
-mln_convert_impl_from_image_to_site_set\
-mln_convert_impl_all\
-mln_convert_impl_from_value_to_value\
-mln_convert_essential\
-mln_convert_all\
-mln_convert_to_upper_window\
-mln_convert_to_dpoint\
-mln_convert_to_rgb\
-mln_convert_to_tiles\
-mln_convert_from_to\
-mln_convert_to_window\
-mln_convert_to_std_set\
-mln_geom_nslis\
-mln_geom_size2d\
-mln_geom_max_row\
-mln_geom_size3d\
-mln_geom_seeds2tiling_roundness\
-mln_geom_delta\
-mln_geom_essential\
-mln_geom_max_ind\
-mln_geom_min_col\
-mln_geom_complex_geometry\
-mln_geom_nrows\
-mln_geom_seeds2tiling\
-mln_geom_min_sli\
-mln_geom_nsites\
-mln_geom_min_ind\
-mln_geom_ninds\
-mln_geom_resize\
-mln_geom_min_row\
-mln_geom_all\
-mln_geom_chamfer\
-mln_geom_ncols\
-mln_geom_pmin_pmax\
-mln_geom_size1d\
-mln_geom_max_sli\
-mln_geom_bbox\
-mln_geom_max_col\
-mln_literal_black\
-mln_literal_zero\
-mln_literal_essential\
-mln_literal_grays\
-mln_literal_ops\
-mln_literal_all\
-mln_literal_white\
-mln_literal_one\
-mln_literal_colors\
-mln_literal_origin\
-mln_level_apply_spe\
-mln_level_compare\
-mln_level_saturate\
-mln_level_fill_with_image\
-mln_level_was_median\
-mln_level_fill_with_value_spe\
-mln_level_convert\
-mln_level_sort_psites\
-mln_level_essential\
-mln_level_paste_spe\
-mln_level_fill\
-mln_level_compute\
-mln_level_replace\
-mln_level_approx_essential\
-mln_level_approx_all\
-mln_level_approx_median\
-mln_level_stretch\
-mln_level_paste\
-mln_level_to_enc\
-mln_level_apply\
-mln_level_all\
-mln_level_update\
-mln_level_median\
-mln_level_memset_\
-mln_level_fill_with_image_spe\
-mln_level_assign\
-mln_level_memcpy_\
-mln_level_assign_spe\
-mln_level_fast_median\
-mln_level_transform\
-mln_level_transform_spe\
-mln_level_abs\
-mln_level_naive_essential\
-mln_level_naive_all\
-mln_level_naive_median\
-mln_level_fill_with_value\
-mln_math_jacobi\
-mln_math_max\
-mln_math_round_sat\
-mln_math_round\
-mln_math_essential\
-mln_math_sqr\
-mln_math_all\
-mln_math_sign\
-mln_math_min\
-mln_math_abs\
-mln_math_sqrt\
-mln_norm_l2\
-mln_norm_linfty\
-mln_norm_essential\
-mln_norm_all\
-mln_norm_l1\
-mln_logical_not_spe\
-mln_logical_not\
-mln_logical_or\
-mln_logical_or_spe\
-mln_logical_and\
-mln_logical_essential\
-mln_logical_and_not_spe\
-mln_logical_all\
-mln_logical_and_spe\
-mln_logical_and_not\
-mln_draw_essential\
-mln_draw_box\
-mln_draw_all\
-mln_draw_plot\
-mln_draw_label\
-mln_draw_line\
-mln_value_int_s16\
-mln_value_cast\
-mln_value_builtin_floatings\
-mln_value_builtin_promotions\
-mln_value_builtin_integers\
-mln_value_builtin_essential\
-mln_value_builtin_ops\
-mln_value_builtin_all\
-mln_value_builtin_symbolics\
-mln_value_int_s\
-mln_value_rgb\
-mln_value_viter\
-mln_value_lut_vec\
-mln_value_set\
-mln_value_hsi\
-mln_value_int_u16\
-mln_value_glf\
-mln_value_stack\
-mln_value_gl8\
-mln_value_essential\
-mln_value_graylevel_f\
-mln_value_super_value\
-mln_value_equiv\
-mln_value_rgb16\
-mln_value_float01_16\
-mln_value_rgb8\
-mln_value_int_s32\
-mln_value_int_s8\
-mln_value_int_u8\
-mln_value_int_u32\
-mln_value_float01\
-mln_value_int_u\
-mln_value_ops\
-mln_value_interval\
-mln_value_int_u_sat\
-mln_value_all\
-mln_value_internal_encoding\
-mln_value_internal_convert\
-mln_value_internal_gray_f\
-mln_value_internal_essential\
-mln_value_internal_gray_\
-mln_value_internal_integer\
-mln_value_internal_value_like\
-mln_value_internal_all\
-mln_value_internal_iterable_set\
-mln_value_proxy\
-mln_value_sign\
-mln_value_gl16\
-mln_value_aliases\
-mln_value_float01_f\
-mln_value_float01_8\
-mln_value_concept_structured\
-mln_value_concept_vectorial\
-mln_value_concept_data\
-mln_value_concept_built_in\
-mln_value_concept_essential\
-mln_value_concept_integer\
-mln_value_concept_floating\
-mln_value_concept_all\
-mln_value_concept_scalar\
-mln_value_concept_symbolic\
-mln_value_label\
-mln_value_float01_\
-mln_value_other\
-mln_value_scalar\
-mln_value_graylevel\
-mln_tag_skeleton\
-mln_tag_init\
-mln_tag_essential\
-mln_tag_all\
-mln_labeling_regional_maxima\
-mln_labeling_background\
-mln_labeling_level\
-mln_labeling_flat_zones\
-mln_labeling_level_spe\
-mln_labeling_regional_minima\
-mln_labeling_essential\
-mln_labeling_compute\
-mln_labeling_blobs\
-mln_labeling_all\
-mln_labeling_foreground
+mln_set_compute\
+mln_set_essential\
+mln_border_adjust\
+mln_border_duplicate\
+mln_border_find\
+mln_border_thickness\
+mln_border_all\
+mln_border_mirror\
+mln_border_get\
+mln_border_equalize\
+mln_border_resize\
+mln_border_fill\
+mln_border_essential\
+mln_subsampling_gaussian_subsampling\
+mln_subsampling_all\
+mln_subsampling_subsampling\
+mln_subsampling_essential
-mln_neighb_essential_SOURCES = mln_neighb_essential.cc
+mln_histo_all_SOURCES = mln_histo_all.cc
+mln_histo_data_SOURCES = mln_histo_data.cc
+mln_histo_compute_SOURCES = mln_histo_compute.cc
+mln_histo_essential_SOURCES = mln_histo_essential.cc
+mln_geom_pmin_pmax_SOURCES = mln_geom_pmin_pmax.cc
+mln_geom_max_row_SOURCES = mln_geom_max_row.cc
+mln_geom_chamfer_SOURCES = mln_geom_chamfer.cc
+mln_geom_min_row_SOURCES = mln_geom_min_row.cc
+mln_geom_seeds2tiling_SOURCES = mln_geom_seeds2tiling.cc
+mln_geom_size1d_SOURCES = mln_geom_size1d.cc
+mln_geom_all_SOURCES = mln_geom_all.cc
+mln_geom_size2d_SOURCES = mln_geom_size2d.cc
+mln_geom_max_ind_SOURCES = mln_geom_max_ind.cc
+mln_geom_max_col_SOURCES = mln_geom_max_col.cc
+mln_geom_size3d_SOURCES = mln_geom_size3d.cc
+mln_geom_ninds_SOURCES = mln_geom_ninds.cc
+mln_geom_nslis_SOURCES = mln_geom_nslis.cc
+mln_geom_delta_SOURCES = mln_geom_delta.cc
+mln_geom_resize_SOURCES = mln_geom_resize.cc
+mln_geom_nsites_SOURCES = mln_geom_nsites.cc
+mln_geom_min_col_SOURCES = mln_geom_min_col.cc
+mln_geom_complex_geometry_SOURCES = mln_geom_complex_geometry.cc
+mln_geom_ncols_SOURCES = mln_geom_ncols.cc
+mln_geom_nrows_SOURCES = mln_geom_nrows.cc
+mln_geom_min_ind_SOURCES = mln_geom_min_ind.cc
+mln_geom_bbox_SOURCES = mln_geom_bbox.cc
+mln_geom_seeds2tiling_roundness_SOURCES = mln_geom_seeds2tiling_roundness.cc
+mln_geom_min_sli_SOURCES = mln_geom_min_sli.cc
+mln_geom_essential_SOURCES = mln_geom_essential.cc
+mln_geom_max_sli_SOURCES = mln_geom_max_sli.cc
+mln_draw_box_SOURCES = mln_draw_box.cc
+mln_draw_all_SOURCES = mln_draw_all.cc
+mln_draw_plot_SOURCES = mln_draw_plot.cc
+mln_draw_label_SOURCES = mln_draw_label.cc
+mln_draw_line_SOURCES = mln_draw_line.cc
+mln_draw_essential_SOURCES = mln_draw_essential.cc
+mln_pw_image_SOURCES = mln_pw_image.cc
+mln_pw_all_SOURCES = mln_pw_all.cc
+mln_pw_value_SOURCES = mln_pw_value.cc
+mln_pw_cst_SOURCES = mln_pw_cst.cc
+mln_pw_var_SOURCES = mln_pw_var.cc
+mln_pw_essential_SOURCES = mln_pw_essential.cc
mln_neighb_image_SOURCES = mln_neighb_image.cc
mln_neighb_all_SOURCES = mln_neighb_all.cc
mln_neighb_get_SOURCES = mln_neighb_get.cc
-mln_util_nil_SOURCES = mln_util_nil.cc
-mln_util_ord_pair_SOURCES = mln_util_ord_pair.cc
-mln_util_ord_SOURCES = mln_util_ord.cc
-mln_util_eat_SOURCES = mln_util_eat.cc
-mln_util_tree_SOURCES = mln_util_tree.cc
-mln_util_tree_fast_to_image_SOURCES = mln_util_tree_fast_to_image.cc
-mln_util_tracked_ptr_SOURCES = mln_util_tracked_ptr.cc
-mln_util_dindex_SOURCES = mln_util_dindex.cc
-mln_util_site_pair_SOURCES = mln_util_site_pair.cc
-mln_util_set_SOURCES = mln_util_set.cc
-mln_util_greater_point_SOURCES = mln_util_greater_point.cc
-mln_util_greater_psite_SOURCES = mln_util_greater_psite.cc
-mln_util_ignore_SOURCES = mln_util_ignore.cc
-mln_util_pix_SOURCES = mln_util_pix.cc
-mln_util_lazy_set_SOURCES = mln_util_lazy_set.cc
-mln_util_essential_SOURCES = mln_util_essential.cc
-mln_util_branch_iter_SOURCES = mln_util_branch_iter.cc
+mln_neighb_essential_SOURCES = mln_neighb_essential.cc
+mln_literal_zero_SOURCES = mln_literal_zero.cc
+mln_literal_ops_SOURCES = mln_literal_ops.cc
+mln_literal_origin_SOURCES = mln_literal_origin.cc
+mln_literal_grays_SOURCES = mln_literal_grays.cc
+mln_literal_all_SOURCES = mln_literal_all.cc
+mln_literal_colors_SOURCES = mln_literal_colors.cc
+mln_literal_black_SOURCES = mln_literal_black.cc
+mln_literal_one_SOURCES = mln_literal_one.cc
+mln_literal_white_SOURCES = mln_literal_white.cc
+mln_literal_essential_SOURCES = mln_literal_essential.cc
+mln_registration_get_rtransf_SOURCES = mln_registration_get_rtransf.cc
+mln_registration_internal_rms_SOURCES = mln_registration_internal_rms.cc
+mln_registration_get_rot_SOURCES = mln_registration_get_rot.cc
+mln_registration_all_SOURCES = mln_registration_all.cc
+mln_registration_multiscale_SOURCES = mln_registration_multiscale.cc
+mln_registration_registration_SOURCES = mln_registration_registration.cc
+mln_registration_essential_SOURCES = mln_registration_essential.cc
+mln_registration_icp_SOURCES = mln_registration_icp.cc
mln_util_graph_SOURCES = mln_util_graph.cc
-mln_util_index_SOURCES = mln_util_index.cc
-mln_util_tree_to_fast_SOURCES = mln_util_tree_to_fast.cc
+mln_util_dual_graph_SOURCES = mln_util_dual_graph.cc
+mln_util_max_SOURCES = mln_util_max.cc
+mln_util_lazy_set_SOURCES = mln_util_lazy_set.cc
+mln_util_set_SOURCES = mln_util_set.cc
+mln_util_tree_to_image_SOURCES = mln_util_tree_to_image.cc
mln_util_lemmings_SOURCES = mln_util_lemmings.cc
-mln_util_all_SOURCES = mln_util_all.cc
-mln_util_internal_graph_psite_base_SOURCES = mln_util_internal_graph_psite_base.cc
-mln_util_internal_boost_graph_property_SOURCES = mln_util_internal_boost_graph_property.cc
-mln_util_internal_graph_vertex_SOURCES = mln_util_internal_graph_vertex.cc
-mln_util_internal_graph_edge_psite_SOURCES = mln_util_internal_graph_edge_psite.cc
-mln_util_internal_graph_vertex_impl_SOURCES = mln_util_internal_graph_vertex_impl.cc
+mln_util_greater_point_SOURCES = mln_util_greater_point.cc
+mln_util_internal_graph_edge_impl_SOURCES = mln_util_internal_graph_edge_impl.cc
mln_util_internal_graph_iter_base_SOURCES = mln_util_internal_graph_iter_base.cc
-mln_util_internal_boost_graph_SOURCES = mln_util_internal_boost_graph.cc
-mln_util_internal_graph_edge_SOURCES = mln_util_internal_graph_edge.cc
-mln_util_internal_boost_graph_structure_SOURCES = mln_util_internal_boost_graph_structure.cc
mln_util_internal_boost_graph_access_SOURCES = mln_util_internal_boost_graph_access.cc
-mln_util_internal_graph_base_SOURCES = mln_util_internal_graph_base.cc
-mln_util_internal_graph_edge_impl_SOURCES = mln_util_internal_graph_edge_impl.cc
+mln_util_internal_boost_graph_structure_SOURCES = mln_util_internal_boost_graph_structure.cc
+mln_util_internal_graph_iter_SOURCES = mln_util_internal_graph_iter.cc
mln_util_internal_graph_nbh_iter_SOURCES = mln_util_internal_graph_nbh_iter.cc
+mln_util_internal_graph_base_SOURCES = mln_util_internal_graph_base.cc
+mln_util_internal_graph_vertex_impl_SOURCES = mln_util_internal_graph_vertex_impl.cc
+mln_util_internal_boost_graph_SOURCES = mln_util_internal_boost_graph.cc
mln_util_internal_graph_nbh_iter_base_SOURCES = mln_util_internal_graph_nbh_iter_base.cc
-mln_util_internal_graph_iter_SOURCES = mln_util_internal_graph_iter.cc
-mln_util_internal_graph_vertex_psite_SOURCES = mln_util_internal_graph_vertex_psite.cc
+mln_util_internal_boost_graph_property_SOURCES = mln_util_internal_boost_graph_property.cc
+mln_util_ord_pair_SOURCES = mln_util_ord_pair.cc
+mln_util_edge_SOURCES = mln_util_edge.cc
+mln_util_all_SOURCES = mln_util_all.cc
+mln_util_dindex_SOURCES = mln_util_dindex.cc
+mln_util_tracked_ptr_SOURCES = mln_util_tracked_ptr.cc
+mln_util_ignore_SOURCES = mln_util_ignore.cc
+mln_util_greater_psite_SOURCES = mln_util_greater_psite.cc
+mln_util_timer_SOURCES = mln_util_timer.cc
mln_util_yes_SOURCES = mln_util_yes.cc
+mln_util_ord_SOURCES = mln_util_ord.cc
+mln_util_tree_fast_to_image_SOURCES = mln_util_tree_fast_to_image.cc
+mln_util_tree_SOURCES = mln_util_tree.cc
+mln_util_index_SOURCES = mln_util_index.cc
mln_util_multi_site_SOURCES = mln_util_multi_site.cc
-mln_util_timer_SOURCES = mln_util_timer.cc
-mln_util_tree_fast_SOURCES = mln_util_tree_fast.cc
+mln_util_branch_iter_SOURCES = mln_util_branch_iter.cc
mln_util_branch_iter_ind_SOURCES = mln_util_branch_iter_ind.cc
-mln_util_tree_to_image_SOURCES = mln_util_tree_to_image.cc
+mln_util_tree_to_fast_SOURCES = mln_util_tree_to_fast.cc
mln_util_array_SOURCES = mln_util_array.cc
-mln_fun_c_SOURCES = mln_fun_c.cc
-mln_fun_cast_SOURCES = mln_fun_cast.cc
+mln_util_vertex_SOURCES = mln_util_vertex.cc
+mln_util_pix_SOURCES = mln_util_pix.cc
+mln_util_tree_fast_SOURCES = mln_util_tree_fast.cc
+mln_util_site_pair_SOURCES = mln_util_site_pair.cc
+mln_util_nil_SOURCES = mln_util_nil.cc
+mln_util_eat_SOURCES = mln_util_eat.cc
+mln_util_essential_SOURCES = mln_util_essential.cc
+mln_tag_init_SOURCES = mln_tag_init.cc
+mln_tag_skeleton_SOURCES = mln_tag_skeleton.cc
+mln_tag_all_SOURCES = mln_tag_all.cc
+mln_tag_essential_SOURCES = mln_tag_essential.cc
+mln_trace_entering_SOURCES = mln_trace_entering.cc
+mln_trace_all_SOURCES = mln_trace_all.cc
+mln_trace_warning_SOURCES = mln_trace_warning.cc
+mln_trace_exiting_SOURCES = mln_trace_exiting.cc
+mln_trace_resume_SOURCES = mln_trace_resume.cc
+mln_trace_quiet_SOURCES = mln_trace_quiet.cc
+mln_trace_stop_SOURCES = mln_trace_stop.cc
+mln_trace_essential_SOURCES = mln_trace_essential.cc
+mln_make_graph_SOURCES = mln_make_graph.cc
+mln_make_double_neighb2d_SOURCES = mln_make_double_neighb2d.cc
+mln_make_dpoint2d_h_SOURCES = mln_make_dpoint2d_h.cc
+mln_make_w_window_SOURCES = mln_make_w_window.cc
+mln_make_image_SOURCES = mln_make_image.cc
+mln_make_vec_SOURCES = mln_make_vec.cc
+mln_make_all_SOURCES = mln_make_all.cc
+mln_make_dual_neighb_SOURCES = mln_make_dual_neighb.cc
+mln_make_w_window3d_SOURCES = mln_make_w_window3d.cc
+mln_make_mat_SOURCES = mln_make_mat.cc
+mln_make_win_chamfer_SOURCES = mln_make_win_chamfer.cc
+mln_make_w_window2d_int_SOURCES = mln_make_w_window2d_int.cc
+mln_make_box1d_SOURCES = mln_make_box1d.cc
+mln_make_voronoi_SOURCES = mln_make_voronoi.cc
+mln_make_box2d_SOURCES = mln_make_box2d.cc
+mln_make_w_window2d_SOURCES = mln_make_w_window2d.cc
+mln_make_box3d_SOURCES = mln_make_box3d.cc
+mln_make_relabelfun_SOURCES = mln_make_relabelfun.cc
+mln_make_pixel_SOURCES = mln_make_pixel.cc
+mln_make_pix_SOURCES = mln_make_pix.cc
+mln_make_box2d_h_SOURCES = mln_make_box2d_h.cc
+mln_make_w_window1d_SOURCES = mln_make_w_window1d.cc
+mln_make_image2d_SOURCES = mln_make_image2d.cc
+mln_make_w_window_directional_SOURCES = mln_make_w_window_directional.cc
+mln_make_w_window3d_int_SOURCES = mln_make_w_window3d_int.cc
+mln_make_essential_SOURCES = mln_make_essential.cc
+mln_make_w_window1d_int_SOURCES = mln_make_w_window1d_int.cc
+mln_make_point2d_h_SOURCES = mln_make_point2d_h.cc
+mln_display_remove_SOURCES = mln_display_remove.cc
+mln_display_all_SOURCES = mln_display_all.cc
+mln_display_color_pretty_SOURCES = mln_display_color_pretty.cc
+mln_display_save_SOURCES = mln_display_save.cc
+mln_display_save_and_show_SOURCES = mln_display_save_and_show.cc
+mln_display_show_SOURCES = mln_display_show.cc
+mln_display_essential_SOURCES = mln_display_essential.cc
+mln_extension_adjust_SOURCES = mln_extension_adjust.cc
+mln_extension_duplicate_SOURCES = mln_extension_duplicate.cc
+mln_extension_adjust_duplicate_SOURCES = mln_extension_adjust_duplicate.cc
+mln_extension_all_SOURCES = mln_extension_all.cc
+mln_extension_adjust_fill_SOURCES = mln_extension_adjust_fill.cc
+mln_extension_fill_SOURCES = mln_extension_fill.cc
+mln_extension_essential_SOURCES = mln_extension_essential.cc
+mln_fun_p2b_chess_SOURCES = mln_fun_p2b_chess.cc
+mln_fun_p2b_all_SOURCES = mln_fun_p2b_all.cc
+mln_fun_p2b_has_SOURCES = mln_fun_p2b_has.cc
+mln_fun_p2b_essential_SOURCES = mln_fun_p2b_essential.cc
mln_fun_x2p_closest_point_SOURCES = mln_fun_x2p_closest_point.cc
-mln_fun_x2p_essential_SOURCES = mln_fun_x2p_essential.cc
mln_fun_x2p_all_SOURCES = mln_fun_x2p_all.cc
-mln_fun_p2v_elifs_SOURCES = mln_fun_p2v_elifs.cc
-mln_fun_p2v_iota_SOURCES = mln_fun_p2v_iota.cc
-mln_fun_p2v_essential_SOURCES = mln_fun_p2v_essential.cc
-mln_fun_p2v_all_SOURCES = mln_fun_p2v_all.cc
-mln_fun_p2v_ternary_SOURCES = mln_fun_p2v_ternary.cc
+mln_fun_x2p_essential_SOURCES = mln_fun_x2p_essential.cc
+mln_fun_ops_SOURCES = mln_fun_ops.cc
+mln_fun_c_SOURCES = mln_fun_c.cc
mln_fun_vv2v_max_SOURCES = mln_fun_vv2v_max.cc
-mln_fun_vv2v_essential_SOURCES = mln_fun_vv2v_essential.cc
+mln_fun_vv2v_lor_SOURCES = mln_fun_vv2v_lor.cc
+mln_fun_vv2v_land_not_SOURCES = mln_fun_vv2v_land_not.cc
+mln_fun_vv2v_vec_SOURCES = mln_fun_vv2v_vec.cc
mln_fun_vv2v_all_SOURCES = mln_fun_vv2v_all.cc
+mln_fun_vv2v_macros_SOURCES = mln_fun_vv2v_macros.cc
+mln_fun_vv2v_lxor_SOURCES = mln_fun_vv2v_lxor.cc
+mln_fun_vv2v_diff_abs_SOURCES = mln_fun_vv2v_diff_abs.cc
+mln_fun_vv2v_land_SOURCES = mln_fun_vv2v_land.cc
mln_fun_vv2v_min_SOURCES = mln_fun_vv2v_min.cc
-mln_fun_x2x_composed_SOURCES = mln_fun_x2x_composed.cc
-mln_fun_x2x_essential_SOURCES = mln_fun_x2x_essential.cc
-mln_fun_x2x_rotation_SOURCES = mln_fun_x2x_rotation.cc
-mln_fun_x2x_all_SOURCES = mln_fun_x2x_all.cc
-mln_fun_x2x_translation_SOURCES = mln_fun_x2x_translation.cc
-mln_fun_essential_SOURCES = mln_fun_essential.cc
-mln_fun_v2v_rgb_to_hsi_SOURCES = mln_fun_v2v_rgb_to_hsi.cc
-mln_fun_v2v_enc_SOURCES = mln_fun_v2v_enc.cc
-mln_fun_v2v_cast_SOURCES = mln_fun_v2v_cast.cc
-mln_fun_v2v_saturate_SOURCES = mln_fun_v2v_saturate.cc
+mln_fun_vv2v_essential_SOURCES = mln_fun_vv2v_essential.cc
+mln_fun_internal_array_base_SOURCES = mln_fun_internal_array_base.cc
+mln_fun_internal_x2x_linear_impl_SOURCES = mln_fun_internal_x2x_linear_impl.cc
+mln_fun_internal_selector_SOURCES = mln_fun_internal_selector.cc
+mln_fun_p2v_ternary_SOURCES = mln_fun_p2v_ternary.cc
+mln_fun_p2v_iota_SOURCES = mln_fun_p2v_iota.cc
+mln_fun_p2v_elifs_SOURCES = mln_fun_p2v_elifs.cc
+mln_fun_p2v_all_SOURCES = mln_fun_p2v_all.cc
+mln_fun_p2v_essential_SOURCES = mln_fun_p2v_essential.cc
+mln_fun_all_SOURCES = mln_fun_all.cc
+mln_fun_v2b_lnot_SOURCES = mln_fun_v2b_lnot.cc
+mln_fun_v2b_all_SOURCES = mln_fun_v2b_all.cc
+mln_fun_v2b_threshold_SOURCES = mln_fun_v2b_threshold.cc
+mln_fun_v2b_essential_SOURCES = mln_fun_v2b_essential.cc
mln_fun_v2v_norm_SOURCES = mln_fun_v2v_norm.cc
-mln_fun_v2v_convert_SOURCES = mln_fun_v2v_convert.cc
-mln_fun_v2v_id_SOURCES = mln_fun_v2v_id.cc
-mln_fun_v2v_essential_SOURCES = mln_fun_v2v_essential.cc
mln_fun_v2v_linear_SOURCES = mln_fun_v2v_linear.cc
+mln_fun_v2v_id_SOURCES = mln_fun_v2v_id.cc
+mln_fun_v2v_saturate_SOURCES = mln_fun_v2v_saturate.cc
+mln_fun_v2v_inc_SOURCES = mln_fun_v2v_inc.cc
mln_fun_v2v_all_SOURCES = mln_fun_v2v_all.cc
-mln_fun_v2v_abs_SOURCES = mln_fun_v2v_abs.cc
mln_fun_v2v_dec_SOURCES = mln_fun_v2v_dec.cc
-mln_fun_v2v_inc_SOURCES = mln_fun_v2v_inc.cc
-mln_fun_i2v_essential_SOURCES = mln_fun_i2v_essential.cc
+mln_fun_v2v_abs_SOURCES = mln_fun_v2v_abs.cc
+mln_fun_v2v_cast_SOURCES = mln_fun_v2v_cast.cc
+mln_fun_v2v_rgb_to_hsi_SOURCES = mln_fun_v2v_rgb_to_hsi.cc
+mln_fun_v2v_enc_SOURCES = mln_fun_v2v_enc.cc
+mln_fun_v2v_convert_SOURCES = mln_fun_v2v_convert.cc
+mln_fun_v2v_essential_SOURCES = mln_fun_v2v_essential.cc
+mln_fun_cast_SOURCES = mln_fun_cast.cc
mln_fun_i2v_all_SOURCES = mln_fun_i2v_all.cc
-mln_fun_i2v_all_to_SOURCES = mln_fun_i2v_all_to.cc
mln_fun_i2v_array_SOURCES = mln_fun_i2v_array.cc
-mln_fun_ops_SOURCES = mln_fun_ops.cc
-mln_fun_all_SOURCES = mln_fun_all.cc
-mln_fun_v2b_essential_SOURCES = mln_fun_v2b_essential.cc
-mln_fun_v2b_all_SOURCES = mln_fun_v2b_all.cc
-mln_fun_v2b_threshold_SOURCES = mln_fun_v2b_threshold.cc
-mln_fun_internal_selector_SOURCES = mln_fun_internal_selector.cc
-mln_fun_internal_x2x_linear_impl_SOURCES = mln_fun_internal_x2x_linear_impl.cc
-mln_fun_x2v_essential_SOURCES = mln_fun_x2v_essential.cc
+mln_fun_i2v_all_to_SOURCES = mln_fun_i2v_all_to.cc
+mln_fun_i2v_essential_SOURCES = mln_fun_i2v_essential.cc
+mln_fun_l2l_relabel_SOURCES = mln_fun_l2l_relabel.cc
+mln_fun_x2x_composed_SOURCES = mln_fun_x2x_composed.cc
+mln_fun_x2x_all_SOURCES = mln_fun_x2x_all.cc
+mln_fun_x2x_translation_SOURCES = mln_fun_x2x_translation.cc
+mln_fun_x2x_rotation_SOURCES = mln_fun_x2x_rotation.cc
+mln_fun_x2x_essential_SOURCES = mln_fun_x2x_essential.cc
mln_fun_x2v_linear_SOURCES = mln_fun_x2v_linear.cc
-mln_fun_x2v_all_SOURCES = mln_fun_x2v_all.cc
mln_fun_x2v_bilinear_SOURCES = mln_fun_x2v_bilinear.cc
+mln_fun_x2v_all_SOURCES = mln_fun_x2v_all.cc
+mln_fun_x2v_l1_norm_SOURCES = mln_fun_x2v_l1_norm.cc
mln_fun_x2v_nneighbor_SOURCES = mln_fun_x2v_nneighbor.cc
-mln_fun_p2b_essential_SOURCES = mln_fun_p2b_essential.cc
-mln_fun_p2b_has_SOURCES = mln_fun_p2b_has.cc
-mln_fun_p2b_all_SOURCES = mln_fun_p2b_all.cc
-mln_fun_p2b_chess_SOURCES = mln_fun_p2b_chess.cc
-mln_extension_essential_SOURCES = mln_extension_essential.cc
-mln_extension_fill_SOURCES = mln_extension_fill.cc
-mln_extension_adjust_duplicate_SOURCES = mln_extension_adjust_duplicate.cc
-mln_extension_adjust_fill_SOURCES = mln_extension_adjust_fill.cc
-mln_extension_all_SOURCES = mln_extension_all.cc
-mln_histo_data_SOURCES = mln_histo_data.cc
-mln_histo_compute_spe_SOURCES = mln_histo_compute_spe.cc
-mln_histo_essential_SOURCES = mln_histo_essential.cc
-mln_histo_compute_SOURCES = mln_histo_compute.cc
-mln_histo_all_SOURCES = mln_histo_all.cc
-mln_transform_essential_SOURCES = mln_transform_essential.cc
-mln_transform_distance_SOURCES = mln_transform_distance.cc
-mln_transform_all_SOURCES = mln_transform_all.cc
-mln_trait_windows_SOURCES = mln_trait_windows.cc
-mln_trait_images_SOURCES = mln_trait_images.cc
-mln_trait_solve_SOURCES = mln_trait_solve.cc
-mln_trait_window_print_SOURCES = mln_trait_window_print.cc
-mln_trait_window_props_SOURCES = mln_trait_window_props.cc
-mln_trait_image_from_grid_SOURCES = mln_trait_image_from_grid.cc
-mln_trait_site_sets_SOURCES = mln_trait_site_sets.cc
+mln_fun_x2v_essential_SOURCES = mln_fun_x2v_essential.cc
+mln_fun_essential_SOURCES = mln_fun_essential.cc
+mln_convert_to_p_set_SOURCES = mln_convert_to_p_set.cc
+mln_convert_to_SOURCES = mln_convert_to.cc
+mln_convert_to_upper_window_SOURCES = mln_convert_to_upper_window.cc
+mln_convert_to_image_SOURCES = mln_convert_to_image.cc
+mln_convert_to_fun_SOURCES = mln_convert_to_fun.cc
+mln_convert_all_SOURCES = mln_convert_all.cc
+mln_convert_to_tiles_SOURCES = mln_convert_to_tiles.cc
+mln_convert_to_window_SOURCES = mln_convert_to_window.cc
+mln_convert_from_to_SOURCES = mln_convert_from_to.cc
+mln_convert_to_std_set_SOURCES = mln_convert_to_std_set.cc
+mln_convert_impl_from_value_to_value_SOURCES = mln_convert_impl_from_value_to_value.cc
+mln_convert_impl_all_SOURCES = mln_convert_impl_all.cc
+mln_convert_impl_from_image_to_site_set_SOURCES = mln_convert_impl_from_image_to_site_set.cc
+mln_convert_to_dpoint_SOURCES = mln_convert_to_dpoint.cc
+mln_convert_to_p_array_SOURCES = mln_convert_to_p_array.cc
+mln_convert_to_rgb_SOURCES = mln_convert_to_rgb.cc
+mln_convert_essential_SOURCES = mln_convert_essential.cc
+mln_value_float01_f_SOURCES = mln_value_float01_f.cc
+mln_value_float01_16_SOURCES = mln_value_float01_16.cc
+mln_value_lut_vec_SOURCES = mln_value_lut_vec.cc
+mln_value_glf_SOURCES = mln_value_glf.cc
+mln_value_other_SOURCES = mln_value_other.cc
+mln_value_graylevel_f_SOURCES = mln_value_graylevel_f.cc
+mln_value_aliases_SOURCES = mln_value_aliases.cc
+mln_value_label_16_SOURCES = mln_value_label_16.cc
+mln_value_ops_SOURCES = mln_value_ops.cc
+mln_value_set_SOURCES = mln_value_set.cc
+mln_value_int_u_sat_SOURCES = mln_value_int_u_sat.cc
+mln_value_float01_8_SOURCES = mln_value_float01_8.cc
+mln_value_int_u8_SOURCES = mln_value_int_u8.cc
+mln_value_equiv_SOURCES = mln_value_equiv.cc
+mln_value_internal_integer_SOURCES = mln_value_internal_integer.cc
+mln_value_internal_gray_f_SOURCES = mln_value_internal_gray_f.cc
+mln_value_internal_all_SOURCES = mln_value_internal_all.cc
+mln_value_internal_value_like_SOURCES = mln_value_internal_value_like.cc
+mln_value_internal_iterable_set_SOURCES = mln_value_internal_iterable_set.cc
+mln_value_internal_encoding_SOURCES = mln_value_internal_encoding.cc
+mln_value_internal_convert_SOURCES = mln_value_internal_convert.cc
+mln_value_internal_gray__SOURCES = mln_value_internal_gray_.cc
+mln_value_internal_essential_SOURCES = mln_value_internal_essential.cc
+mln_value_proxy_SOURCES = mln_value_proxy.cc
+mln_value_viter_SOURCES = mln_value_viter.cc
+mln_value_graylevel_SOURCES = mln_value_graylevel.cc
+mln_value_all_SOURCES = mln_value_all.cc
+mln_value_super_value_SOURCES = mln_value_super_value.cc
+mln_value_builtin_symbolics_SOURCES = mln_value_builtin_symbolics.cc
+mln_value_builtin_ops_SOURCES = mln_value_builtin_ops.cc
+mln_value_builtin_all_SOURCES = mln_value_builtin_all.cc
+mln_value_builtin_promotions_SOURCES = mln_value_builtin_promotions.cc
+mln_value_builtin_integers_SOURCES = mln_value_builtin_integers.cc
+mln_value_builtin_floatings_SOURCES = mln_value_builtin_floatings.cc
+mln_value_builtin_essential_SOURCES = mln_value_builtin_essential.cc
+mln_value_sign_SOURCES = mln_value_sign.cc
+mln_value_hsi_SOURCES = mln_value_hsi.cc
+mln_value_interval_SOURCES = mln_value_interval.cc
+mln_value_gl16_SOURCES = mln_value_gl16.cc
+mln_value_scalar_SOURCES = mln_value_scalar.cc
+mln_value_float01_SOURCES = mln_value_float01.cc
+mln_value_cast_SOURCES = mln_value_cast.cc
+mln_value_int_u_SOURCES = mln_value_int_u.cc
+mln_value_int_s8_SOURCES = mln_value_int_s8.cc
+mln_value_int_s16_SOURCES = mln_value_int_s16.cc
+mln_value_int_u16_SOURCES = mln_value_int_u16.cc
+mln_value_label_SOURCES = mln_value_label.cc
+mln_value_rgb_SOURCES = mln_value_rgb.cc
+mln_value_stack_SOURCES = mln_value_stack.cc
+mln_value_concept_integer_SOURCES = mln_value_concept_integer.cc
+mln_value_concept_structured_SOURCES = mln_value_concept_structured.cc
+mln_value_concept_built_in_SOURCES = mln_value_concept_built_in.cc
+mln_value_concept_all_SOURCES = mln_value_concept_all.cc
+mln_value_concept_scalar_SOURCES = mln_value_concept_scalar.cc
+mln_value_concept_data_SOURCES = mln_value_concept_data.cc
+mln_value_concept_floating_SOURCES = mln_value_concept_floating.cc
+mln_value_concept_symbolic_SOURCES = mln_value_concept_symbolic.cc
+mln_value_concept_vectorial_SOURCES = mln_value_concept_vectorial.cc
+mln_value_concept_essential_SOURCES = mln_value_concept_essential.cc
+mln_value_int_s_SOURCES = mln_value_int_s.cc
+mln_value_rgb8_SOURCES = mln_value_rgb8.cc
+mln_value_int_s32_SOURCES = mln_value_int_s32.cc
+mln_value_float01__SOURCES = mln_value_float01_.cc
+mln_value_rgb16_SOURCES = mln_value_rgb16.cc
+mln_value_int_u32_SOURCES = mln_value_int_u32.cc
+mln_value_gl8_SOURCES = mln_value_gl8.cc
+mln_value_label_8_SOURCES = mln_value_label_8.cc
+mln_value_essential_SOURCES = mln_value_essential.cc
+mln_accu_tuple_SOURCES = mln_accu_tuple.cc
+mln_accu_min_h_SOURCES = mln_accu_min_h.cc
+mln_accu_max_SOURCES = mln_accu_max.cc
+mln_accu_rank_SOURCES = mln_accu_rank.cc
+mln_accu_transform_stop_SOURCES = mln_accu_transform_stop.cc
+mln_accu_maj_h_SOURCES = mln_accu_maj_h.cc
+mln_accu_min_max_SOURCES = mln_accu_min_max.cc
+mln_accu_internal_base_SOURCES = mln_accu_internal_base.cc
+mln_accu_transform_snake_SOURCES = mln_accu_transform_snake.cc
+mln_accu_rank_high_quant_SOURCES = mln_accu_rank_high_quant.cc
+mln_accu_count_SOURCES = mln_accu_count.cc
+mln_accu_median_h_SOURCES = mln_accu_median_h.cc
+mln_accu_all_SOURCES = mln_accu_all.cc
+mln_accu_land_basic_SOURCES = mln_accu_land_basic.cc
+mln_accu_p_SOURCES = mln_accu_p.cc
+mln_accu_transform_SOURCES = mln_accu_transform.cc
+mln_accu_median_alt_SOURCES = mln_accu_median_alt.cc
+mln_accu_volume_SOURCES = mln_accu_volume.cc
+mln_accu_sum_SOURCES = mln_accu_sum.cc
+mln_accu_height_SOURCES = mln_accu_height.cc
+mln_accu_land_SOURCES = mln_accu_land.cc
+mln_accu_take_SOURCES = mln_accu_take.cc
+mln_accu_histo_SOURCES = mln_accu_histo.cc
+mln_accu_pair_SOURCES = mln_accu_pair.cc
+mln_accu_count_adjacent_vertices_SOURCES = mln_accu_count_adjacent_vertices.cc
+mln_accu_convolve_SOURCES = mln_accu_convolve.cc
+mln_accu_v_SOURCES = mln_accu_v.cc
+mln_accu_rank_bool_SOURCES = mln_accu_rank_bool.cc
+mln_accu_min_SOURCES = mln_accu_min.cc
+mln_accu_transform_directional_SOURCES = mln_accu_transform_directional.cc
+mln_accu_compute_SOURCES = mln_accu_compute.cc
+mln_accu_mean_SOURCES = mln_accu_mean.cc
+mln_accu_transform_diagonal_SOURCES = mln_accu_transform_diagonal.cc
+mln_accu_nil_SOURCES = mln_accu_nil.cc
+mln_accu_bbox_SOURCES = mln_accu_bbox.cc
+mln_accu_center_SOURCES = mln_accu_center.cc
+mln_accu_line_SOURCES = mln_accu_line.cc
+mln_accu_essential_SOURCES = mln_accu_essential.cc
+mln_accu_max_h_SOURCES = mln_accu_max_h.cc
+mln_level_compare_SOURCES = mln_level_compare.cc
+mln_level_memset__SOURCES = mln_level_memset_.cc
+mln_level_transform_inplace_SOURCES = mln_level_transform_inplace.cc
+mln_level_replace_SOURCES = mln_level_replace.cc
+mln_level_memcpy__SOURCES = mln_level_memcpy_.cc
+mln_level_apply_SOURCES = mln_level_apply.cc
+mln_level_approx_all_SOURCES = mln_level_approx_all.cc
+mln_level_approx_essential_SOURCES = mln_level_approx_essential.cc
+mln_level_approx_median_SOURCES = mln_level_approx_median.cc
+mln_level_saturate_SOURCES = mln_level_saturate.cc
+mln_level_all_SOURCES = mln_level_all.cc
+mln_level_paste_SOURCES = mln_level_paste.cc
+mln_level_fast_median_SOURCES = mln_level_fast_median.cc
+mln_level_abs_SOURCES = mln_level_abs.cc
+mln_level_fill_with_image_SOURCES = mln_level_fill_with_image.cc
+mln_level_transform_SOURCES = mln_level_transform.cc
+mln_level_fill_with_value_SOURCES = mln_level_fill_with_value.cc
+mln_level_stretch_SOURCES = mln_level_stretch.cc
+mln_level_domain_SOURCES = mln_level_domain.cc
+mln_level_was_median_SOURCES = mln_level_was_median.cc
+mln_level_compute_SOURCES = mln_level_compute.cc
+mln_level_convert_SOURCES = mln_level_convert.cc
+mln_level_to_enc_SOURCES = mln_level_to_enc.cc
+mln_level_naive_all_SOURCES = mln_level_naive_all.cc
+mln_level_naive_essential_SOURCES = mln_level_naive_essential.cc
+mln_level_naive_median_SOURCES = mln_level_naive_median.cc
+mln_level_sort_psites_SOURCES = mln_level_sort_psites.cc
+mln_level_update_SOURCES = mln_level_update.cc
+mln_level_fill_SOURCES = mln_level_fill.cc
+mln_level_essential_SOURCES = mln_level_essential.cc
+mln_level_assign_SOURCES = mln_level_assign.cc
+mln_level_median_SOURCES = mln_level_median.cc
+mln_math_jacobi_SOURCES = mln_math_jacobi.cc
+mln_math_max_SOURCES = mln_math_max.cc
+mln_math_sqr_SOURCES = mln_math_sqr.cc
+mln_math_all_SOURCES = mln_math_all.cc
+mln_math_sign_SOURCES = mln_math_sign.cc
+mln_math_abs_SOURCES = mln_math_abs.cc
+mln_math_diff_abs_SOURCES = mln_math_diff_abs.cc
+mln_math_round_SOURCES = mln_math_round.cc
+mln_math_min_SOURCES = mln_math_min.cc
+mln_math_sqrt_SOURCES = mln_math_sqrt.cc
+mln_math_essential_SOURCES = mln_math_essential.cc
+mln_math_round_sat_SOURCES = mln_math_round_sat.cc
+mln_binarization_includes_SOURCES = mln_binarization_includes.cc
+mln_binarization_all_SOURCES = mln_binarization_all.cc
+mln_binarization_binarization_SOURCES = mln_binarization_binarization.cc
+mln_binarization_threshold_SOURCES = mln_binarization_threshold.cc
+mln_binarization_essential_SOURCES = mln_binarization_essential.cc
+mln_trait_site_set_props_SOURCES = mln_trait_site_set_props.cc
+mln_trait_site_set_print_SOURCES = mln_trait_site_set_print.cc
+mln_trait_promote_SOURCES = mln_trait_promote.cc
mln_trait_solve_binary_SOURCES = mln_trait_solve_binary.cc
mln_trait_value__SOURCES = mln_trait_value_.cc
-mln_trait_promote_SOURCES = mln_trait_promote.cc
-mln_trait_essential_SOURCES = mln_trait_essential.cc
-mln_trait_concrete_SOURCES = mln_trait_concrete.cc
-mln_trait_op_ord_SOURCES = mln_trait_op_ord.cc
-mln_trait_op_div_SOURCES = mln_trait_op_div.cc
+mln_trait_all_SOURCES = mln_trait_all.cc
+mln_trait_value_all_SOURCES = mln_trait_value_all.cc
+mln_trait_value_nature_SOURCES = mln_trait_value_nature.cc
+mln_trait_value_quant_SOURCES = mln_trait_value_quant.cc
+mln_trait_value_kind_SOURCES = mln_trait_value_kind.cc
+mln_trait_value_print_SOURCES = mln_trait_value_print.cc
+mln_trait_value_essential_SOURCES = mln_trait_value_essential.cc
+mln_trait_images_SOURCES = mln_trait_images.cc
+mln_trait_window_props_SOURCES = mln_trait_window_props.cc
+mln_trait_window_print_SOURCES = mln_trait_window_print.cc
+mln_trait_ch_value_SOURCES = mln_trait_ch_value.cc
+mln_trait_solve_SOURCES = mln_trait_solve.cc
+mln_trait_solve_unary_SOURCES = mln_trait_solve_unary.cc
+mln_trait_op_postdec_SOURCES = mln_trait_op_postdec.cc
mln_trait_op_mod_SOURCES = mln_trait_op_mod.cc
+mln_trait_op_lor_SOURCES = mln_trait_op_lor.cc
+mln_trait_op_neq_SOURCES = mln_trait_op_neq.cc
+mln_trait_op_plus_SOURCES = mln_trait_op_plus.cc
+mln_trait_op_xor_SOURCES = mln_trait_op_xor.cc
+mln_trait_op_all_SOURCES = mln_trait_op_all.cc
+mln_trait_op_geq_SOURCES = mln_trait_op_geq.cc
+mln_trait_op_uminus_SOURCES = mln_trait_op_uminus.cc
mln_trait_op_not_SOURCES = mln_trait_op_not.cc
-mln_trait_op_or_SOURCES = mln_trait_op_or.cc
+mln_trait_op_times_SOURCES = mln_trait_op_times.cc
+mln_trait_op_less_SOURCES = mln_trait_op_less.cc
+mln_trait_op_decl_SOURCES = mln_trait_op_decl.cc
+mln_trait_op_ord_SOURCES = mln_trait_op_ord.cc
mln_trait_op_and_SOURCES = mln_trait_op_and.cc
-mln_trait_op_xor_SOURCES = mln_trait_op_xor.cc
-mln_trait_op_essential_SOURCES = mln_trait_op_essential.cc
+mln_trait_op_or_SOURCES = mln_trait_op_or.cc
+mln_trait_op_predec_SOURCES = mln_trait_op_predec.cc
+mln_trait_op_minus_SOURCES = mln_trait_op_minus.cc
+mln_trait_op_div_SOURCES = mln_trait_op_div.cc
+mln_trait_op_leq_SOURCES = mln_trait_op_leq.cc
mln_trait_op_preinc_SOURCES = mln_trait_op_preinc.cc
mln_trait_op_greater_SOURCES = mln_trait_op_greater.cc
-mln_trait_op_predec_SOURCES = mln_trait_op_predec.cc
-mln_trait_op_neq_SOURCES = mln_trait_op_neq.cc
mln_trait_op_postinc_SOURCES = mln_trait_op_postinc.cc
mln_trait_op_uplus_SOURCES = mln_trait_op_uplus.cc
-mln_trait_op_geq_SOURCES = mln_trait_op_geq.cc
-mln_trait_op_uminus_SOURCES = mln_trait_op_uminus.cc
-mln_trait_op_all_SOURCES = mln_trait_op_all.cc
-mln_trait_op_plus_SOURCES = mln_trait_op_plus.cc
+mln_trait_op_essential_SOURCES = mln_trait_op_essential.cc
mln_trait_op_eq_SOURCES = mln_trait_op_eq.cc
-mln_trait_op_leq_SOURCES = mln_trait_op_leq.cc
-mln_trait_op_less_SOURCES = mln_trait_op_less.cc
-mln_trait_op_postdec_SOURCES = mln_trait_op_postdec.cc
-mln_trait_op_minus_SOURCES = mln_trait_op_minus.cc
-mln_trait_op_times_SOURCES = mln_trait_op_times.cc
-mln_trait_op_decl_SOURCES = mln_trait_op_decl.cc
-mln_trait_op_lor_SOURCES = mln_trait_op_lor.cc
-mln_trait_all_SOURCES = mln_trait_all.cc
+mln_trait_concrete_SOURCES = mln_trait_concrete.cc
+mln_trait_windows_SOURCES = mln_trait_windows.cc
+mln_trait_site_sets_SOURCES = mln_trait_site_sets.cc
+mln_trait_image_from_grid_SOURCES = mln_trait_image_from_grid.cc
mln_trait_undef_SOURCES = mln_trait_undef.cc
-mln_trait_image_print_SOURCES = mln_trait_image_print.cc
mln_trait_image_props_SOURCES = mln_trait_image_props.cc
-mln_trait_solve_unary_SOURCES = mln_trait_solve_unary.cc
-mln_trait_site_set_print_SOURCES = mln_trait_site_set_print.cc
-mln_trait_site_set_props_SOURCES = mln_trait_site_set_props.cc
+mln_trait_image_print_SOURCES = mln_trait_image_print.cc
mln_trait_neighborhood_SOURCES = mln_trait_neighborhood.cc
-mln_trait_ch_value_SOURCES = mln_trait_ch_value.cc
-mln_trait_value_print_SOURCES = mln_trait_value_print.cc
-mln_trait_value_nature_SOURCES = mln_trait_value_nature.cc
-mln_trait_value_kind_SOURCES = mln_trait_value_kind.cc
-mln_trait_value_quant_SOURCES = mln_trait_value_quant.cc
-mln_trait_value_essential_SOURCES = mln_trait_value_essential.cc
-mln_trait_value_all_SOURCES = mln_trait_value_all.cc
-mln_win_disk2d_SOURCES = mln_win_disk2d.cc
-mln_win_cuboid3d_SOURCES = mln_win_cuboid3d.cc
-mln_win_segment1d_SOURCES = mln_win_segment1d.cc
-mln_win_octagon2d_SOURCES = mln_win_octagon2d.cc
+mln_trait_essential_SOURCES = mln_trait_essential.cc
+mln_canvas_labeling_SOURCES = mln_canvas_labeling.cc
+mln_canvas_browsing_hyper_directional_SOURCES = mln_canvas_browsing_hyper_directional.cc
+mln_canvas_browsing_snake_generic_SOURCES = mln_canvas_browsing_snake_generic.cc
+mln_canvas_browsing_backdiagonal2d_SOURCES = mln_canvas_browsing_backdiagonal2d.cc
+mln_canvas_browsing_snake_vert_SOURCES = mln_canvas_browsing_snake_vert.cc
+mln_canvas_browsing_snake_fwd_SOURCES = mln_canvas_browsing_snake_fwd.cc
+mln_canvas_browsing_all_SOURCES = mln_canvas_browsing_all.cc
+mln_canvas_browsing_diagonal2d_SOURCES = mln_canvas_browsing_diagonal2d.cc
+mln_canvas_browsing_fwd_SOURCES = mln_canvas_browsing_fwd.cc
+mln_canvas_browsing_dir_struct_elt_incr_update_SOURCES = mln_canvas_browsing_dir_struct_elt_incr_update.cc
+mln_canvas_browsing_directional_SOURCES = mln_canvas_browsing_directional.cc
+mln_canvas_browsing_essential_SOURCES = mln_canvas_browsing_essential.cc
+mln_canvas_chamfer_SOURCES = mln_canvas_chamfer.cc
+mln_canvas_distance_geodesic_SOURCES = mln_canvas_distance_geodesic.cc
+mln_canvas_all_SOURCES = mln_canvas_all.cc
+mln_canvas_morpho_all_SOURCES = mln_canvas_morpho_all.cc
+mln_canvas_morpho_algebraic_union_find_SOURCES = mln_canvas_morpho_algebraic_union_find.cc
+mln_canvas_morpho_essential_SOURCES = mln_canvas_morpho_essential.cc
+mln_canvas_essential_SOURCES = mln_canvas_essential.cc
+mln_metal_is_const_SOURCES = mln_metal_is_const.cc
+mln_metal_none_SOURCES = mln_metal_none.cc
+mln_metal_equal_SOURCES = mln_metal_equal.cc
+mln_metal_unptr_SOURCES = mln_metal_unptr.cc
+mln_metal_not_equal_SOURCES = mln_metal_not_equal.cc
+mln_metal_is_ref_SOURCES = mln_metal_is_ref.cc
+mln_metal_ret_SOURCES = mln_metal_ret.cc
+mln_metal_unqualif_SOURCES = mln_metal_unqualif.cc
+mln_metal_is_not_SOURCES = mln_metal_is_not.cc
+mln_metal_vec_SOURCES = mln_metal_vec.cc
+mln_metal_is_SOURCES = mln_metal_is.cc
+mln_metal_bool_SOURCES = mln_metal_bool.cc
+mln_metal_all_SOURCES = mln_metal_all.cc
+mln_metal_math_pow_SOURCES = mln_metal_math_pow.cc
+mln_metal_math_max_SOURCES = mln_metal_math_max.cc
+mln_metal_math_all_SOURCES = mln_metal_math_all.cc
+mln_metal_math_root_SOURCES = mln_metal_math_root.cc
+mln_metal_math_sqrt_SOURCES = mln_metal_math_sqrt.cc
+mln_metal_mat_SOURCES = mln_metal_mat.cc
+mln_metal_is_not_const_SOURCES = mln_metal_is_not_const.cc
+mln_metal_fix_return_SOURCES = mln_metal_fix_return.cc
+mln_metal_ands_SOURCES = mln_metal_ands.cc
+mln_metal_const_SOURCES = mln_metal_const.cc
+mln_metal_is_unqualif_SOURCES = mln_metal_is_unqualif.cc
+mln_metal_unconst_SOURCES = mln_metal_unconst.cc
+mln_metal_bexpr_SOURCES = mln_metal_bexpr.cc
+mln_metal_array2d_SOURCES = mln_metal_array2d.cc
+mln_metal_is_not_a_SOURCES = mln_metal_is_not_a.cc
+mln_metal_is_a_SOURCES = mln_metal_is_a.cc
+mln_metal_array1d_SOURCES = mln_metal_array1d.cc
+mln_metal_if_SOURCES = mln_metal_if.cc
+mln_metal_unref_SOURCES = mln_metal_unref.cc
+mln_metal_array_SOURCES = mln_metal_array.cc
+mln_metal_ref_SOURCES = mln_metal_ref.cc
+mln_metal_same_point_SOURCES = mln_metal_same_point.cc
+mln_metal_int_SOURCES = mln_metal_int.cc
+mln_metal_abort_SOURCES = mln_metal_abort.cc
+mln_metal_same_coord_SOURCES = mln_metal_same_coord.cc
+mln_metal_templated_by_SOURCES = mln_metal_templated_by.cc
+mln_metal_has_neighborhood_SOURCES = mln_metal_has_neighborhood.cc
+mln_metal_goes_to_SOURCES = mln_metal_goes_to.cc
+mln_metal_is_not_ref_SOURCES = mln_metal_is_not_ref.cc
+mln_metal_converts_to_SOURCES = mln_metal_converts_to.cc
+mln_metal_essential_SOURCES = mln_metal_essential.cc
+mln_metal_array3d_SOURCES = mln_metal_array3d.cc
+mln_algebra_vec_SOURCES = mln_algebra_vec.cc
+mln_algebra_all_SOURCES = mln_algebra_all.cc
+mln_algebra_h_vec_SOURCES = mln_algebra_h_vec.cc
+mln_algebra_mat_SOURCES = mln_algebra_mat.cc
+mln_algebra_h_mat_SOURCES = mln_algebra_h_mat.cc
+mln_algebra_quat_SOURCES = mln_algebra_quat.cc
+mln_algebra_essential_SOURCES = mln_algebra_essential.cc
+mln_linear_convolve_2x1d_SOURCES = mln_linear_convolve_2x1d.cc
+mln_linear_all_SOURCES = mln_linear_all.cc
+mln_linear_ch_convolve_SOURCES = mln_linear_ch_convolve.cc
+mln_linear_gaussian_SOURCES = mln_linear_gaussian.cc
+mln_linear_convolve_SOURCES = mln_linear_convolve.cc
+mln_linear_sobel_2d_SOURCES = mln_linear_sobel_2d.cc
+mln_linear_local_convolve_SOURCES = mln_linear_local_convolve.cc
+mln_linear_lap_SOURCES = mln_linear_lap.cc
+mln_linear_convolve_directional_SOURCES = mln_linear_convolve_directional.cc
+mln_linear_log_SOURCES = mln_linear_log.cc
+mln_linear_essential_SOURCES = mln_linear_essential.cc
+mln_morpho_thinning_SOURCES = mln_morpho_thinning.cc
+mln_morpho_meyer_wst_SOURCES = mln_morpho_meyer_wst.cc
+mln_morpho_opening_SOURCES = mln_morpho_opening.cc
+mln_morpho_includes_SOURCES = mln_morpho_includes.cc
+mln_morpho_elementary_opening_SOURCES = mln_morpho_elementary_opening.cc
+mln_morpho_elementary_gradient_internal_SOURCES = mln_morpho_elementary_gradient_internal.cc
+mln_morpho_elementary_dilation_SOURCES = mln_morpho_elementary_dilation.cc
+mln_morpho_elementary_laplacian_SOURCES = mln_morpho_elementary_laplacian.cc
+mln_morpho_elementary_all_SOURCES = mln_morpho_elementary_all.cc
+mln_morpho_elementary_gradient_external_SOURCES = mln_morpho_elementary_gradient_external.cc
+mln_morpho_elementary_like_ero_fun_SOURCES = mln_morpho_elementary_like_ero_fun.cc
+mln_morpho_elementary_gradient_SOURCES = mln_morpho_elementary_gradient.cc
+mln_morpho_elementary_like_ero_set_SOURCES = mln_morpho_elementary_like_ero_set.cc
+mln_morpho_elementary_closing_SOURCES = mln_morpho_elementary_closing.cc
+mln_morpho_elementary_top_hat_SOURCES = mln_morpho_elementary_top_hat.cc
+mln_morpho_elementary_erosion_SOURCES = mln_morpho_elementary_erosion.cc
+mln_morpho_elementary_essential_SOURCES = mln_morpho_elementary_essential.cc
+mln_morpho_thin_fit_SOURCES = mln_morpho_thin_fit.cc
+mln_morpho_skeleton_constrained_SOURCES = mln_morpho_skeleton_constrained.cc
+mln_morpho_complementation_SOURCES = mln_morpho_complementation.cc
+mln_morpho_line_gradient_SOURCES = mln_morpho_line_gradient.cc
+mln_morpho_hit_or_miss_SOURCES = mln_morpho_hit_or_miss.cc
+mln_morpho_closing_height_SOURCES = mln_morpho_closing_height.cc
+mln_morpho_plus_SOURCES = mln_morpho_plus.cc
+mln_morpho_erosion_fast_SOURCES = mln_morpho_erosion_fast.cc
+mln_morpho_internal_elementary_SOURCES = mln_morpho_internal_elementary.cc
+mln_morpho_contrast_SOURCES = mln_morpho_contrast.cc
+mln_morpho_opening_area_SOURCES = mln_morpho_opening_area.cc
+mln_morpho_opening_height_SOURCES = mln_morpho_opening_height.cc
+mln_morpho_thickening_SOURCES = mln_morpho_thickening.cc
+mln_morpho_dilation_SOURCES = mln_morpho_dilation.cc
+mln_morpho_laplacian_SOURCES = mln_morpho_laplacian.cc
+mln_morpho_all_SOURCES = mln_morpho_all.cc
+mln_morpho_opening_attribute_SOURCES = mln_morpho_opening_attribute.cc
+mln_morpho_opening_volume_SOURCES = mln_morpho_opening_volume.cc
+mln_morpho_dilation_fast_SOURCES = mln_morpho_dilation_fast.cc
+mln_morpho_closing_area_on_vertices_SOURCES = mln_morpho_closing_area_on_vertices.cc
+mln_morpho_closing_volume_SOURCES = mln_morpho_closing_volume.cc
+mln_morpho_minus_SOURCES = mln_morpho_minus.cc
+mln_morpho_gradient_SOURCES = mln_morpho_gradient.cc
+mln_morpho_opening_area_on_vertices_SOURCES = mln_morpho_opening_area_on_vertices.cc
+mln_morpho_min_SOURCES = mln_morpho_min.cc
+mln_morpho_closing_SOURCES = mln_morpho_closing.cc
+mln_morpho_top_hat_SOURCES = mln_morpho_top_hat.cc
+mln_morpho_erosion_SOURCES = mln_morpho_erosion.cc
+mln_morpho_Rd_SOURCES = mln_morpho_Rd.cc
+mln_morpho_closing_area_SOURCES = mln_morpho_closing_area.cc
+mln_morpho_thick_miss_SOURCES = mln_morpho_thick_miss.cc
+mln_morpho_closing_attribute_SOURCES = mln_morpho_closing_attribute.cc
+mln_morpho_rank_filter_SOURCES = mln_morpho_rank_filter.cc
+mln_morpho_essential_SOURCES = mln_morpho_essential.cc
+mln_topo_n_face_iter_SOURCES = mln_topo_n_face_iter.cc
+mln_topo_face_iter_SOURCES = mln_topo_face_iter.cc
+mln_topo_is_simple_2d_SOURCES = mln_topo_is_simple_2d.cc
+mln_topo_centered_iter_adapter_SOURCES = mln_topo_centered_iter_adapter.cc
+mln_topo_internal_complex_set_iterator_base_SOURCES = mln_topo_internal_complex_set_iterator_base.cc
+mln_topo_internal_complex_iterator_base_SOURCES = mln_topo_internal_complex_iterator_base.cc
+mln_topo_internal_complex_relative_iterator_base_SOURCES = mln_topo_internal_complex_relative_iterator_base.cc
+mln_topo_internal_complex_relative_iterator_sequence_SOURCES = mln_topo_internal_complex_relative_iterator_sequence.cc
+mln_topo_algebraic_n_face_SOURCES = mln_topo_algebraic_n_face.cc
+mln_topo_attic_faces_iter_SOURCES = mln_topo_attic_faces_iter.cc
+mln_topo_adj_lower_dim_connected_n_face_iter_SOURCES = mln_topo_adj_lower_dim_connected_n_face_iter.cc
+mln_topo_n_face_SOURCES = mln_topo_n_face.cc
+mln_topo_adj_lower_higher_face_iter_SOURCES = mln_topo_adj_lower_higher_face_iter.cc
+mln_topo_all_SOURCES = mln_topo_all.cc
+mln_topo_face_data_SOURCES = mln_topo_face_data.cc
+mln_topo_static_n_face_iter_SOURCES = mln_topo_static_n_face_iter.cc
+mln_topo_face_SOURCES = mln_topo_face.cc
+mln_topo_adj_m_face_iter_SOURCES = mln_topo_adj_m_face_iter.cc
+mln_topo_complex_SOURCES = mln_topo_complex.cc
+mln_topo_adj_higher_face_iter_SOURCES = mln_topo_adj_higher_face_iter.cc
+mln_topo_adj_lower_face_iter_SOURCES = mln_topo_adj_lower_face_iter.cc
+mln_topo_complex_iterators_SOURCES = mln_topo_complex_iterators.cc
+mln_topo_center_only_iter_SOURCES = mln_topo_center_only_iter.cc
+mln_topo_adj_higher_dim_connected_n_face_iter_SOURCES = mln_topo_adj_higher_dim_connected_n_face_iter.cc
+mln_topo_algebraic_face_SOURCES = mln_topo_algebraic_face.cc
+mln_topo_n_faces_set_SOURCES = mln_topo_n_faces_set.cc
+mln_topo_essential_SOURCES = mln_topo_essential.cc
+mln_essential_1d_SOURCES = mln_essential_1d.cc
+mln_essential_routine_SOURCES = mln_essential_routine.cc
+mln_essential_3d_SOURCES = mln_essential_3d.cc
+mln_essential_2d_SOURCES = mln_essential_2d.cc
+mln_win_inter_SOURCES = mln_win_inter.cc
mln_win_backdiag2d_SOURCES = mln_win_backdiag2d.cc
-mln_win_diag2d_SOURCES = mln_win_diag2d.cc
+mln_win_segment1d_SOURCES = mln_win_segment1d.cc
+mln_win_cuboid3d_SOURCES = mln_win_cuboid3d.cc
mln_win_vline2d_SOURCES = mln_win_vline2d.cc
-mln_win_essential_SOURCES = mln_win_essential.cc
+mln_win_octagon2d_SOURCES = mln_win_octagon2d.cc
+mln_win_all_SOURCES = mln_win_all.cc
+mln_win_multiple_size_SOURCES = mln_win_multiple_size.cc
+mln_win_cube3d_SOURCES = mln_win_cube3d.cc
mln_win_shift_SOURCES = mln_win_shift.cc
mln_win_sym_SOURCES = mln_win_sym.cc
-mln_win_hline2d_SOURCES = mln_win_hline2d.cc
-mln_win_inter_SOURCES = mln_win_inter.cc
-mln_win_all_SOURCES = mln_win_all.cc
mln_win_diff_SOURCES = mln_win_diff.cc
-mln_win_rectangle2d_SOURCES = mln_win_rectangle2d.cc
mln_win_multiple_SOURCES = mln_win_multiple.cc
+mln_win_diag2d_SOURCES = mln_win_diag2d.cc
+mln_win_disk2d_SOURCES = mln_win_disk2d.cc
+mln_win_rectangle2d_SOURCES = mln_win_rectangle2d.cc
+mln_win_hline2d_SOURCES = mln_win_hline2d.cc
mln_win_line_SOURCES = mln_win_line.cc
-mln_win_multiple_size_SOURCES = mln_win_multiple_size.cc
-mln_win_cube3d_SOURCES = mln_win_cube3d.cc
-mln_core_category_SOURCES = mln_core_category.cc
-mln_core_pixter1d_SOURCES = mln_core_pixter1d.cc
-mln_core_routine_init_SOURCES = mln_core_routine_init.cc
-mln_core_routine_essential_SOURCES = mln_core_routine_essential.cc
-mln_core_routine_primary_SOURCES = mln_core_routine_primary.cc
-mln_core_routine_clone_SOURCES = mln_core_routine_clone.cc
-mln_core_routine_ops_SOURCES = mln_core_routine_ops.cc
-mln_core_routine_all_SOURCES = mln_core_routine_all.cc
-mln_core_routine_initialize_SOURCES = mln_core_routine_initialize.cc
-mln_core_routine_extend_SOURCES = mln_core_routine_extend.cc
-mln_core_routine_exact_SOURCES = mln_core_routine_exact.cc
-mln_core_trait_qlf_value_SOURCES = mln_core_trait_qlf_value.cc
-mln_core_trait_op_mult_SOURCES = mln_core_trait_op_mult.cc
-mln_core_trait_essential_SOURCES = mln_core_trait_essential.cc
-mln_core_trait_pixter_SOURCES = mln_core_trait_pixter.cc
-mln_core_trait_all_SOURCES = mln_core_trait_all.cc
-mln_core_a_point_of_SOURCES = mln_core_a_point_of.cc
-mln_core_def_coordf_SOURCES = mln_core_def_coordf.cc
-mln_core_def_essential_SOURCES = mln_core_def_essential.cc
+mln_win_essential_SOURCES = mln_win_essential.cc
+mln_core_clock_neighb_SOURCES = mln_core_clock_neighb.cc
+mln_core_pixter2d_SOURCES = mln_core_pixter2d.cc
mln_core_def_all_SOURCES = mln_core_def_all.cc
+mln_core_def_coordf_SOURCES = mln_core_def_coordf.cc
mln_core_def_coord_SOURCES = mln_core_def_coord.cc
-mln_core_dpoints_pixter_SOURCES = mln_core_dpoints_pixter.cc
+mln_core_def_essential_SOURCES = mln_core_def_essential.cc
+mln_core_site_set_box_SOURCES = mln_core_site_set_box.cc
+mln_core_site_set_p_vertices_SOURCES = mln_core_site_set_p_vertices.cc
+mln_core_site_set_p_vaccess_SOURCES = mln_core_site_set_p_vaccess.cc
+mln_core_site_set_p_if_piter_SOURCES = mln_core_site_set_p_if_piter.cc
+mln_core_site_set_p_run_piter_SOURCES = mln_core_site_set_p_run_piter.cc
+mln_core_site_set_p_key_SOURCES = mln_core_site_set_p_key.cc
+mln_core_site_set_p_double_SOURCES = mln_core_site_set_p_double.cc
+mln_core_site_set_p_complex_piter_SOURCES = mln_core_site_set_p_complex_piter.cc
+mln_core_site_set_p_complex_SOURCES = mln_core_site_set_p_complex.cc
+mln_core_site_set_p_image_SOURCES = mln_core_site_set_p_image.cc
+mln_core_site_set_attic_p_complex_faces_piter_SOURCES = mln_core_site_set_attic_p_complex_faces_piter.cc
+mln_core_site_set_attic_p_faces_piter_SOURCES = mln_core_site_set_attic_p_faces_piter.cc
+mln_core_site_set_p_priority_SOURCES = mln_core_site_set_p_priority.cc
+mln_core_site_set_p_set_of_SOURCES = mln_core_site_set_p_set_of.cc
+mln_core_site_set_all_SOURCES = mln_core_site_set_all.cc
+mln_core_site_set_p_edges_SOURCES = mln_core_site_set_p_edges.cc
+mln_core_site_set_box_piter_SOURCES = mln_core_site_set_box_piter.cc
+mln_core_site_set_p_faces_SOURCES = mln_core_site_set_p_faces.cc
+mln_core_site_set_p_set_SOURCES = mln_core_site_set_p_set.cc
+mln_core_site_set_p_queue_SOURCES = mln_core_site_set_p_queue.cc
+mln_core_site_set_p_if_SOURCES = mln_core_site_set_p_if.cc
+mln_core_site_set_p_mutable_array_of_SOURCES = mln_core_site_set_p_mutable_array_of.cc
+mln_core_site_set_p_edges_psite_SOURCES = mln_core_site_set_p_edges_psite.cc
+mln_core_site_set_complex_psite_SOURCES = mln_core_site_set_complex_psite.cc
+mln_core_site_set_p_run_SOURCES = mln_core_site_set_p_run.cc
+mln_core_site_set_p_n_faces_piter_SOURCES = mln_core_site_set_p_n_faces_piter.cc
+mln_core_site_set_p_centered_SOURCES = mln_core_site_set_p_centered.cc
+mln_core_site_set_p_bgraph_SOURCES = mln_core_site_set_p_bgraph.cc
+mln_core_site_set_p_bgraph_piter_SOURCES = mln_core_site_set_p_bgraph_piter.cc
+mln_core_site_set_p_array_SOURCES = mln_core_site_set_p_array.cc
+mln_core_site_set_p_vertices_psite_SOURCES = mln_core_site_set_p_vertices_psite.cc
+mln_core_site_set_p_line2d_SOURCES = mln_core_site_set_p_line2d.cc
+mln_core_site_set_p_queue_fast_SOURCES = mln_core_site_set_p_queue_fast.cc
+mln_core_site_set_p_graph_piter_SOURCES = mln_core_site_set_p_graph_piter.cc
+mln_core_site_set_essential_SOURCES = mln_core_site_set_essential.cc
mln_core_dpsites_piter_SOURCES = mln_core_dpsites_piter.cc
-mln_core_tags_SOURCES = mln_core_tags.cc
-mln_core_window_SOURCES = mln_core_window.cc
-mln_core_pixter2d_SOURCES = mln_core_pixter2d.cc
-mln_core_essential_SOURCES = mln_core_essential.cc
mln_core_w_window_SOURCES = mln_core_w_window.cc
-mln_core_alias_point2d_SOURCES = mln_core_alias_point2d.cc
-mln_core_alias_box2d_h_SOURCES = mln_core_alias_box2d_h.cc
-mln_core_alias_box2d_SOURCES = mln_core_alias_box2d.cc
-mln_core_alias_point2d_h_SOURCES = mln_core_alias_point2d_h.cc
-mln_core_alias_neighb3d_SOURCES = mln_core_alias_neighb3d.cc
-mln_core_alias_window1d_SOURCES = mln_core_alias_window1d.cc
-mln_core_alias_point3df_SOURCES = mln_core_alias_point3df.cc
-mln_core_alias_w_window2d_int_SOURCES = mln_core_alias_w_window2d_int.cc
-mln_core_alias_point1d_SOURCES = mln_core_alias_point1d.cc
-mln_core_alias_w_window3d_float_SOURCES = mln_core_alias_w_window3d_float.cc
-mln_core_alias_w_window1d_int_SOURCES = mln_core_alias_w_window1d_int.cc
-mln_core_alias_dpoint2d_h_SOURCES = mln_core_alias_dpoint2d_h.cc
-mln_core_alias_dpoint1d_SOURCES = mln_core_alias_dpoint1d.cc
-mln_core_alias_p_run2d_SOURCES = mln_core_alias_p_run2d.cc
-mln_core_alias_w_window1d_float_SOURCES = mln_core_alias_w_window1d_float.cc
-mln_core_alias_w_window3d_int_SOURCES = mln_core_alias_w_window3d_int.cc
-mln_core_alias_box3d_SOURCES = mln_core_alias_box3d.cc
-mln_core_alias_neighb1d_SOURCES = mln_core_alias_neighb1d.cc
-mln_core_alias_neighb2d_SOURCES = mln_core_alias_neighb2d.cc
-mln_core_alias_w_window2d_float_SOURCES = mln_core_alias_w_window2d_float.cc
-mln_core_alias_window2d_SOURCES = mln_core_alias_window2d.cc
-mln_core_alias_bin_2complex_image3df_SOURCES = mln_core_alias_bin_2complex_image3df.cc
-mln_core_alias_window3d_SOURCES = mln_core_alias_window3d.cc
-mln_core_alias_point3d_SOURCES = mln_core_alias_point3d.cc
-mln_core_alias_dpoint3d_SOURCES = mln_core_alias_dpoint3d.cc
-mln_core_alias_dpoint2d_SOURCES = mln_core_alias_dpoint2d.cc
-mln_core_alias_box1d_SOURCES = mln_core_alias_box1d.cc
-mln_core_alias_p_runs2d_SOURCES = mln_core_alias_p_runs2d.cc
-mln_core_point_SOURCES = mln_core_point.cc
-mln_core_clock_neighb_SOURCES = mln_core_clock_neighb.cc
-mln_core_neighb_SOURCES = mln_core_neighb.cc
-mln_core_dpoint_SOURCES = mln_core_dpoint.cc
-mln_core_var_SOURCES = mln_core_var.cc
-mln_core_faces_psite_SOURCES = mln_core_faces_psite.cc
-mln_core_contract_SOURCES = mln_core_contract.cc
-mln_core_macros_SOURCES = mln_core_macros.cc
-mln_core_all_SOURCES = mln_core_all.cc
-mln_core_internal_image_primary_SOURCES = mln_core_internal_image_primary.cc
-mln_core_internal_window_base_SOURCES = mln_core_internal_window_base.cc
-mln_core_internal_data_SOURCES = mln_core_internal_data.cc
-mln_core_internal_site_set_impl_SOURCES = mln_core_internal_site_set_impl.cc
-mln_core_internal_piter_adaptor_SOURCES = mln_core_internal_piter_adaptor.cc
-mln_core_internal_image_morpher_SOURCES = mln_core_internal_image_morpher.cc
+mln_core_grids_SOURCES = mln_core_grids.cc
+mln_core_dpoints_pixter_SOURCES = mln_core_dpoints_pixter.cc
+mln_core_internal_graph_psite_base_SOURCES = mln_core_internal_graph_psite_base.cc
+mln_core_internal_run_image_SOURCES = mln_core_internal_run_image.cc
+mln_core_internal_pixel_impl_SOURCES = mln_core_internal_pixel_impl.cc
+mln_core_internal_site_set_base_SOURCES = mln_core_internal_site_set_base.cc
mln_core_internal_image_value_morpher_SOURCES = mln_core_internal_image_value_morpher.cc
-mln_core_internal_complex_window_p_base_SOURCES = mln_core_internal_complex_window_p_base.cc
+mln_core_internal_site_iterator_base_SOURCES = mln_core_internal_site_iterator_base.cc
+mln_core_internal_complex_neighborhood_base_SOURCES = mln_core_internal_complex_neighborhood_base.cc
+mln_core_internal_site_relative_iterator_base_SOURCES = mln_core_internal_site_relative_iterator_base.cc
+mln_core_internal_site_set_impl_SOURCES = mln_core_internal_site_set_impl.cc
+mln_core_internal_exact_SOURCES = mln_core_internal_exact.cc
mln_core_internal_p_complex_piter_base_SOURCES = mln_core_internal_p_complex_piter_base.cc
-mln_core_internal_site_set_base_SOURCES = mln_core_internal_site_set_base.cc
-mln_core_internal_site_set_iterator_base_SOURCES = mln_core_internal_site_set_iterator_base.cc
-mln_core_internal_set_of_SOURCES = mln_core_internal_set_of.cc
-mln_core_internal_check_image_fastest_SOURCES = mln_core_internal_check_image_fastest.cc
-mln_core_internal_check_image_all_SOURCES = mln_core_internal_check_image_all.cc
-mln_core_internal_image_if_base_SOURCES = mln_core_internal_image_if_base.cc
+mln_core_internal_pixel_iterator_base_SOURCES = mln_core_internal_pixel_iterator_base.cc
mln_core_internal_classical_window_base_SOURCES = mln_core_internal_classical_window_base.cc
-mln_core_internal_graph_relative_piter_SOURCES = mln_core_internal_graph_relative_piter.cc
+mln_core_internal_image_if_base_SOURCES = mln_core_internal_image_if_base.cc
+mln_core_internal_data_SOURCES = mln_core_internal_data.cc
mln_core_internal_force_exact_SOURCES = mln_core_internal_force_exact.cc
-mln_core_internal_pixel_iterator_base_SOURCES = mln_core_internal_pixel_iterator_base.cc
+mln_core_internal_image_base_SOURCES = mln_core_internal_image_base.cc
+mln_core_internal_check_image_fastest_SOURCES = mln_core_internal_check_image_fastest.cc
+mln_core_internal_check_image_all_SOURCES = mln_core_internal_check_image_all.cc
mln_core_internal_line_graph_vicinity_piter_SOURCES = mln_core_internal_line_graph_vicinity_piter.cc
-mln_core_internal_coord_impl_SOURCES = mln_core_internal_coord_impl.cc
-mln_core_internal_pixel_impl_SOURCES = mln_core_internal_pixel_impl.cc
-mln_core_internal_site_iterator_base_SOURCES = mln_core_internal_site_iterator_base.cc
-mln_core_internal_run_image_SOURCES = mln_core_internal_run_image.cc
mln_core_internal_fixme_SOURCES = mln_core_internal_fixme.cc
-mln_core_internal_pseudo_site_base_SOURCES = mln_core_internal_pseudo_site_base.cc
mln_core_internal_morpher_lvalue_SOURCES = mln_core_internal_morpher_lvalue.cc
mln_core_internal_image_domain_morpher_SOURCES = mln_core_internal_image_domain_morpher.cc
-mln_core_internal_complex_neighborhood_base_SOURCES = mln_core_internal_complex_neighborhood_base.cc
-mln_core_internal_image_identity_SOURCES = mln_core_internal_image_identity.cc
-mln_core_internal_geom_bbox_SOURCES = mln_core_internal_geom_bbox.cc
+mln_core_internal_image_primary_SOURCES = mln_core_internal_image_primary.cc
+mln_core_internal_set_of_SOURCES = mln_core_internal_set_of.cc
+mln_core_internal_complex_window_p_base_SOURCES = mln_core_internal_complex_window_p_base.cc
+mln_core_internal_graph_relative_piter_SOURCES = mln_core_internal_graph_relative_piter.cc
+mln_core_internal_graph_window_base_SOURCES = mln_core_internal_graph_window_base.cc
+mln_core_internal_piter_adaptor_SOURCES = mln_core_internal_piter_adaptor.cc
mln_core_internal_weighted_window_base_SOURCES = mln_core_internal_weighted_window_base.cc
mln_core_internal_neighborhood_base_SOURCES = mln_core_internal_neighborhood_base.cc
-mln_core_internal_site_relative_iterator_base_SOURCES = mln_core_internal_site_relative_iterator_base.cc
-mln_core_internal_exact_SOURCES = mln_core_internal_exact.cc
+mln_core_internal_image_morpher_SOURCES = mln_core_internal_image_morpher.cc
+mln_core_internal_coord_impl_SOURCES = mln_core_internal_coord_impl.cc
+mln_core_internal_geom_bbox_SOURCES = mln_core_internal_geom_bbox.cc
+mln_core_internal_image_identity_SOURCES = mln_core_internal_image_identity.cc
+mln_core_internal_pseudo_site_base_SOURCES = mln_core_internal_pseudo_site_base.cc
+mln_core_internal_window_base_SOURCES = mln_core_internal_window_base.cc
mln_core_internal_box_impl_SOURCES = mln_core_internal_box_impl.cc
-mln_core_internal_image_base_SOURCES = mln_core_internal_image_base.cc
-mln_core_clock_neighb2d_SOURCES = mln_core_clock_neighb2d.cc
-mln_core_image_obased_rle_encode_SOURCES = mln_core_image_obased_rle_encode.cc
-mln_core_image_plain_SOURCES = mln_core_image_plain.cc
-mln_core_image_decorated_image_SOURCES = mln_core_image_decorated_image.cc
-mln_core_image_graph_image_SOURCES = mln_core_image_graph_image.cc
-mln_core_image_complex_neighborhood_piter_SOURCES = mln_core_image_complex_neighborhood_piter.cc
-mln_core_image_graph_window_piter_SOURCES = mln_core_image_graph_window_piter.cc
-mln_core_image_hexa_piter_SOURCES = mln_core_image_hexa_piter.cc
-mln_core_image_rle_encode_SOURCES = mln_core_image_rle_encode.cc
-mln_core_image_translate_image_SOURCES = mln_core_image_translate_image.cc
-mln_core_image_extension_val_SOURCES = mln_core_image_extension_val.cc
-mln_core_image_line_graph_neighborhood_piter_SOURCES = mln_core_image_line_graph_neighborhood_piter.cc
-mln_core_image_tr_image_SOURCES = mln_core_image_tr_image.cc
-mln_core_image_fi_adaptor_SOURCES = mln_core_image_fi_adaptor.cc
-mln_core_image_graph_elt_neighborhood_SOURCES = mln_core_image_graph_elt_neighborhood.cc
-mln_core_image_extension_ima_SOURCES = mln_core_image_extension_ima.cc
-mln_core_image_sparse_encode_SOURCES = mln_core_image_sparse_encode.cc
-mln_core_image_lazy_image_SOURCES = mln_core_image_lazy_image.cc
-mln_core_image_hexa_SOURCES = mln_core_image_hexa.cc
-mln_core_image_flat_image_SOURCES = mln_core_image_flat_image.cc
-mln_core_image_graph_neighborhood_piter_SOURCES = mln_core_image_graph_neighborhood_piter.cc
-mln_core_image_essential_SOURCES = mln_core_image_essential.cc
-mln_core_image_value_enc_image_SOURCES = mln_core_image_value_enc_image.cc
-mln_core_image_image_if_SOURCES = mln_core_image_image_if.cc
-mln_core_image_complex_image_SOURCES = mln_core_image_complex_image.cc
-mln_core_image_image2d_h_SOURCES = mln_core_image_image2d_h.cc
-mln_core_image_rle_image_SOURCES = mln_core_image_rle_image.cc
-mln_core_image_complex_window_piter_SOURCES = mln_core_image_complex_window_piter.cc
-mln_core_image_mono_rle_image_SOURCES = mln_core_image_mono_rle_image.cc
-mln_core_image_graph_elt_window_SOURCES = mln_core_image_graph_elt_window.cc
-mln_core_image_interpolated_SOURCES = mln_core_image_interpolated.cc
-mln_core_image_image1d_SOURCES = mln_core_image_image1d.cc
-mln_core_image_value_encode_SOURCES = mln_core_image_value_encode.cc
-mln_core_image_mono_obased_rle_image_SOURCES = mln_core_image_mono_obased_rle_image.cc
-mln_core_image_t_image_SOURCES = mln_core_image_t_image.cc
-mln_core_image_image2d_SOURCES = mln_core_image_image2d.cc
-mln_core_image_cast_image_SOURCES = mln_core_image_cast_image.cc
-mln_core_image_obased_rle_image_SOURCES = mln_core_image_obased_rle_image.cc
-mln_core_image_line_graph_window_piter_SOURCES = mln_core_image_line_graph_window_piter.cc
-mln_core_image_all_SOURCES = mln_core_image_all.cc
-mln_core_image_complex_windows_SOURCES = mln_core_image_complex_windows.cc
-mln_core_image_safe_SOURCES = mln_core_image_safe.cc
-mln_core_image_extended_SOURCES = mln_core_image_extended.cc
-mln_core_image_sparse_image_SOURCES = mln_core_image_sparse_image.cc
-mln_core_image_bgraph_image_SOURCES = mln_core_image_bgraph_image.cc
-mln_core_image_image3d_SOURCES = mln_core_image_image3d.cc
-mln_core_image_bgraph_psite_SOURCES = mln_core_image_bgraph_psite.cc
-mln_core_image_sub_image_if_SOURCES = mln_core_image_sub_image_if.cc
-mln_core_image_line_graph_elt_window_SOURCES = mln_core_image_line_graph_elt_window.cc
-mln_core_image_line_graph_psite_SOURCES = mln_core_image_line_graph_psite.cc
-mln_core_image_tr_mesh_SOURCES = mln_core_image_tr_mesh.cc
-mln_core_image_sub_image_SOURCES = mln_core_image_sub_image.cc
-mln_core_image_line_graph_elt_neighborhood_SOURCES = mln_core_image_line_graph_elt_neighborhood.cc
-mln_core_image_ch_piter_SOURCES = mln_core_image_ch_piter.cc
-mln_core_image_extension_fun_SOURCES = mln_core_image_extension_fun.cc
-mln_core_image_mono_obased_rle_encode_SOURCES = mln_core_image_mono_obased_rle_encode.cc
-mln_core_image_line_graph_image_SOURCES = mln_core_image_line_graph_image.cc
-mln_core_image_mono_rle_encode_SOURCES = mln_core_image_mono_rle_encode.cc
-mln_core_image_complex_neighborhoods_SOURCES = mln_core_image_complex_neighborhoods.cc
-mln_core_pixter3d_SOURCES = mln_core_pixter3d.cc
-mln_core_concept_site_SOURCES = mln_core_concept_site.cc
-mln_core_concept_value_SOURCES = mln_core_concept_value.cc
-mln_core_concept_gdpoint_SOURCES = mln_core_concept_gdpoint.cc
-mln_core_concept_pseudo_site_SOURCES = mln_core_concept_pseudo_site.cc
-mln_core_concept_delta_point_site_SOURCES = mln_core_concept_delta_point_site.cc
-mln_core_concept_site_set_SOURCES = mln_core_concept_site_set.cc
-mln_core_concept_value_set_SOURCES = mln_core_concept_value_set.cc
-mln_core_concept_gpoint_SOURCES = mln_core_concept_gpoint.cc
+mln_core_internal_graph_neighborhood_base_SOURCES = mln_core_internal_graph_neighborhood_base.cc
+mln_core_internal_site_set_iterator_base_SOURCES = mln_core_internal_site_set_iterator_base.cc
+mln_core_contract_SOURCES = mln_core_contract.cc
+mln_core_all_SOURCES = mln_core_all.cc
+mln_core_point_SOURCES = mln_core_point.cc
+mln_core_neighb_SOURCES = mln_core_neighb.cc
+mln_core_routine_initialize_SOURCES = mln_core_routine_initialize.cc
+mln_core_routine_primary_SOURCES = mln_core_routine_primary.cc
+mln_core_routine_init_SOURCES = mln_core_routine_init.cc
+mln_core_routine_ops_SOURCES = mln_core_routine_ops.cc
+mln_core_routine_all_SOURCES = mln_core_routine_all.cc
+mln_core_routine_clone_SOURCES = mln_core_routine_clone.cc
+mln_core_routine_exact_SOURCES = mln_core_routine_exact.cc
+mln_core_routine_extend_SOURCES = mln_core_routine_extend.cc
+mln_core_routine_essential_SOURCES = mln_core_routine_essential.cc
+mln_core_trait_op_mult_SOURCES = mln_core_trait_op_mult.cc
+mln_core_trait_all_SOURCES = mln_core_trait_all.cc
+mln_core_trait_pixter_SOURCES = mln_core_trait_pixter.cc
+mln_core_trait_qlf_value_SOURCES = mln_core_trait_qlf_value.cc
+mln_core_trait_essential_SOURCES = mln_core_trait_essential.cc
+mln_core_pixter1d_SOURCES = mln_core_pixter1d.cc
+mln_core_category_SOURCES = mln_core_category.cc
+mln_core_macros_SOURCES = mln_core_macros.cc
+mln_core_box_runstart_piter_SOURCES = mln_core_box_runstart_piter.cc
+mln_core_tags_SOURCES = mln_core_tags.cc
+mln_core_dpoint_SOURCES = mln_core_dpoint.cc
+mln_core_alias_dpoint2d_h_SOURCES = mln_core_alias_dpoint2d_h.cc
+mln_core_alias_p_run2d_SOURCES = mln_core_alias_p_run2d.cc
+mln_core_alias_point3d_SOURCES = mln_core_alias_point3d.cc
+mln_core_alias_neighb3d_SOURCES = mln_core_alias_neighb3d.cc
+mln_core_alias_window3d_SOURCES = mln_core_alias_window3d.cc
+mln_core_alias_neighb2d_SOURCES = mln_core_alias_neighb2d.cc
+mln_core_alias_complex_image_SOURCES = mln_core_alias_complex_image.cc
+mln_core_alias_w_window1d_float_SOURCES = mln_core_alias_w_window1d_float.cc
+mln_core_alias_neighb1d_SOURCES = mln_core_alias_neighb1d.cc
+mln_core_alias_w_window2d_float_SOURCES = mln_core_alias_w_window2d_float.cc
+mln_core_alias_w_window2d_int_SOURCES = mln_core_alias_w_window2d_int.cc
+mln_core_alias_box1d_SOURCES = mln_core_alias_box1d.cc
+mln_core_alias_box2d_SOURCES = mln_core_alias_box2d.cc
+mln_core_alias_window1d_SOURCES = mln_core_alias_window1d.cc
+mln_core_alias_point1d_SOURCES = mln_core_alias_point1d.cc
+mln_core_alias_box3d_SOURCES = mln_core_alias_box3d.cc
+mln_core_alias_dpoint3d_SOURCES = mln_core_alias_dpoint3d.cc
+mln_core_alias_complex_geometry_SOURCES = mln_core_alias_complex_geometry.cc
+mln_core_alias_w_window3d_float_SOURCES = mln_core_alias_w_window3d_float.cc
+mln_core_alias_box2d_h_SOURCES = mln_core_alias_box2d_h.cc
+mln_core_alias_point2d_SOURCES = mln_core_alias_point2d.cc
+mln_core_alias_window2d_SOURCES = mln_core_alias_window2d.cc
+mln_core_alias_p_runs2d_SOURCES = mln_core_alias_p_runs2d.cc
+mln_core_alias_point3df_SOURCES = mln_core_alias_point3df.cc
+mln_core_alias_dpoint1d_SOURCES = mln_core_alias_dpoint1d.cc
+mln_core_alias_w_window3d_int_SOURCES = mln_core_alias_w_window3d_int.cc
+mln_core_alias_dpoint2d_SOURCES = mln_core_alias_dpoint2d.cc
+mln_core_alias_w_window1d_int_SOURCES = mln_core_alias_w_window1d_int.cc
+mln_core_alias_point2d_h_SOURCES = mln_core_alias_point2d_h.cc
+mln_core_window_SOURCES = mln_core_window.cc
mln_core_concept_site_proxy_SOURCES = mln_core_concept_site_proxy.cc
-mln_core_concept_window_SOURCES = mln_core_concept_window.cc
-mln_core_concept_mesh_SOURCES = mln_core_concept_mesh.cc
+mln_core_concept_point_site_SOURCES = mln_core_concept_point_site.cc
mln_core_concept_box_SOURCES = mln_core_concept_box.cc
+mln_core_concept_generalized_pixel_SOURCES = mln_core_concept_generalized_pixel.cc
mln_core_concept_graph_SOURCES = mln_core_concept_graph.cc
-mln_core_concept_point_SOURCES = mln_core_concept_point.cc
-mln_core_concept_value_iterator_SOURCES = mln_core_concept_value_iterator.cc
-mln_core_concept_doc_site_set_SOURCES = mln_core_concept_doc_site_set.cc
+mln_core_concept_iterator_SOURCES = mln_core_concept_iterator.cc
+mln_core_concept_doc_point_site_SOURCES = mln_core_concept_doc_point_site.cc
+mln_core_concept_doc_box_SOURCES = mln_core_concept_doc_box.cc
+mln_core_concept_doc_generalized_pixel_SOURCES = mln_core_concept_doc_generalized_pixel.cc
+mln_core_concept_doc_iterator_SOURCES = mln_core_concept_doc_iterator.cc
mln_core_concept_doc_image_fastest_SOURCES = mln_core_concept_doc_image_fastest.cc
+mln_core_concept_doc_image_SOURCES = mln_core_concept_doc_image.cc
mln_core_concept_doc_value_set_SOURCES = mln_core_concept_doc_value_set.cc
-mln_core_concept_doc_window_SOURCES = mln_core_concept_doc_window.cc
-mln_core_concept_doc_box_SOURCES = mln_core_concept_doc_box.cc
-mln_core_concept_doc_value_iterator_SOURCES = mln_core_concept_doc_value_iterator.cc
mln_core_concept_doc_weighted_window_SOURCES = mln_core_concept_doc_weighted_window.cc
-mln_core_concept_doc_image_SOURCES = mln_core_concept_doc_image.cc
+mln_core_concept_doc_pixel_iterator_SOURCES = mln_core_concept_doc_pixel_iterator.cc
+mln_core_concept_doc_value_iterator_SOURCES = mln_core_concept_doc_value_iterator.cc
mln_core_concept_doc_dpoint_SOURCES = mln_core_concept_doc_dpoint.cc
-mln_core_concept_doc_iterator_SOURCES = mln_core_concept_doc_iterator.cc
+mln_core_concept_doc_window_SOURCES = mln_core_concept_doc_window.cc
mln_core_concept_doc_accumulator_SOURCES = mln_core_concept_doc_accumulator.cc
+mln_core_concept_doc_site_set_SOURCES = mln_core_concept_doc_site_set.cc
+mln_core_concept_doc_object_SOURCES = mln_core_concept_doc_object.cc
mln_core_concept_doc_neighborhood_SOURCES = mln_core_concept_doc_neighborhood.cc
-mln_core_concept_doc_pixel_iterator_SOURCES = mln_core_concept_doc_pixel_iterator.cc
mln_core_concept_doc_point_iterator_SOURCES = mln_core_concept_doc_point_iterator.cc
-mln_core_concept_doc_object_SOURCES = mln_core_concept_doc_object.cc
-mln_core_concept_doc_generalized_pixel_SOURCES = mln_core_concept_doc_generalized_pixel.cc
-mln_core_concept_doc_point_site_SOURCES = mln_core_concept_doc_point_site.cc
-mln_core_concept_weighted_window_SOURCES = mln_core_concept_weighted_window.cc
+mln_core_concept_pseudo_site_SOURCES = mln_core_concept_pseudo_site.cc
mln_core_concept_image_SOURCES = mln_core_concept_image.cc
-mln_core_concept_function_SOURCES = mln_core_concept_function.cc
-mln_core_concept_browsing_SOURCES = mln_core_concept_browsing.cc
-mln_core_concept_dpoint_SOURCES = mln_core_concept_dpoint.cc
-mln_core_concept_iterator_SOURCES = mln_core_concept_iterator.cc
-mln_core_concept_meta_accumulator_SOURCES = mln_core_concept_meta_accumulator.cc
-mln_core_concept_accumulator_SOURCES = mln_core_concept_accumulator.cc
+mln_core_concept_value_set_SOURCES = mln_core_concept_value_set.cc
mln_core_concept_proxy_SOURCES = mln_core_concept_proxy.cc
-mln_core_concept_neighborhood_SOURCES = mln_core_concept_neighborhood.cc
-mln_core_concept_pixel_iterator_SOURCES = mln_core_concept_pixel_iterator.cc
-mln_core_concept_literal_SOURCES = mln_core_concept_literal.cc
+mln_core_concept_site_SOURCES = mln_core_concept_site.cc
+mln_core_concept_weighted_window_SOURCES = mln_core_concept_weighted_window.cc
+mln_core_concept_gpoint_SOURCES = mln_core_concept_gpoint.cc
mln_core_concept_site_iterator_SOURCES = mln_core_concept_site_iterator.cc
+mln_core_concept_point_SOURCES = mln_core_concept_point.cc
+mln_core_concept_literal_SOURCES = mln_core_concept_literal.cc
+mln_core_concept_pixel_iterator_SOURCES = mln_core_concept_pixel_iterator.cc
+mln_core_concept_value_iterator_SOURCES = mln_core_concept_value_iterator.cc
+mln_core_concept_meta_accumulator_SOURCES = mln_core_concept_meta_accumulator.cc
+mln_core_concept_gdpoint_SOURCES = mln_core_concept_gdpoint.cc
mln_core_concept_regular_grid_SOURCES = mln_core_concept_regular_grid.cc
+mln_core_concept_mesh_SOURCES = mln_core_concept_mesh.cc
+mln_core_concept_dpoint_SOURCES = mln_core_concept_dpoint.cc
+mln_core_concept_function_SOURCES = mln_core_concept_function.cc
+mln_core_concept_window_SOURCES = mln_core_concept_window.cc
+mln_core_concept_value_SOURCES = mln_core_concept_value.cc
+mln_core_concept_accumulator_SOURCES = mln_core_concept_accumulator.cc
+mln_core_concept_site_set_SOURCES = mln_core_concept_site_set.cc
mln_core_concept_object_SOURCES = mln_core_concept_object.cc
-mln_core_concept_generalized_pixel_SOURCES = mln_core_concept_generalized_pixel.cc
-mln_core_concept_point_site_SOURCES = mln_core_concept_point_site.cc
-mln_core_site_set_p_array_SOURCES = mln_core_site_set_p_array.cc
-mln_core_site_set_p_priority_SOURCES = mln_core_site_set_p_priority.cc
-mln_core_site_set_p_bgraph_SOURCES = mln_core_site_set_p_bgraph.cc
-mln_core_site_set_p_queue_SOURCES = mln_core_site_set_p_queue.cc
-mln_core_site_set_p_double_SOURCES = mln_core_site_set_p_double.cc
-mln_core_site_set_p_set_SOURCES = mln_core_site_set_p_set.cc
-mln_core_site_set_p_complex_SOURCES = mln_core_site_set_p_complex.cc
-mln_core_site_set_p_graph_piter_SOURCES = mln_core_site_set_p_graph_piter.cc
-mln_core_site_set_p_n_faces_piter_SOURCES = mln_core_site_set_p_n_faces_piter.cc
-mln_core_site_set_p_set_of_SOURCES = mln_core_site_set_p_set_of.cc
-mln_core_site_set_p_line_graph_SOURCES = mln_core_site_set_p_line_graph.cc
-mln_core_site_set_p_vaccess_SOURCES = mln_core_site_set_p_vaccess.cc
-mln_core_site_set_box_piter_SOURCES = mln_core_site_set_box_piter.cc
-mln_core_site_set_complex_psite_SOURCES = mln_core_site_set_complex_psite.cc
-mln_core_site_set_p_run_SOURCES = mln_core_site_set_p_run.cc
-mln_core_site_set_essential_SOURCES = mln_core_site_set_essential.cc
-mln_core_site_set_box_SOURCES = mln_core_site_set_box.cc
-mln_core_site_set_p_line2d_SOURCES = mln_core_site_set_p_line2d.cc
-mln_core_site_set_p_mutable_array_of_SOURCES = mln_core_site_set_p_mutable_array_of.cc
-mln_core_site_set_p_run_piter_SOURCES = mln_core_site_set_p_run_piter.cc
-mln_core_site_set_p_faces_SOURCES = mln_core_site_set_p_faces.cc
-mln_core_site_set_p_if_piter_SOURCES = mln_core_site_set_p_if_piter.cc
-mln_core_site_set_all_SOURCES = mln_core_site_set_all.cc
-mln_core_site_set_p_edges_SOURCES = mln_core_site_set_p_edges.cc
-mln_core_site_set_p_bgraph_piter_SOURCES = mln_core_site_set_p_bgraph_piter.cc
-mln_core_site_set_p_centered_SOURCES = mln_core_site_set_p_centered.cc
-mln_core_site_set_p_key_SOURCES = mln_core_site_set_p_key.cc
-mln_core_site_set_p_vertices_SOURCES = mln_core_site_set_p_vertices.cc
-mln_core_site_set_p_if_SOURCES = mln_core_site_set_p_if.cc
-mln_core_site_set_p_queue_fast_SOURCES = mln_core_site_set_p_queue_fast.cc
-mln_core_site_set_p_image_SOURCES = mln_core_site_set_p_image.cc
-mln_core_site_set_p_line_graph_piter_SOURCES = mln_core_site_set_p_line_graph_piter.cc
-mln_core_site_set_p_complex_piter_SOURCES = mln_core_site_set_p_complex_piter.cc
-mln_core_site_set_p_graph_SOURCES = mln_core_site_set_p_graph.cc
-mln_core_site_set_attic_p_faces_piter_SOURCES = mln_core_site_set_attic_p_faces_piter.cc
-mln_core_site_set_attic_p_complex_faces_piter_SOURCES = mln_core_site_set_attic_p_complex_faces_piter.cc
+mln_core_concept_delta_point_site_SOURCES = mln_core_concept_delta_point_site.cc
+mln_core_concept_neighborhood_SOURCES = mln_core_concept_neighborhood.cc
+mln_core_concept_browsing_SOURCES = mln_core_concept_browsing.cc
mln_core_pixel_SOURCES = mln_core_pixel.cc
-mln_core_box_runstart_piter_SOURCES = mln_core_box_runstart_piter.cc
-mln_core_grids_SOURCES = mln_core_grids.cc
-mln_io_abort_SOURCES = mln_io_abort.cc
-mln_io_pbm_all_SOURCES = mln_io_pbm_all.cc
-mln_io_pbm_load_SOURCES = mln_io_pbm_load.cc
-mln_io_pbm_save_SOURCES = mln_io_pbm_save.cc
-mln_io_essential_SOURCES = mln_io_essential.cc
-mln_io_off_all_SOURCES = mln_io_off_all.cc
-mln_io_off_load_SOURCES = mln_io_off_load.cc
-mln_io_off_save_SOURCES = mln_io_off_save.cc
-mln_io_pfm_all_SOURCES = mln_io_pfm_all.cc
-mln_io_pfm_load_SOURCES = mln_io_pfm_load.cc
-mln_io_pfm_save_SOURCES = mln_io_pfm_save.cc
-mln_io_pgm_all_SOURCES = mln_io_pgm_all.cc
+mln_core_clock_neighb2d_SOURCES = mln_core_clock_neighb2d.cc
+mln_core_pixter3d_SOURCES = mln_core_pixter3d.cc
+mln_core_image_obased_rle_encode_SOURCES = mln_core_image_obased_rle_encode.cc
+mln_core_image_plain_SOURCES = mln_core_image_plain.cc
+mln_core_image_translate_image_SOURCES = mln_core_image_translate_image.cc
+mln_core_image_graph_image_SOURCES = mln_core_image_graph_image.cc
+mln_core_image_image3d_SOURCES = mln_core_image_image3d.cc
+mln_core_image_decorated_image_SOURCES = mln_core_image_decorated_image.cc
+mln_core_image_extension_ima_SOURCES = mln_core_image_extension_ima.cc
+mln_core_image_flat_image_SOURCES = mln_core_image_flat_image.cc
+mln_core_image_complex_neighborhood_piter_SOURCES = mln_core_image_complex_neighborhood_piter.cc
+mln_core_image_tr_mesh_SOURCES = mln_core_image_tr_mesh.cc
+mln_core_image_graph_elt_window_SOURCES = mln_core_image_graph_elt_window.cc
+mln_core_image_obased_rle_image_SOURCES = mln_core_image_obased_rle_image.cc
+mln_core_image_mono_obased_rle_image_SOURCES = mln_core_image_mono_obased_rle_image.cc
+mln_core_image_interpolated_SOURCES = mln_core_image_interpolated.cc
+mln_core_image_graph_neighborhood_piter_SOURCES = mln_core_image_graph_neighborhood_piter.cc
+mln_core_image_lazy_image_SOURCES = mln_core_image_lazy_image.cc
+mln_core_image_t_image_SOURCES = mln_core_image_t_image.cc
+mln_core_image_hexa_piter_SOURCES = mln_core_image_hexa_piter.cc
+mln_core_image_value_enc_image_SOURCES = mln_core_image_value_enc_image.cc
+mln_core_image_graph_elt_neighborhood_SOURCES = mln_core_image_graph_elt_neighborhood.cc
+mln_core_image_sub_image_if_SOURCES = mln_core_image_sub_image_if.cc
+mln_core_image_all_SOURCES = mln_core_image_all.cc
+mln_core_image_mono_rle_image_SOURCES = mln_core_image_mono_rle_image.cc
+mln_core_image_complex_image_SOURCES = mln_core_image_complex_image.cc
+mln_core_image_cast_image_SOURCES = mln_core_image_cast_image.cc
+mln_core_image_rle_encode_SOURCES = mln_core_image_rle_encode.cc
+mln_core_image_complex_window_piter_SOURCES = mln_core_image_complex_window_piter.cc
+mln_core_image_tr_image_SOURCES = mln_core_image_tr_image.cc
+mln_core_image_sub_image_SOURCES = mln_core_image_sub_image.cc
+mln_core_image_rle_image_SOURCES = mln_core_image_rle_image.cc
+mln_core_image_line_graph_elt_window_SOURCES = mln_core_image_line_graph_elt_window.cc
+mln_core_image_mono_rle_encode_SOURCES = mln_core_image_mono_rle_encode.cc
+mln_core_image_bgraph_psite_SOURCES = mln_core_image_bgraph_psite.cc
+mln_core_image_sparse_image_SOURCES = mln_core_image_sparse_image.cc
+mln_core_image_bgraph_image_SOURCES = mln_core_image_bgraph_image.cc
+mln_core_image_complex_neighborhoods_SOURCES = mln_core_image_complex_neighborhoods.cc
+mln_core_image_graph_window_piter_SOURCES = mln_core_image_graph_window_piter.cc
+mln_core_image_sparse_encode_SOURCES = mln_core_image_sparse_encode.cc
+mln_core_image_safe_SOURCES = mln_core_image_safe.cc
+mln_core_image_extension_fun_SOURCES = mln_core_image_extension_fun.cc
+mln_core_image_image1d_SOURCES = mln_core_image_image1d.cc
+mln_core_image_extension_val_SOURCES = mln_core_image_extension_val.cc
+mln_core_image_image_if_SOURCES = mln_core_image_image_if.cc
+mln_core_image_hexa_SOURCES = mln_core_image_hexa.cc
+mln_core_image_line_graph_elt_neighborhood_SOURCES = mln_core_image_line_graph_elt_neighborhood.cc
+mln_core_image_extended_SOURCES = mln_core_image_extended.cc
+mln_core_image_image2d_h_SOURCES = mln_core_image_image2d_h.cc
+mln_core_image_line_graph_neighborhood_piter_SOURCES = mln_core_image_line_graph_neighborhood_piter.cc
+mln_core_image_line_graph_window_piter_SOURCES = mln_core_image_line_graph_window_piter.cc
+mln_core_image_image2d_SOURCES = mln_core_image_image2d.cc
+mln_core_image_ch_piter_SOURCES = mln_core_image_ch_piter.cc
+mln_core_image_complex_windows_SOURCES = mln_core_image_complex_windows.cc
+mln_core_image_fi_adaptor_SOURCES = mln_core_image_fi_adaptor.cc
+mln_core_image_mono_obased_rle_encode_SOURCES = mln_core_image_mono_obased_rle_encode.cc
+mln_core_image_line_graph_image_SOURCES = mln_core_image_line_graph_image.cc
+mln_core_image_value_encode_SOURCES = mln_core_image_value_encode.cc
+mln_core_image_essential_SOURCES = mln_core_image_essential.cc
+mln_core_a_point_of_SOURCES = mln_core_a_point_of.cc
+mln_core_var_SOURCES = mln_core_var.cc
+mln_core_essential_SOURCES = mln_core_essential.cc
+mln_core_faces_psite_SOURCES = mln_core_faces_psite.cc
+mln_labeling_blobs_SOURCES = mln_labeling_blobs.cc
+mln_labeling_background_SOURCES = mln_labeling_background.cc
+mln_labeling_relabel_SOURCES = mln_labeling_relabel.cc
+mln_labeling_all_SOURCES = mln_labeling_all.cc
+mln_labeling_level_SOURCES = mln_labeling_level.cc
+mln_labeling_flat_zones_SOURCES = mln_labeling_flat_zones.cc
+mln_labeling_foreground_SOURCES = mln_labeling_foreground.cc
+mln_labeling_regional_maxima_SOURCES = mln_labeling_regional_maxima.cc
+mln_labeling_compute_SOURCES = mln_labeling_compute.cc
+mln_labeling_regional_minima_SOURCES = mln_labeling_regional_minima.cc
+mln_labeling_essential_SOURCES = mln_labeling_essential.cc
+mln_test_predicate_SOURCES = mln_test_predicate.cc
+mln_test_all_SOURCES = mln_test_all.cc
+mln_test_positive_SOURCES = mln_test_positive.cc
+mln_test_essential_SOURCES = mln_test_essential.cc
+mln_transform_distance_geodesic_SOURCES = mln_transform_distance_geodesic.cc
+mln_transform_all_SOURCES = mln_transform_all.cc
+mln_transform_influence_zone_geodesic_SOURCES = mln_transform_influence_zone_geodesic.cc
+mln_transform_distance_SOURCES = mln_transform_distance.cc
+mln_transform_essential_SOURCES = mln_transform_essential.cc
+mln_arith_includes_SOURCES = mln_arith_includes.cc
+mln_arith_plus_SOURCES = mln_arith_plus.cc
+mln_arith_all_SOURCES = mln_arith_all.cc
+mln_arith_times_SOURCES = mln_arith_times.cc
+mln_arith_diff_abs_SOURCES = mln_arith_diff_abs.cc
+mln_arith_minus_SOURCES = mln_arith_minus.cc
+mln_arith_min_SOURCES = mln_arith_min.cc
+mln_arith_revert_SOURCES = mln_arith_revert.cc
+mln_arith_essential_SOURCES = mln_arith_essential.cc
mln_io_pgm_load_SOURCES = mln_io_pgm_load.cc
+mln_io_pgm_all_SOURCES = mln_io_pgm_all.cc
mln_io_pgm_save_SOURCES = mln_io_pgm_save.cc
+mln_io_ppm_load_SOURCES = mln_io_ppm_load.cc
+mln_io_ppm_all_SOURCES = mln_io_ppm_all.cc
+mln_io_ppm_save_SOURCES = mln_io_ppm_save.cc
+mln_io_pfm_load_SOURCES = mln_io_pfm_load.cc
+mln_io_pfm_all_SOURCES = mln_io_pfm_all.cc
+mln_io_pfm_save_SOURCES = mln_io_pfm_save.cc
mln_io_all_SOURCES = mln_io_all.cc
-mln_io_fits_all_SOURCES = mln_io_fits_all.cc
-mln_io_fits_load_SOURCES = mln_io_fits_load.cc
+mln_io_pbm_load_SOURCES = mln_io_pbm_load.cc
+mln_io_pbm_all_SOURCES = mln_io_pbm_all.cc
+mln_io_pbm_save_SOURCES = mln_io_pbm_save.cc
mln_io_pnm_max_component_SOURCES = mln_io_pnm_max_component.cc
-mln_io_pnm_save_header_SOURCES = mln_io_pnm_save_header.cc
-mln_io_pnm_macros_SOURCES = mln_io_pnm_macros.cc
-mln_io_pnm_all_SOURCES = mln_io_pnm_all.cc
mln_io_pnm_load_SOURCES = mln_io_pnm_load.cc
mln_io_pnm_load_header_SOURCES = mln_io_pnm_load_header.cc
+mln_io_pnm_all_SOURCES = mln_io_pnm_all.cc
+mln_io_pnm_macros_SOURCES = mln_io_pnm_macros.cc
mln_io_pnm_save_SOURCES = mln_io_pnm_save.cc
-mln_io_ppm_all_SOURCES = mln_io_ppm_all.cc
-mln_io_ppm_load_SOURCES = mln_io_ppm_load.cc
-mln_io_ppm_save_SOURCES = mln_io_ppm_save.cc
+mln_io_pnm_save_header_SOURCES = mln_io_pnm_save_header.cc
mln_io_txt_all_SOURCES = mln_io_txt_all.cc
mln_io_txt_save_SOURCES = mln_io_txt_save.cc
-mln_make_vec_SOURCES = mln_make_vec.cc
-mln_make_box2d_h_SOURCES = mln_make_box2d_h.cc
-mln_make_box2d_SOURCES = mln_make_box2d.cc
-mln_make_point2d_h_SOURCES = mln_make_point2d_h.cc
-mln_make_double_neighb2d_SOURCES = mln_make_double_neighb2d.cc
-mln_make_w_window2d_int_SOURCES = mln_make_w_window2d_int.cc
-mln_make_w_window1d_SOURCES = mln_make_w_window1d.cc
-mln_make_pix_SOURCES = mln_make_pix.cc
-mln_make_w_window1d_int_SOURCES = mln_make_w_window1d_int.cc
-mln_make_dpoint2d_h_SOURCES = mln_make_dpoint2d_h.cc
-mln_make_essential_SOURCES = mln_make_essential.cc
-mln_make_w_window_SOURCES = mln_make_w_window.cc
-mln_make_image_SOURCES = mln_make_image.cc
-mln_make_w_window3d_int_SOURCES = mln_make_w_window3d_int.cc
-mln_make_box3d_SOURCES = mln_make_box3d.cc
-mln_make_image2d_SOURCES = mln_make_image2d.cc
-mln_make_all_SOURCES = mln_make_all.cc
-mln_make_dual_neighb_SOURCES = mln_make_dual_neighb.cc
-mln_make_win_chamfer_SOURCES = mln_make_win_chamfer.cc
-mln_make_pixel_SOURCES = mln_make_pixel.cc
-mln_make_w_window2d_SOURCES = mln_make_w_window2d.cc
-mln_make_w_window_directional_SOURCES = mln_make_w_window_directional.cc
-mln_make_box1d_SOURCES = mln_make_box1d.cc
-mln_make_mat_SOURCES = mln_make_mat.cc
-mln_make_voronoi_SOURCES = mln_make_voronoi.cc
-mln_make_w_window3d_SOURCES = mln_make_w_window3d.cc
-mln_topo_adj_lower_face_iter_SOURCES = mln_topo_adj_lower_face_iter.cc
-mln_topo_adj_lower_dim_connected_n_face_iter_SOURCES = mln_topo_adj_lower_dim_connected_n_face_iter.cc
-mln_topo_face_iter_SOURCES = mln_topo_face_iter.cc
-mln_topo_algebraic_n_face_SOURCES = mln_topo_algebraic_n_face.cc
-mln_topo_complex_SOURCES = mln_topo_complex.cc
-mln_topo_face_data_SOURCES = mln_topo_face_data.cc
-mln_topo_adj_higher_dim_connected_n_face_iter_SOURCES = mln_topo_adj_higher_dim_connected_n_face_iter.cc
-mln_topo_essential_SOURCES = mln_topo_essential.cc
-mln_topo_static_n_face_iter_SOURCES = mln_topo_static_n_face_iter.cc
-mln_topo_n_faces_set_SOURCES = mln_topo_n_faces_set.cc
-mln_topo_adj_higher_face_iter_SOURCES = mln_topo_adj_higher_face_iter.cc
-mln_topo_all_SOURCES = mln_topo_all.cc
-mln_topo_internal_complex_iterator_base_SOURCES = mln_topo_internal_complex_iterator_base.cc
-mln_topo_internal_complex_relative_iterator_sequence_SOURCES = mln_topo_internal_complex_relative_iterator_sequence.cc
-mln_topo_internal_complex_relative_iterator_base_SOURCES = mln_topo_internal_complex_relative_iterator_base.cc
-mln_topo_internal_complex_set_iterator_base_SOURCES = mln_topo_internal_complex_set_iterator_base.cc
-mln_topo_adj_m_face_iter_SOURCES = mln_topo_adj_m_face_iter.cc
-mln_topo_n_face_SOURCES = mln_topo_n_face.cc
-mln_topo_complex_iterators_SOURCES = mln_topo_complex_iterators.cc
-mln_topo_adj_lower_higher_face_iter_SOURCES = mln_topo_adj_lower_higher_face_iter.cc
-mln_topo_face_SOURCES = mln_topo_face.cc
-mln_topo_center_only_iter_SOURCES = mln_topo_center_only_iter.cc
-mln_topo_centered_iter_adapter_SOURCES = mln_topo_centered_iter_adapter.cc
-mln_topo_algebraic_face_SOURCES = mln_topo_algebraic_face.cc
-mln_topo_n_face_iter_SOURCES = mln_topo_n_face_iter.cc
-mln_topo_attic_faces_iter_SOURCES = mln_topo_attic_faces_iter.cc
-mln_subsampling_essential_SOURCES = mln_subsampling_essential.cc
-mln_subsampling_subsampling_SOURCES = mln_subsampling_subsampling.cc
-mln_subsampling_all_SOURCES = mln_subsampling_all.cc
-mln_subsampling_gaussian_subsampling_SOURCES = mln_subsampling_gaussian_subsampling.cc
-mln_canvas_labeling_SOURCES = mln_canvas_labeling.cc
-mln_canvas_essential_SOURCES = mln_canvas_essential.cc
-mln_canvas_morpho_algebraic_union_find_SOURCES = mln_canvas_morpho_algebraic_union_find.cc
-mln_canvas_morpho_essential_SOURCES = mln_canvas_morpho_essential.cc
-mln_canvas_morpho_all_SOURCES = mln_canvas_morpho_all.cc
-mln_canvas_all_SOURCES = mln_canvas_all.cc
-mln_canvas_chamfer_SOURCES = mln_canvas_chamfer.cc
-mln_canvas_browsing_directional_SOURCES = mln_canvas_browsing_directional.cc
-mln_canvas_browsing_fwd_SOURCES = mln_canvas_browsing_fwd.cc
-mln_canvas_browsing_essential_SOURCES = mln_canvas_browsing_essential.cc
-mln_canvas_browsing_snake_vert_SOURCES = mln_canvas_browsing_snake_vert.cc
-mln_canvas_browsing_snake_fwd_SOURCES = mln_canvas_browsing_snake_fwd.cc
-mln_canvas_browsing_backdiagonal2d_SOURCES = mln_canvas_browsing_backdiagonal2d.cc
-mln_canvas_browsing_snake_generic_SOURCES = mln_canvas_browsing_snake_generic.cc
-mln_canvas_browsing_all_SOURCES = mln_canvas_browsing_all.cc
-mln_canvas_browsing_hyper_directional_SOURCES = mln_canvas_browsing_hyper_directional.cc
-mln_canvas_browsing_dir_struct_elt_incr_update_SOURCES = mln_canvas_browsing_dir_struct_elt_incr_update.cc
-mln_canvas_browsing_diagonal2d_SOURCES = mln_canvas_browsing_diagonal2d.cc
-mln_estim_mean_SOURCES = mln_estim_mean.cc
-mln_estim_essential_SOURCES = mln_estim_essential.cc
-mln_estim_all_SOURCES = mln_estim_all.cc
-mln_estim_min_max_SOURCES = mln_estim_min_max.cc
-mln_estim_sum_SOURCES = mln_estim_sum.cc
-mln_arith_times_spe_SOURCES = mln_arith_times_spe.cc
-mln_arith_min_spe_SOURCES = mln_arith_min_spe.cc
-mln_arith_essential_SOURCES = mln_arith_essential.cc
-mln_arith_includes_SOURCES = mln_arith_includes.cc
-mln_arith_revert_spe_SOURCES = mln_arith_revert_spe.cc
-mln_arith_all_SOURCES = mln_arith_all.cc
-mln_arith_plus_SOURCES = mln_arith_plus.cc
-mln_arith_min_SOURCES = mln_arith_min.cc
-mln_arith_minus_SOURCES = mln_arith_minus.cc
-mln_arith_revert_SOURCES = mln_arith_revert.cc
-mln_arith_times_SOURCES = mln_arith_times.cc
-mln_algebra_vec_SOURCES = mln_algebra_vec.cc
-mln_algebra_h_mat_SOURCES = mln_algebra_h_mat.cc
-mln_algebra_quat_SOURCES = mln_algebra_quat.cc
-mln_algebra_essential_SOURCES = mln_algebra_essential.cc
-mln_algebra_all_SOURCES = mln_algebra_all.cc
-mln_algebra_h_vec_SOURCES = mln_algebra_h_vec.cc
-mln_algebra_mat_SOURCES = mln_algebra_mat.cc
-mln_display_essential_SOURCES = mln_display_essential.cc
-mln_display_show_SOURCES = mln_display_show.cc
-mln_display_all_SOURCES = mln_display_all.cc
-mln_display_remove_SOURCES = mln_display_remove.cc
-mln_display_color_pretty_SOURCES = mln_display_color_pretty.cc
-mln_display_save_and_show_SOURCES = mln_display_save_and_show.cc
-mln_display_save_SOURCES = mln_display_save.cc
-mln_test_positive_SOURCES = mln_test_positive.cc
-mln_test_essential_SOURCES = mln_test_essential.cc
-mln_test_all_SOURCES = mln_test_all.cc
-mln_test_predicate_SOURCES = mln_test_predicate.cc
-mln_border_mirror_SOURCES = mln_border_mirror.cc
-mln_border_adjust_SOURCES = mln_border_adjust.cc
-mln_border_find_SOURCES = mln_border_find.cc
-mln_border_essential_SOURCES = mln_border_essential.cc
-mln_border_equalize_SOURCES = mln_border_equalize.cc
-mln_border_fill_SOURCES = mln_border_fill.cc
-mln_border_resize_SOURCES = mln_border_resize.cc
-mln_border_all_SOURCES = mln_border_all.cc
-mln_border_duplicate_SOURCES = mln_border_duplicate.cc
-mln_border_thickness_SOURCES = mln_border_thickness.cc
-mln_border_get_SOURCES = mln_border_get.cc
-mln_trace_exiting_SOURCES = mln_trace_exiting.cc
-mln_trace_entering_SOURCES = mln_trace_entering.cc
-mln_trace_resume_SOURCES = mln_trace_resume.cc
-mln_trace_stop_SOURCES = mln_trace_stop.cc
-mln_trace_essential_SOURCES = mln_trace_essential.cc
-mln_trace_quiet_SOURCES = mln_trace_quiet.cc
-mln_trace_all_SOURCES = mln_trace_all.cc
-mln_trace_warning_SOURCES = mln_trace_warning.cc
-mln_debug_iota_spe_SOURCES = mln_debug_iota_spe.cc
-mln_debug_println_with_border_SOURCES = mln_debug_println_with_border.cc
-mln_debug_println_spe_SOURCES = mln_debug_println_spe.cc
+mln_io_abort_SOURCES = mln_io_abort.cc
+mln_io_fits_load_SOURCES = mln_io_fits_load.cc
+mln_io_fits_all_SOURCES = mln_io_fits_all.cc
+mln_io_off_load_SOURCES = mln_io_off_load.cc
+mln_io_off_all_SOURCES = mln_io_off_all.cc
+mln_io_off_save_SOURCES = mln_io_off_save.cc
+mln_io_essential_SOURCES = mln_io_essential.cc
+mln_logical_includes_SOURCES = mln_logical_includes.cc
+mln_logical_and_not_SOURCES = mln_logical_and_not.cc
+mln_logical_xor_SOURCES = mln_logical_xor.cc
+mln_logical_all_SOURCES = mln_logical_all.cc
+mln_logical_not_SOURCES = mln_logical_not.cc
+mln_logical_and_SOURCES = mln_logical_and.cc
+mln_logical_or_SOURCES = mln_logical_or.cc
+mln_logical_essential_SOURCES = mln_logical_essential.cc
+mln_norm_all_SOURCES = mln_norm_all.cc
+mln_norm_l1_SOURCES = mln_norm_l1.cc
+mln_norm_l2_SOURCES = mln_norm_l2.cc
+mln_norm_linfty_SOURCES = mln_norm_linfty.cc
+mln_norm_essential_SOURCES = mln_norm_essential.cc
mln_debug_iota_SOURCES = mln_debug_iota.cc
+mln_debug_all_SOURCES = mln_debug_all.cc
+mln_debug_println_with_border_SOURCES = mln_debug_println_with_border.cc
mln_debug_colorize_SOURCES = mln_debug_colorize.cc
-mln_debug_essential_SOURCES = mln_debug_essential.cc
-mln_debug_graph_SOURCES = mln_debug_graph.cc
+mln_debug_draw_graph_SOURCES = mln_debug_draw_graph.cc
+mln_debug_put_word_SOURCES = mln_debug_put_word.cc
mln_debug_format_SOURCES = mln_debug_format.cc
-mln_debug_all_SOURCES = mln_debug_all.cc
mln_debug_println_SOURCES = mln_debug_println.cc
-mln_debug_put_word_SOURCES = mln_debug_put_word.cc
-mln_debug_println_with_border_spe_SOURCES = mln_debug_println_with_border_spe.cc
-mln_morpho_thick_miss_SOURCES = mln_morpho_thick_miss.cc
-mln_morpho_opening_volume_SOURCES = mln_morpho_opening_volume.cc
-mln_morpho_gradient_SOURCES = mln_morpho_gradient.cc
-mln_morpho_closing_area_on_vertices_SOURCES = mln_morpho_closing_area_on_vertices.cc
-mln_morpho_meyer_wst_SOURCES = mln_morpho_meyer_wst.cc
-mln_morpho_closing_area_SOURCES = mln_morpho_closing_area.cc
-mln_morpho_Rd_SOURCES = mln_morpho_Rd.cc
-mln_morpho_complementation_SOURCES = mln_morpho_complementation.cc
-mln_morpho_opening_area_on_vertices_SOURCES = mln_morpho_opening_area_on_vertices.cc
-mln_morpho_thinning_SOURCES = mln_morpho_thinning.cc
-mln_morpho_contrast_SOURCES = mln_morpho_contrast.cc
-mln_morpho_erosion_spe_SOURCES = mln_morpho_erosion_spe.cc
-mln_morpho_opening_height_SOURCES = mln_morpho_opening_height.cc
-mln_morpho_erosion_SOURCES = mln_morpho_erosion.cc
-mln_morpho_essential_SOURCES = mln_morpho_essential.cc
-mln_morpho_elementary_gradient_SOURCES = mln_morpho_elementary_gradient.cc
-mln_morpho_elementary_erosion_SOURCES = mln_morpho_elementary_erosion.cc
-mln_morpho_elementary_essential_SOURCES = mln_morpho_elementary_essential.cc
-mln_morpho_elementary_all_SOURCES = mln_morpho_elementary_all.cc
-mln_morpho_elementary_like_ero_fun_SOURCES = mln_morpho_elementary_like_ero_fun.cc
-mln_morpho_elementary_dilation_SOURCES = mln_morpho_elementary_dilation.cc
-mln_morpho_elementary_opening_SOURCES = mln_morpho_elementary_opening.cc
-mln_morpho_elementary_closing_SOURCES = mln_morpho_elementary_closing.cc
-mln_morpho_elementary_like_ero_set_SOURCES = mln_morpho_elementary_like_ero_set.cc
-mln_morpho_elementary_laplacian_SOURCES = mln_morpho_elementary_laplacian.cc
-mln_morpho_elementary_gradient_internal_SOURCES = mln_morpho_elementary_gradient_internal.cc
-mln_morpho_elementary_gradient_external_SOURCES = mln_morpho_elementary_gradient_external.cc
-mln_morpho_elementary_top_hat_SOURCES = mln_morpho_elementary_top_hat.cc
-mln_morpho_includes_SOURCES = mln_morpho_includes.cc
-mln_morpho_thickening_SOURCES = mln_morpho_thickening.cc
-mln_morpho_dilation_fast_SOURCES = mln_morpho_dilation_fast.cc
-mln_morpho_opening_attribute_SOURCES = mln_morpho_opening_attribute.cc
-mln_morpho_closing_height_SOURCES = mln_morpho_closing_height.cc
-mln_morpho_line_gradient_SOURCES = mln_morpho_line_gradient.cc
-mln_morpho_thin_fit_SOURCES = mln_morpho_thin_fit.cc
-mln_morpho_opening_area_SOURCES = mln_morpho_opening_area.cc
-mln_morpho_all_SOURCES = mln_morpho_all.cc
-mln_morpho_hit_or_miss_SOURCES = mln_morpho_hit_or_miss.cc
-mln_morpho_internal_elementary_SOURCES = mln_morpho_internal_elementary.cc
-mln_morpho_plus_SOURCES = mln_morpho_plus.cc
-mln_morpho_erosion_fast_SOURCES = mln_morpho_erosion_fast.cc
-mln_morpho_dilation_SOURCES = mln_morpho_dilation.cc
-mln_morpho_closing_attribute_SOURCES = mln_morpho_closing_attribute.cc
-mln_morpho_opening_SOURCES = mln_morpho_opening.cc
-mln_morpho_min_SOURCES = mln_morpho_min.cc
-mln_morpho_minus_SOURCES = mln_morpho_minus.cc
-mln_morpho_closing_volume_SOURCES = mln_morpho_closing_volume.cc
-mln_morpho_rank_filter_SOURCES = mln_morpho_rank_filter.cc
-mln_morpho_closing_SOURCES = mln_morpho_closing.cc
-mln_morpho_laplacian_SOURCES = mln_morpho_laplacian.cc
-mln_morpho_top_hat_SOURCES = mln_morpho_top_hat.cc
-mln_accu_nil_SOURCES = mln_accu_nil.cc
-mln_accu_max_SOURCES = mln_accu_max.cc
-mln_accu_max_h_SOURCES = mln_accu_max_h.cc
-mln_accu_histo_SOURCES = mln_accu_histo.cc
-mln_accu_rank_bool_SOURCES = mln_accu_rank_bool.cc
-mln_accu_mean_SOURCES = mln_accu_mean.cc
-mln_accu_median_alt_SOURCES = mln_accu_median_alt.cc
-mln_accu_convolve_SOURCES = mln_accu_convolve.cc
-mln_accu_essential_SOURCES = mln_accu_essential.cc
-mln_accu_min_h_SOURCES = mln_accu_min_h.cc
-mln_accu_compute_SOURCES = mln_accu_compute.cc
-mln_accu_take_SOURCES = mln_accu_take.cc
-mln_accu_pair_SOURCES = mln_accu_pair.cc
-mln_accu_all_SOURCES = mln_accu_all.cc
-mln_accu_height_SOURCES = mln_accu_height.cc
-mln_accu_internal_base_SOURCES = mln_accu_internal_base.cc
-mln_accu_v_SOURCES = mln_accu_v.cc
-mln_accu_count_SOURCES = mln_accu_count.cc
-mln_accu_volume_SOURCES = mln_accu_volume.cc
-mln_accu_tuple_SOURCES = mln_accu_tuple.cc
-mln_accu_min_SOURCES = mln_accu_min.cc
-mln_accu_median_h_SOURCES = mln_accu_median_h.cc
-mln_accu_line_SOURCES = mln_accu_line.cc
-mln_accu_count_adjacent_vertices_SOURCES = mln_accu_count_adjacent_vertices.cc
-mln_accu_min_max_SOURCES = mln_accu_min_max.cc
-mln_accu_land_SOURCES = mln_accu_land.cc
-mln_accu_bbox_SOURCES = mln_accu_bbox.cc
-mln_accu_sum_SOURCES = mln_accu_sum.cc
-mln_accu_rank_high_quant_SOURCES = mln_accu_rank_high_quant.cc
-mln_accu_p_SOURCES = mln_accu_p.cc
-mln_accu_rank_SOURCES = mln_accu_rank.cc
-mln_accu_maj_h_SOURCES = mln_accu_maj_h.cc
-mln_registration_get_rtransf_SOURCES = mln_registration_get_rtransf.cc
-mln_registration_icp_SOURCES = mln_registration_icp.cc
-mln_registration_essential_SOURCES = mln_registration_essential.cc
-mln_registration_multiscale_SOURCES = mln_registration_multiscale.cc
-mln_registration_all_SOURCES = mln_registration_all.cc
-mln_registration_internal_rms_SOURCES = mln_registration_internal_rms.cc
-mln_registration_get_rot_SOURCES = mln_registration_get_rot.cc
-mln_registration_registration_SOURCES = mln_registration_registration.cc
-mln_pw_value_SOURCES = mln_pw_value.cc
-mln_pw_cst_SOURCES = mln_pw_cst.cc
-mln_pw_essential_SOURCES = mln_pw_essential.cc
-mln_pw_image_SOURCES = mln_pw_image.cc
-mln_pw_var_SOURCES = mln_pw_var.cc
-mln_pw_all_SOURCES = mln_pw_all.cc
-mln_binarization_essential_SOURCES = mln_binarization_essential.cc
-mln_binarization_includes_SOURCES = mln_binarization_includes.cc
-mln_binarization_all_SOURCES = mln_binarization_all.cc
-mln_binarization_binarization_SOURCES = mln_binarization_binarization.cc
-mln_binarization_threshold_SOURCES = mln_binarization_threshold.cc
-mln_linear_log_SOURCES = mln_linear_log.cc
-mln_linear_line_x2_convolve_SOURCES = mln_linear_line_x2_convolve.cc
-mln_linear_ch_convolve_SOURCES = mln_linear_ch_convolve.cc
-mln_linear_local_convolve_SOURCES = mln_linear_local_convolve.cc
-mln_linear_convolve_SOURCES = mln_linear_convolve.cc
-mln_linear_essential_SOURCES = mln_linear_essential.cc
-mln_linear_lap_SOURCES = mln_linear_lap.cc
-mln_linear_sobel_SOURCES = mln_linear_sobel.cc
-mln_linear_convolve_directional_SOURCES = mln_linear_convolve_directional.cc
-mln_linear_all_SOURCES = mln_linear_all.cc
-mln_linear_gaussian_SOURCES = mln_linear_gaussian.cc
-mln_essential_1d_SOURCES = mln_essential_1d.cc
-mln_essential_2d_SOURCES = mln_essential_2d.cc
-mln_essential_routine_SOURCES = mln_essential_routine.cc
-mln_essential_3d_SOURCES = mln_essential_3d.cc
-mln_metal_vec_SOURCES = mln_metal_vec.cc
-mln_metal_is_not_ref_SOURCES = mln_metal_is_not_ref.cc
-mln_metal_unconst_SOURCES = mln_metal_unconst.cc
-mln_metal_array3d_SOURCES = mln_metal_array3d.cc
-mln_metal_abort_SOURCES = mln_metal_abort.cc
-mln_metal_has_neighborhood_SOURCES = mln_metal_has_neighborhood.cc
-mln_metal_ref_SOURCES = mln_metal_ref.cc
-mln_metal_is_const_SOURCES = mln_metal_is_const.cc
-mln_metal_same_point_SOURCES = mln_metal_same_point.cc
-mln_metal_int_SOURCES = mln_metal_int.cc
-mln_metal_is_SOURCES = mln_metal_is.cc
-mln_metal_essential_SOURCES = mln_metal_essential.cc
-mln_metal_unref_SOURCES = mln_metal_unref.cc
-mln_metal_is_a_SOURCES = mln_metal_is_a.cc
-mln_metal_not_equal_SOURCES = mln_metal_not_equal.cc
-mln_metal_none_SOURCES = mln_metal_none.cc
-mln_metal_is_unqualif_SOURCES = mln_metal_is_unqualif.cc
-mln_metal_is_not_SOURCES = mln_metal_is_not.cc
-mln_metal_unptr_SOURCES = mln_metal_unptr.cc
-mln_metal_array1d_SOURCES = mln_metal_array1d.cc
-mln_metal_if_SOURCES = mln_metal_if.cc
-mln_metal_is_ref_SOURCES = mln_metal_is_ref.cc
-mln_metal_is_not_a_SOURCES = mln_metal_is_not_a.cc
-mln_metal_all_SOURCES = mln_metal_all.cc
-mln_metal_same_coord_SOURCES = mln_metal_same_coord.cc
-mln_metal_array2d_SOURCES = mln_metal_array2d.cc
-mln_metal_templated_by_SOURCES = mln_metal_templated_by.cc
-mln_metal_ret_SOURCES = mln_metal_ret.cc
-mln_metal_is_not_const_SOURCES = mln_metal_is_not_const.cc
-mln_metal_math_root_SOURCES = mln_metal_math_root.cc
-mln_metal_math_max_SOURCES = mln_metal_math_max.cc
-mln_metal_math_all_SOURCES = mln_metal_math_all.cc
-mln_metal_math_pow_SOURCES = mln_metal_math_pow.cc
-mln_metal_math_sqrt_SOURCES = mln_metal_math_sqrt.cc
-mln_metal_bexpr_SOURCES = mln_metal_bexpr.cc
-mln_metal_bool_SOURCES = mln_metal_bool.cc
-mln_metal_fix_return_SOURCES = mln_metal_fix_return.cc
-mln_metal_converts_to_SOURCES = mln_metal_converts_to.cc
-mln_metal_goes_to_SOURCES = mln_metal_goes_to.cc
-mln_metal_equal_SOURCES = mln_metal_equal.cc
-mln_metal_unqualif_SOURCES = mln_metal_unqualif.cc
-mln_metal_mat_SOURCES = mln_metal_mat.cc
-mln_metal_array_SOURCES = mln_metal_array.cc
-mln_metal_const_SOURCES = mln_metal_const.cc
+mln_debug_essential_SOURCES = mln_debug_essential.cc
+mln_estim_min_max_SOURCES = mln_estim_min_max.cc
+mln_estim_all_SOURCES = mln_estim_all.cc
+mln_estim_sum_SOURCES = mln_estim_sum.cc
+mln_estim_mean_SOURCES = mln_estim_mean.cc
+mln_estim_essential_SOURCES = mln_estim_essential.cc
+mln_set_uni_SOURCES = mln_set_uni.cc
+mln_set_inter_SOURCES = mln_set_inter.cc
+mln_set_all_SOURCES = mln_set_all.cc
+mln_set_get_SOURCES = mln_set_get.cc
mln_set_sym_diff_SOURCES = mln_set_sym_diff.cc
-mln_set_essential_SOURCES = mln_set_essential.cc
mln_set_has_SOURCES = mln_set_has.cc
mln_set_is_subset_of_SOURCES = mln_set_is_subset_of.cc
-mln_set_inter_SOURCES = mln_set_inter.cc
-mln_set_all_SOURCES = mln_set_all.cc
mln_set_diff_SOURCES = mln_set_diff.cc
-mln_set_uni_SOURCES = mln_set_uni.cc
-mln_set_get_SOURCES = mln_set_get.cc
-mln_convert_to_p_array_SOURCES = mln_convert_to_p_array.cc
-mln_convert_to_fun_SOURCES = mln_convert_to_fun.cc
-mln_convert_to_SOURCES = mln_convert_to.cc
-mln_convert_to_image_SOURCES = mln_convert_to_image.cc
-mln_convert_to_p_set_SOURCES = mln_convert_to_p_set.cc
-mln_convert_impl_from_image_to_site_set_SOURCES = mln_convert_impl_from_image_to_site_set.cc
-mln_convert_impl_all_SOURCES = mln_convert_impl_all.cc
-mln_convert_impl_from_value_to_value_SOURCES = mln_convert_impl_from_value_to_value.cc
-mln_convert_essential_SOURCES = mln_convert_essential.cc
-mln_convert_all_SOURCES = mln_convert_all.cc
-mln_convert_to_upper_window_SOURCES = mln_convert_to_upper_window.cc
-mln_convert_to_dpoint_SOURCES = mln_convert_to_dpoint.cc
-mln_convert_to_rgb_SOURCES = mln_convert_to_rgb.cc
-mln_convert_to_tiles_SOURCES = mln_convert_to_tiles.cc
-mln_convert_from_to_SOURCES = mln_convert_from_to.cc
-mln_convert_to_window_SOURCES = mln_convert_to_window.cc
-mln_convert_to_std_set_SOURCES = mln_convert_to_std_set.cc
-mln_geom_nslis_SOURCES = mln_geom_nslis.cc
-mln_geom_size2d_SOURCES = mln_geom_size2d.cc
-mln_geom_max_row_SOURCES = mln_geom_max_row.cc
-mln_geom_size3d_SOURCES = mln_geom_size3d.cc
-mln_geom_seeds2tiling_roundness_SOURCES = mln_geom_seeds2tiling_roundness.cc
-mln_geom_delta_SOURCES = mln_geom_delta.cc
-mln_geom_essential_SOURCES = mln_geom_essential.cc
-mln_geom_max_ind_SOURCES = mln_geom_max_ind.cc
-mln_geom_min_col_SOURCES = mln_geom_min_col.cc
-mln_geom_complex_geometry_SOURCES = mln_geom_complex_geometry.cc
-mln_geom_nrows_SOURCES = mln_geom_nrows.cc
-mln_geom_seeds2tiling_SOURCES = mln_geom_seeds2tiling.cc
-mln_geom_min_sli_SOURCES = mln_geom_min_sli.cc
-mln_geom_nsites_SOURCES = mln_geom_nsites.cc
-mln_geom_min_ind_SOURCES = mln_geom_min_ind.cc
-mln_geom_ninds_SOURCES = mln_geom_ninds.cc
-mln_geom_resize_SOURCES = mln_geom_resize.cc
-mln_geom_min_row_SOURCES = mln_geom_min_row.cc
-mln_geom_all_SOURCES = mln_geom_all.cc
-mln_geom_chamfer_SOURCES = mln_geom_chamfer.cc
-mln_geom_ncols_SOURCES = mln_geom_ncols.cc
-mln_geom_pmin_pmax_SOURCES = mln_geom_pmin_pmax.cc
-mln_geom_size1d_SOURCES = mln_geom_size1d.cc
-mln_geom_max_sli_SOURCES = mln_geom_max_sli.cc
-mln_geom_bbox_SOURCES = mln_geom_bbox.cc
-mln_geom_max_col_SOURCES = mln_geom_max_col.cc
-mln_literal_black_SOURCES = mln_literal_black.cc
-mln_literal_zero_SOURCES = mln_literal_zero.cc
-mln_literal_essential_SOURCES = mln_literal_essential.cc
-mln_literal_grays_SOURCES = mln_literal_grays.cc
-mln_literal_ops_SOURCES = mln_literal_ops.cc
-mln_literal_all_SOURCES = mln_literal_all.cc
-mln_literal_white_SOURCES = mln_literal_white.cc
-mln_literal_one_SOURCES = mln_literal_one.cc
-mln_literal_colors_SOURCES = mln_literal_colors.cc
-mln_literal_origin_SOURCES = mln_literal_origin.cc
-mln_level_apply_spe_SOURCES = mln_level_apply_spe.cc
-mln_level_compare_SOURCES = mln_level_compare.cc
-mln_level_saturate_SOURCES = mln_level_saturate.cc
-mln_level_fill_with_image_SOURCES = mln_level_fill_with_image.cc
-mln_level_was_median_SOURCES = mln_level_was_median.cc
-mln_level_fill_with_value_spe_SOURCES = mln_level_fill_with_value_spe.cc
-mln_level_convert_SOURCES = mln_level_convert.cc
-mln_level_sort_psites_SOURCES = mln_level_sort_psites.cc
-mln_level_essential_SOURCES = mln_level_essential.cc
-mln_level_paste_spe_SOURCES = mln_level_paste_spe.cc
-mln_level_fill_SOURCES = mln_level_fill.cc
-mln_level_compute_SOURCES = mln_level_compute.cc
-mln_level_replace_SOURCES = mln_level_replace.cc
-mln_level_approx_essential_SOURCES = mln_level_approx_essential.cc
-mln_level_approx_all_SOURCES = mln_level_approx_all.cc
-mln_level_approx_median_SOURCES = mln_level_approx_median.cc
-mln_level_stretch_SOURCES = mln_level_stretch.cc
-mln_level_paste_SOURCES = mln_level_paste.cc
-mln_level_to_enc_SOURCES = mln_level_to_enc.cc
-mln_level_apply_SOURCES = mln_level_apply.cc
-mln_level_all_SOURCES = mln_level_all.cc
-mln_level_update_SOURCES = mln_level_update.cc
-mln_level_median_SOURCES = mln_level_median.cc
-mln_level_memset__SOURCES = mln_level_memset_.cc
-mln_level_fill_with_image_spe_SOURCES = mln_level_fill_with_image_spe.cc
-mln_level_assign_SOURCES = mln_level_assign.cc
-mln_level_memcpy__SOURCES = mln_level_memcpy_.cc
-mln_level_assign_spe_SOURCES = mln_level_assign_spe.cc
-mln_level_fast_median_SOURCES = mln_level_fast_median.cc
-mln_level_transform_SOURCES = mln_level_transform.cc
-mln_level_transform_spe_SOURCES = mln_level_transform_spe.cc
-mln_level_abs_SOURCES = mln_level_abs.cc
-mln_level_naive_essential_SOURCES = mln_level_naive_essential.cc
-mln_level_naive_all_SOURCES = mln_level_naive_all.cc
-mln_level_naive_median_SOURCES = mln_level_naive_median.cc
-mln_level_fill_with_value_SOURCES = mln_level_fill_with_value.cc
-mln_math_jacobi_SOURCES = mln_math_jacobi.cc
-mln_math_max_SOURCES = mln_math_max.cc
-mln_math_round_sat_SOURCES = mln_math_round_sat.cc
-mln_math_round_SOURCES = mln_math_round.cc
-mln_math_essential_SOURCES = mln_math_essential.cc
-mln_math_sqr_SOURCES = mln_math_sqr.cc
-mln_math_all_SOURCES = mln_math_all.cc
-mln_math_sign_SOURCES = mln_math_sign.cc
-mln_math_min_SOURCES = mln_math_min.cc
-mln_math_abs_SOURCES = mln_math_abs.cc
-mln_math_sqrt_SOURCES = mln_math_sqrt.cc
-mln_norm_l2_SOURCES = mln_norm_l2.cc
-mln_norm_linfty_SOURCES = mln_norm_linfty.cc
-mln_norm_essential_SOURCES = mln_norm_essential.cc
-mln_norm_all_SOURCES = mln_norm_all.cc
-mln_norm_l1_SOURCES = mln_norm_l1.cc
-mln_logical_not_spe_SOURCES = mln_logical_not_spe.cc
-mln_logical_not_SOURCES = mln_logical_not.cc
-mln_logical_or_SOURCES = mln_logical_or.cc
-mln_logical_or_spe_SOURCES = mln_logical_or_spe.cc
-mln_logical_and_SOURCES = mln_logical_and.cc
-mln_logical_essential_SOURCES = mln_logical_essential.cc
-mln_logical_and_not_spe_SOURCES = mln_logical_and_not_spe.cc
-mln_logical_all_SOURCES = mln_logical_all.cc
-mln_logical_and_spe_SOURCES = mln_logical_and_spe.cc
-mln_logical_and_not_SOURCES = mln_logical_and_not.cc
-mln_draw_essential_SOURCES = mln_draw_essential.cc
-mln_draw_box_SOURCES = mln_draw_box.cc
-mln_draw_all_SOURCES = mln_draw_all.cc
-mln_draw_plot_SOURCES = mln_draw_plot.cc
-mln_draw_label_SOURCES = mln_draw_label.cc
-mln_draw_line_SOURCES = mln_draw_line.cc
-mln_value_int_s16_SOURCES = mln_value_int_s16.cc
-mln_value_cast_SOURCES = mln_value_cast.cc
-mln_value_builtin_floatings_SOURCES = mln_value_builtin_floatings.cc
-mln_value_builtin_promotions_SOURCES = mln_value_builtin_promotions.cc
-mln_value_builtin_integers_SOURCES = mln_value_builtin_integers.cc
-mln_value_builtin_essential_SOURCES = mln_value_builtin_essential.cc
-mln_value_builtin_ops_SOURCES = mln_value_builtin_ops.cc
-mln_value_builtin_all_SOURCES = mln_value_builtin_all.cc
-mln_value_builtin_symbolics_SOURCES = mln_value_builtin_symbolics.cc
-mln_value_int_s_SOURCES = mln_value_int_s.cc
-mln_value_rgb_SOURCES = mln_value_rgb.cc
-mln_value_viter_SOURCES = mln_value_viter.cc
-mln_value_lut_vec_SOURCES = mln_value_lut_vec.cc
-mln_value_set_SOURCES = mln_value_set.cc
-mln_value_hsi_SOURCES = mln_value_hsi.cc
-mln_value_int_u16_SOURCES = mln_value_int_u16.cc
-mln_value_glf_SOURCES = mln_value_glf.cc
-mln_value_stack_SOURCES = mln_value_stack.cc
-mln_value_gl8_SOURCES = mln_value_gl8.cc
-mln_value_essential_SOURCES = mln_value_essential.cc
-mln_value_graylevel_f_SOURCES = mln_value_graylevel_f.cc
-mln_value_super_value_SOURCES = mln_value_super_value.cc
-mln_value_equiv_SOURCES = mln_value_equiv.cc
-mln_value_rgb16_SOURCES = mln_value_rgb16.cc
-mln_value_float01_16_SOURCES = mln_value_float01_16.cc
-mln_value_rgb8_SOURCES = mln_value_rgb8.cc
-mln_value_int_s32_SOURCES = mln_value_int_s32.cc
-mln_value_int_s8_SOURCES = mln_value_int_s8.cc
-mln_value_int_u8_SOURCES = mln_value_int_u8.cc
-mln_value_int_u32_SOURCES = mln_value_int_u32.cc
-mln_value_float01_SOURCES = mln_value_float01.cc
-mln_value_int_u_SOURCES = mln_value_int_u.cc
-mln_value_ops_SOURCES = mln_value_ops.cc
-mln_value_interval_SOURCES = mln_value_interval.cc
-mln_value_int_u_sat_SOURCES = mln_value_int_u_sat.cc
-mln_value_all_SOURCES = mln_value_all.cc
-mln_value_internal_encoding_SOURCES = mln_value_internal_encoding.cc
-mln_value_internal_convert_SOURCES = mln_value_internal_convert.cc
-mln_value_internal_gray_f_SOURCES = mln_value_internal_gray_f.cc
-mln_value_internal_essential_SOURCES = mln_value_internal_essential.cc
-mln_value_internal_gray__SOURCES = mln_value_internal_gray_.cc
-mln_value_internal_integer_SOURCES = mln_value_internal_integer.cc
-mln_value_internal_value_like_SOURCES = mln_value_internal_value_like.cc
-mln_value_internal_all_SOURCES = mln_value_internal_all.cc
-mln_value_internal_iterable_set_SOURCES = mln_value_internal_iterable_set.cc
-mln_value_proxy_SOURCES = mln_value_proxy.cc
-mln_value_sign_SOURCES = mln_value_sign.cc
-mln_value_gl16_SOURCES = mln_value_gl16.cc
-mln_value_aliases_SOURCES = mln_value_aliases.cc
-mln_value_float01_f_SOURCES = mln_value_float01_f.cc
-mln_value_float01_8_SOURCES = mln_value_float01_8.cc
-mln_value_concept_structured_SOURCES = mln_value_concept_structured.cc
-mln_value_concept_vectorial_SOURCES = mln_value_concept_vectorial.cc
-mln_value_concept_data_SOURCES = mln_value_concept_data.cc
-mln_value_concept_built_in_SOURCES = mln_value_concept_built_in.cc
-mln_value_concept_essential_SOURCES = mln_value_concept_essential.cc
-mln_value_concept_integer_SOURCES = mln_value_concept_integer.cc
-mln_value_concept_floating_SOURCES = mln_value_concept_floating.cc
-mln_value_concept_all_SOURCES = mln_value_concept_all.cc
-mln_value_concept_scalar_SOURCES = mln_value_concept_scalar.cc
-mln_value_concept_symbolic_SOURCES = mln_value_concept_symbolic.cc
-mln_value_label_SOURCES = mln_value_label.cc
-mln_value_float01__SOURCES = mln_value_float01_.cc
-mln_value_other_SOURCES = mln_value_other.cc
-mln_value_scalar_SOURCES = mln_value_scalar.cc
-mln_value_graylevel_SOURCES = mln_value_graylevel.cc
-mln_tag_skeleton_SOURCES = mln_tag_skeleton.cc
-mln_tag_init_SOURCES = mln_tag_init.cc
-mln_tag_essential_SOURCES = mln_tag_essential.cc
-mln_tag_all_SOURCES = mln_tag_all.cc
-mln_labeling_regional_maxima_SOURCES = mln_labeling_regional_maxima.cc
-mln_labeling_background_SOURCES = mln_labeling_background.cc
-mln_labeling_level_SOURCES = mln_labeling_level.cc
-mln_labeling_flat_zones_SOURCES = mln_labeling_flat_zones.cc
-mln_labeling_level_spe_SOURCES = mln_labeling_level_spe.cc
-mln_labeling_regional_minima_SOURCES = mln_labeling_regional_minima.cc
-mln_labeling_essential_SOURCES = mln_labeling_essential.cc
-mln_labeling_compute_SOURCES = mln_labeling_compute.cc
-mln_labeling_blobs_SOURCES = mln_labeling_blobs.cc
-mln_labeling_all_SOURCES = mln_labeling_all.cc
-mln_labeling_foreground_SOURCES = mln_labeling_foreground.cc
+mln_set_compute_SOURCES = mln_set_compute.cc
+mln_set_essential_SOURCES = mln_set_essential.cc
+mln_border_adjust_SOURCES = mln_border_adjust.cc
+mln_border_duplicate_SOURCES = mln_border_duplicate.cc
+mln_border_find_SOURCES = mln_border_find.cc
+mln_border_thickness_SOURCES = mln_border_thickness.cc
+mln_border_all_SOURCES = mln_border_all.cc
+mln_border_mirror_SOURCES = mln_border_mirror.cc
+mln_border_get_SOURCES = mln_border_get.cc
+mln_border_equalize_SOURCES = mln_border_equalize.cc
+mln_border_resize_SOURCES = mln_border_resize.cc
+mln_border_fill_SOURCES = mln_border_fill.cc
+mln_border_essential_SOURCES = mln_border_essential.cc
+mln_subsampling_gaussian_subsampling_SOURCES = mln_subsampling_gaussian_subsampling.cc
+mln_subsampling_all_SOURCES = mln_subsampling_all.cc
+mln_subsampling_subsampling_SOURCES = mln_subsampling_subsampling.cc
+mln_subsampling_essential_SOURCES = mln_subsampling_essential.cc
TESTS = $(check_PROGRAMS)
diff --git a/milena/tests/unit_test/build_unit_test.sh b/milena/tests/unit_test/build_unit_test.sh
index 778bd47..6a6006e 100755
--- a/milena/tests/unit_test/build_unit_test.sh
+++ b/milena/tests/unit_test/build_unit_test.sh
@@ -1,8 +1,6 @@
#!/bin/sh
-#FIXME: Launch this script during bootstrap
-
-HEADERS=`find ../../mln -name "*.hh" | sed s/"\.\.\/\.\.\/"//g`
+HEADERS=`find ../../mln -name "*.hh" | grep -vE "*.spe.hh" | sed s/"\.\.\/\.\.\/"//g`
rm -f Makefile.am
rm -f *.hh *.cc
diff --git a/milena/tests/unit_test/mln_accu_center.cc b/milena/tests/unit_test/mln_accu_center.cc
new file mode 100644
index 0000000..0ad7173
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_center.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/center.hh.
+// Generated file, do not modify.
+#include <mln/accu/center.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_land_basic.cc b/milena/tests/unit_test/mln_accu_land_basic.cc
new file mode 100644
index 0000000..b6657f5
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_land_basic.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/land_basic.hh.
+// Generated file, do not modify.
+#include <mln/accu/land_basic.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_transform.cc b/milena/tests/unit_test/mln_accu_transform.cc
new file mode 100644
index 0000000..c3c0118
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_transform.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/transform.hh.
+// Generated file, do not modify.
+#include <mln/accu/transform.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_transform_diagonal.cc b/milena/tests/unit_test/mln_accu_transform_diagonal.cc
new file mode 100644
index 0000000..56c66f7
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_transform_diagonal.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/transform_diagonal.hh.
+// Generated file, do not modify.
+#include <mln/accu/transform_diagonal.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_transform_directional.cc b/milena/tests/unit_test/mln_accu_transform_directional.cc
new file mode 100644
index 0000000..47d2be6
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_transform_directional.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/transform_directional.hh.
+// Generated file, do not modify.
+#include <mln/accu/transform_directional.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_transform_snake.cc b/milena/tests/unit_test/mln_accu_transform_snake.cc
new file mode 100644
index 0000000..e3d86c5
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_transform_snake.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/transform_snake.hh.
+// Generated file, do not modify.
+#include <mln/accu/transform_snake.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_accu_transform_stop.cc b/milena/tests/unit_test/mln_accu_transform_stop.cc
new file mode 100644
index 0000000..cd4d1dc
--- /dev/null
+++ b/milena/tests/unit_test/mln_accu_transform_stop.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/accu/transform_stop.hh.
+// Generated file, do not modify.
+#include <mln/accu/transform_stop.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_arith_diff_abs.cc b/milena/tests/unit_test/mln_arith_diff_abs.cc
new file mode 100644
index 0000000..9b3fc81
--- /dev/null
+++ b/milena/tests/unit_test/mln_arith_diff_abs.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/arith/diff_abs.hh.
+// Generated file, do not modify.
+#include <mln/arith/diff_abs.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_arith_min_spe.cc b/milena/tests/unit_test/mln_arith_min_spe.cc
deleted file mode 100644
index 7860edf..0000000
--- a/milena/tests/unit_test/mln_arith_min_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/arith/min.spe.hh.
-// Generated file, do not modify.
-#include <mln/arith/min.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_arith_revert_spe.cc b/milena/tests/unit_test/mln_arith_revert_spe.cc
deleted file mode 100644
index 4cae3bf..0000000
--- a/milena/tests/unit_test/mln_arith_revert_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/arith/revert.spe.hh.
-// Generated file, do not modify.
-#include <mln/arith/revert.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_arith_times_spe.cc b/milena/tests/unit_test/mln_arith_times_spe.cc
deleted file mode 100644
index 8b667d0..0000000
--- a/milena/tests/unit_test/mln_arith_times_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/arith/times.spe.hh.
-// Generated file, do not modify.
-#include <mln/arith/times.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_canvas_distance_geodesic.cc b/milena/tests/unit_test/mln_canvas_distance_geodesic.cc
new file mode 100644
index 0000000..760d3c5
--- /dev/null
+++ b/milena/tests/unit_test/mln_canvas_distance_geodesic.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/canvas/distance_geodesic.hh.
+// Generated file, do not modify.
+#include <mln/canvas/distance_geodesic.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_alias_bin_2complex_image3df.cc b/milena/tests/unit_test/mln_core_alias_bin_2complex_image3df.cc
deleted file mode 100644
index 125e6e0..0000000
--- a/milena/tests/unit_test/mln_core_alias_bin_2complex_image3df.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/core/alias/bin_2complex_image3df.hh.
-// Generated file, do not modify.
-#include <mln/core/alias/bin_2complex_image3df.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_core_alias_complex_geometry.cc b/milena/tests/unit_test/mln_core_alias_complex_geometry.cc
new file mode 100644
index 0000000..a429756
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_alias_complex_geometry.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/alias/complex_geometry.hh.
+// Generated file, do not modify.
+#include <mln/core/alias/complex_geometry.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_alias_complex_image.cc b/milena/tests/unit_test/mln_core_alias_complex_image.cc
new file mode 100644
index 0000000..11824c9
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_alias_complex_image.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/alias/complex_image.hh.
+// Generated file, do not modify.
+#include <mln/core/alias/complex_image.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_image_line_graph_psite.cc b/milena/tests/unit_test/mln_core_image_line_graph_psite.cc
deleted file mode 100644
index aee16c8..0000000
--- a/milena/tests/unit_test/mln_core_image_line_graph_psite.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/core/image/line_graph_psite.hh.
-// Generated file, do not modify.
-#include <mln/core/image/line_graph_psite.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_core_internal_graph_neighborhood_base.cc b/milena/tests/unit_test/mln_core_internal_graph_neighborhood_base.cc
new file mode 100644
index 0000000..868f61a
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_internal_graph_neighborhood_base.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/internal/graph_neighborhood_base.hh.
+// Generated file, do not modify.
+#include <mln/core/internal/graph_neighborhood_base.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_internal_graph_psite_base.cc b/milena/tests/unit_test/mln_core_internal_graph_psite_base.cc
new file mode 100644
index 0000000..3350780
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_internal_graph_psite_base.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/internal/graph_psite_base.hh.
+// Generated file, do not modify.
+#include <mln/core/internal/graph_psite_base.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_internal_graph_window_base.cc b/milena/tests/unit_test/mln_core_internal_graph_window_base.cc
new file mode 100644
index 0000000..2cb9a11
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_internal_graph_window_base.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/internal/graph_window_base.hh.
+// Generated file, do not modify.
+#include <mln/core/internal/graph_window_base.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_site_set_p_edges_psite.cc b/milena/tests/unit_test/mln_core_site_set_p_edges_psite.cc
new file mode 100644
index 0000000..d02bca3
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_site_set_p_edges_psite.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/site_set/p_edges_psite.hh.
+// Generated file, do not modify.
+#include <mln/core/site_set/p_edges_psite.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_site_set_p_graph.cc b/milena/tests/unit_test/mln_core_site_set_p_graph.cc
deleted file mode 100644
index 257b213..0000000
--- a/milena/tests/unit_test/mln_core_site_set_p_graph.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/core/site_set/p_graph.hh.
-// Generated file, do not modify.
-#include <mln/core/site_set/p_graph.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_core_site_set_p_line_graph.cc b/milena/tests/unit_test/mln_core_site_set_p_line_graph.cc
deleted file mode 100644
index 50059dd..0000000
--- a/milena/tests/unit_test/mln_core_site_set_p_line_graph.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/core/site_set/p_line_graph.hh.
-// Generated file, do not modify.
-#include <mln/core/site_set/p_line_graph.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_core_site_set_p_line_graph_piter.cc b/milena/tests/unit_test/mln_core_site_set_p_line_graph_piter.cc
deleted file mode 100644
index 5a812dd..0000000
--- a/milena/tests/unit_test/mln_core_site_set_p_line_graph_piter.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/core/site_set/p_line_graph_piter.hh.
-// Generated file, do not modify.
-#include <mln/core/site_set/p_line_graph_piter.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_core_site_set_p_vertices_psite.cc b/milena/tests/unit_test/mln_core_site_set_p_vertices_psite.cc
new file mode 100644
index 0000000..e8b695e
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_site_set_p_vertices_psite.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/core/site_set/p_vertices_psite.hh.
+// Generated file, do not modify.
+#include <mln/core/site_set/p_vertices_psite.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_debug_draw_graph.cc b/milena/tests/unit_test/mln_debug_draw_graph.cc
new file mode 100644
index 0000000..6099cf4
--- /dev/null
+++ b/milena/tests/unit_test/mln_debug_draw_graph.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/debug/draw_graph.hh.
+// Generated file, do not modify.
+#include <mln/debug/draw_graph.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_debug_graph.cc b/milena/tests/unit_test/mln_debug_graph.cc
deleted file mode 100644
index 88d5c9c..0000000
--- a/milena/tests/unit_test/mln_debug_graph.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/debug/graph.hh.
-// Generated file, do not modify.
-#include <mln/debug/graph.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_debug_iota_spe.cc b/milena/tests/unit_test/mln_debug_iota_spe.cc
deleted file mode 100644
index 9737fd8..0000000
--- a/milena/tests/unit_test/mln_debug_iota_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/debug/iota.spe.hh.
-// Generated file, do not modify.
-#include <mln/debug/iota.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_debug_println_spe.cc b/milena/tests/unit_test/mln_debug_println_spe.cc
deleted file mode 100644
index 21b199e..0000000
--- a/milena/tests/unit_test/mln_debug_println_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/debug/println.spe.hh.
-// Generated file, do not modify.
-#include <mln/debug/println.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_debug_println_with_border_spe.cc b/milena/tests/unit_test/mln_debug_println_with_border_spe.cc
deleted file mode 100644
index ef5210b..0000000
--- a/milena/tests/unit_test/mln_debug_println_with_border_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/debug/println_with_border.spe.hh.
-// Generated file, do not modify.
-#include <mln/debug/println_with_border.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_extension_adjust.cc b/milena/tests/unit_test/mln_extension_adjust.cc
new file mode 100644
index 0000000..1d376fe
--- /dev/null
+++ b/milena/tests/unit_test/mln_extension_adjust.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/extension/adjust.hh.
+// Generated file, do not modify.
+#include <mln/extension/adjust.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_extension_duplicate.cc b/milena/tests/unit_test/mln_extension_duplicate.cc
new file mode 100644
index 0000000..9f563b1
--- /dev/null
+++ b/milena/tests/unit_test/mln_extension_duplicate.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/extension/duplicate.hh.
+// Generated file, do not modify.
+#include <mln/extension/duplicate.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_internal_array_base.cc b/milena/tests/unit_test/mln_fun_internal_array_base.cc
new file mode 100644
index 0000000..9518656
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_internal_array_base.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/internal/array_base.hh.
+// Generated file, do not modify.
+#include <mln/fun/internal/array_base.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_l2l_relabel.cc b/milena/tests/unit_test/mln_fun_l2l_relabel.cc
new file mode 100644
index 0000000..3e4767c
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_l2l_relabel.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/l2l/relabel.hh.
+// Generated file, do not modify.
+#include <mln/fun/l2l/relabel.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_v2b_lnot.cc b/milena/tests/unit_test/mln_fun_v2b_lnot.cc
new file mode 100644
index 0000000..1f3c714
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_v2b_lnot.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/v2b/lnot.hh.
+// Generated file, do not modify.
+#include <mln/fun/v2b/lnot.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_diff_abs.cc b/milena/tests/unit_test/mln_fun_vv2v_diff_abs.cc
new file mode 100644
index 0000000..10744e6
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_diff_abs.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/diff_abs.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/diff_abs.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_land.cc b/milena/tests/unit_test/mln_fun_vv2v_land.cc
new file mode 100644
index 0000000..a16bf2b
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_land.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/land.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/land.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_land_not.cc b/milena/tests/unit_test/mln_fun_vv2v_land_not.cc
new file mode 100644
index 0000000..65a0a6c
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_land_not.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/land_not.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/land_not.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_lor.cc b/milena/tests/unit_test/mln_fun_vv2v_lor.cc
new file mode 100644
index 0000000..890d1b8
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_lor.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/lor.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/lor.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_lxor.cc b/milena/tests/unit_test/mln_fun_vv2v_lxor.cc
new file mode 100644
index 0000000..fa60f25
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_lxor.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/lxor.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/lxor.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_macros.cc b/milena/tests/unit_test/mln_fun_vv2v_macros.cc
new file mode 100644
index 0000000..8fddf93
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_macros.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/macros.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/macros.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_vv2v_vec.cc b/milena/tests/unit_test/mln_fun_vv2v_vec.cc
new file mode 100644
index 0000000..ea0a52a
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_vv2v_vec.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/vv2v/vec.hh.
+// Generated file, do not modify.
+#include <mln/fun/vv2v/vec.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_x2v_l1_norm.cc b/milena/tests/unit_test/mln_fun_x2v_l1_norm.cc
new file mode 100644
index 0000000..a817155
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_x2v_l1_norm.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/fun/x2v/l1_norm.hh.
+// Generated file, do not modify.
+#include <mln/fun/x2v/l1_norm.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_histo_compute_spe.cc b/milena/tests/unit_test/mln_histo_compute_spe.cc
deleted file mode 100644
index 3516bcb..0000000
--- a/milena/tests/unit_test/mln_histo_compute_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/histo/compute.spe.hh.
-// Generated file, do not modify.
-#include <mln/histo/compute.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_labeling_level_spe.cc b/milena/tests/unit_test/mln_labeling_level_spe.cc
deleted file mode 100644
index 677ab56..0000000
--- a/milena/tests/unit_test/mln_labeling_level_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/labeling/level.spe.hh.
-// Generated file, do not modify.
-#include <mln/labeling/level.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_labeling_relabel.cc b/milena/tests/unit_test/mln_labeling_relabel.cc
new file mode 100644
index 0000000..ec45760
--- /dev/null
+++ b/milena/tests/unit_test/mln_labeling_relabel.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/labeling/relabel.hh.
+// Generated file, do not modify.
+#include <mln/labeling/relabel.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_level_apply_spe.cc b/milena/tests/unit_test/mln_level_apply_spe.cc
deleted file mode 100644
index d5af930..0000000
--- a/milena/tests/unit_test/mln_level_apply_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/apply.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/apply.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_level_assign_spe.cc b/milena/tests/unit_test/mln_level_assign_spe.cc
deleted file mode 100644
index 8d4d615..0000000
--- a/milena/tests/unit_test/mln_level_assign_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/assign.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/assign.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_level_domain.cc b/milena/tests/unit_test/mln_level_domain.cc
new file mode 100644
index 0000000..c627745
--- /dev/null
+++ b/milena/tests/unit_test/mln_level_domain.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/level/domain.hh.
+// Generated file, do not modify.
+#include <mln/level/domain.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_level_fill_with_image_spe.cc b/milena/tests/unit_test/mln_level_fill_with_image_spe.cc
deleted file mode 100644
index 9a3f387..0000000
--- a/milena/tests/unit_test/mln_level_fill_with_image_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/fill_with_image.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/fill_with_image.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_level_fill_with_value_spe.cc b/milena/tests/unit_test/mln_level_fill_with_value_spe.cc
deleted file mode 100644
index fa0d462..0000000
--- a/milena/tests/unit_test/mln_level_fill_with_value_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/fill_with_value.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/fill_with_value.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_level_paste_spe.cc b/milena/tests/unit_test/mln_level_paste_spe.cc
deleted file mode 100644
index bcb2914..0000000
--- a/milena/tests/unit_test/mln_level_paste_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/paste.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/paste.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_level_transform_inplace.cc b/milena/tests/unit_test/mln_level_transform_inplace.cc
new file mode 100644
index 0000000..567f2f0
--- /dev/null
+++ b/milena/tests/unit_test/mln_level_transform_inplace.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/level/transform_inplace.hh.
+// Generated file, do not modify.
+#include <mln/level/transform_inplace.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_level_transform_spe.cc b/milena/tests/unit_test/mln_level_transform_spe.cc
deleted file mode 100644
index 20fd391..0000000
--- a/milena/tests/unit_test/mln_level_transform_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/level/transform.spe.hh.
-// Generated file, do not modify.
-#include <mln/level/transform.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_linear_convolve_2x1d.cc b/milena/tests/unit_test/mln_linear_convolve_2x1d.cc
new file mode 100644
index 0000000..692372d
--- /dev/null
+++ b/milena/tests/unit_test/mln_linear_convolve_2x1d.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/linear/convolve_2x1d.hh.
+// Generated file, do not modify.
+#include <mln/linear/convolve_2x1d.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_linear_line_x2_convolve.cc b/milena/tests/unit_test/mln_linear_line_x2_convolve.cc
deleted file mode 100644
index 8724da7..0000000
--- a/milena/tests/unit_test/mln_linear_line_x2_convolve.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/linear/line_x2_convolve.hh.
-// Generated file, do not modify.
-#include <mln/linear/line_x2_convolve.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_linear_sobel.cc b/milena/tests/unit_test/mln_linear_sobel.cc
deleted file mode 100644
index ffd0ad6..0000000
--- a/milena/tests/unit_test/mln_linear_sobel.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/linear/sobel.hh.
-// Generated file, do not modify.
-#include <mln/linear/sobel.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_linear_sobel_2d.cc b/milena/tests/unit_test/mln_linear_sobel_2d.cc
new file mode 100644
index 0000000..90fa5fb
--- /dev/null
+++ b/milena/tests/unit_test/mln_linear_sobel_2d.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/linear/sobel_2d.hh.
+// Generated file, do not modify.
+#include <mln/linear/sobel_2d.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_logical_and_not_spe.cc b/milena/tests/unit_test/mln_logical_and_not_spe.cc
deleted file mode 100644
index 67f8720..0000000
--- a/milena/tests/unit_test/mln_logical_and_not_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/logical/and_not.spe.hh.
-// Generated file, do not modify.
-#include <mln/logical/and_not.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_logical_and_spe.cc b/milena/tests/unit_test/mln_logical_and_spe.cc
deleted file mode 100644
index 8369a17..0000000
--- a/milena/tests/unit_test/mln_logical_and_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/logical/and.spe.hh.
-// Generated file, do not modify.
-#include <mln/logical/and.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_logical_includes.cc b/milena/tests/unit_test/mln_logical_includes.cc
new file mode 100644
index 0000000..ef129c1
--- /dev/null
+++ b/milena/tests/unit_test/mln_logical_includes.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/logical/includes.hh.
+// Generated file, do not modify.
+#include <mln/logical/includes.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_logical_not_spe.cc b/milena/tests/unit_test/mln_logical_not_spe.cc
deleted file mode 100644
index fb805a1..0000000
--- a/milena/tests/unit_test/mln_logical_not_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/logical/not.spe.hh.
-// Generated file, do not modify.
-#include <mln/logical/not.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_logical_or_spe.cc b/milena/tests/unit_test/mln_logical_or_spe.cc
deleted file mode 100644
index 8ee1df7..0000000
--- a/milena/tests/unit_test/mln_logical_or_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/logical/or.spe.hh.
-// Generated file, do not modify.
-#include <mln/logical/or.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_logical_xor.cc b/milena/tests/unit_test/mln_logical_xor.cc
new file mode 100644
index 0000000..4bdde7a
--- /dev/null
+++ b/milena/tests/unit_test/mln_logical_xor.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/logical/xor.hh.
+// Generated file, do not modify.
+#include <mln/logical/xor.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_make_graph.cc b/milena/tests/unit_test/mln_make_graph.cc
new file mode 100644
index 0000000..a7a7aff
--- /dev/null
+++ b/milena/tests/unit_test/mln_make_graph.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/make/graph.hh.
+// Generated file, do not modify.
+#include <mln/make/graph.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_make_relabelfun.cc b/milena/tests/unit_test/mln_make_relabelfun.cc
new file mode 100644
index 0000000..feb2d7e
--- /dev/null
+++ b/milena/tests/unit_test/mln_make_relabelfun.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/make/relabelfun.hh.
+// Generated file, do not modify.
+#include <mln/make/relabelfun.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_math_diff_abs.cc b/milena/tests/unit_test/mln_math_diff_abs.cc
new file mode 100644
index 0000000..e8ad01c
--- /dev/null
+++ b/milena/tests/unit_test/mln_math_diff_abs.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/math/diff_abs.hh.
+// Generated file, do not modify.
+#include <mln/math/diff_abs.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_metal_ands.cc b/milena/tests/unit_test/mln_metal_ands.cc
new file mode 100644
index 0000000..b1e34fb
--- /dev/null
+++ b/milena/tests/unit_test/mln_metal_ands.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/metal/ands.hh.
+// Generated file, do not modify.
+#include <mln/metal/ands.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_morpho_erosion_spe.cc b/milena/tests/unit_test/mln_morpho_erosion_spe.cc
deleted file mode 100644
index 9eaedd4..0000000
--- a/milena/tests/unit_test/mln_morpho_erosion_spe.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/morpho/erosion.spe.hh.
-// Generated file, do not modify.
-#include <mln/morpho/erosion.spe.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_morpho_skeleton_constrained.cc b/milena/tests/unit_test/mln_morpho_skeleton_constrained.cc
new file mode 100644
index 0000000..e4ff28d
--- /dev/null
+++ b/milena/tests/unit_test/mln_morpho_skeleton_constrained.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/morpho/skeleton_constrained.hh.
+// Generated file, do not modify.
+#include <mln/morpho/skeleton_constrained.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_set_compute.cc b/milena/tests/unit_test/mln_set_compute.cc
new file mode 100644
index 0000000..65b41af
--- /dev/null
+++ b/milena/tests/unit_test/mln_set_compute.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/set/compute.hh.
+// Generated file, do not modify.
+#include <mln/set/compute.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_topo_is_simple_2d.cc b/milena/tests/unit_test/mln_topo_is_simple_2d.cc
new file mode 100644
index 0000000..49351af
--- /dev/null
+++ b/milena/tests/unit_test/mln_topo_is_simple_2d.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/topo/is_simple_2d.hh.
+// Generated file, do not modify.
+#include <mln/topo/is_simple_2d.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_transform_distance_geodesic.cc b/milena/tests/unit_test/mln_transform_distance_geodesic.cc
new file mode 100644
index 0000000..7b3a82a
--- /dev/null
+++ b/milena/tests/unit_test/mln_transform_distance_geodesic.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/transform/distance_geodesic.hh.
+// Generated file, do not modify.
+#include <mln/transform/distance_geodesic.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_transform_influence_zone_geodesic.cc b/milena/tests/unit_test/mln_transform_influence_zone_geodesic.cc
new file mode 100644
index 0000000..d11a9b2
--- /dev/null
+++ b/milena/tests/unit_test/mln_transform_influence_zone_geodesic.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/transform/influence_zone_geodesic.hh.
+// Generated file, do not modify.
+#include <mln/transform/influence_zone_geodesic.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_util_dual_graph.cc b/milena/tests/unit_test/mln_util_dual_graph.cc
new file mode 100644
index 0000000..6b2e34f
--- /dev/null
+++ b/milena/tests/unit_test/mln_util_dual_graph.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/util/dual_graph.hh.
+// Generated file, do not modify.
+#include <mln/util/dual_graph.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_util_edge.cc b/milena/tests/unit_test/mln_util_edge.cc
new file mode 100644
index 0000000..9d4f80c
--- /dev/null
+++ b/milena/tests/unit_test/mln_util_edge.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/util/edge.hh.
+// Generated file, do not modify.
+#include <mln/util/edge.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_util_internal_graph_edge.cc b/milena/tests/unit_test/mln_util_internal_graph_edge.cc
deleted file mode 100644
index 4a13547..0000000
--- a/milena/tests/unit_test/mln_util_internal_graph_edge.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/util/internal/graph_edge.hh.
-// Generated file, do not modify.
-#include <mln/util/internal/graph_edge.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_util_internal_graph_edge_psite.cc b/milena/tests/unit_test/mln_util_internal_graph_edge_psite.cc
deleted file mode 100644
index 299ff89..0000000
--- a/milena/tests/unit_test/mln_util_internal_graph_edge_psite.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/util/internal/graph_edge_psite.hh.
-// Generated file, do not modify.
-#include <mln/util/internal/graph_edge_psite.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_util_internal_graph_psite_base.cc b/milena/tests/unit_test/mln_util_internal_graph_psite_base.cc
deleted file mode 100644
index bf686a9..0000000
--- a/milena/tests/unit_test/mln_util_internal_graph_psite_base.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/util/internal/graph_psite_base.hh.
-// Generated file, do not modify.
-#include <mln/util/internal/graph_psite_base.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_util_internal_graph_vertex.cc b/milena/tests/unit_test/mln_util_internal_graph_vertex.cc
deleted file mode 100644
index 81be820..0000000
--- a/milena/tests/unit_test/mln_util_internal_graph_vertex.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/util/internal/graph_vertex.hh.
-// Generated file, do not modify.
-#include <mln/util/internal/graph_vertex.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_util_internal_graph_vertex_psite.cc b/milena/tests/unit_test/mln_util_internal_graph_vertex_psite.cc
deleted file mode 100644
index c9d6825..0000000
--- a/milena/tests/unit_test/mln_util_internal_graph_vertex_psite.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Unit test for mln/util/internal/graph_vertex_psite.hh.
-// Generated file, do not modify.
-#include <mln/util/internal/graph_vertex_psite.hh>
-
-int main()
-{
- // Nothing.
-}
diff --git a/milena/tests/unit_test/mln_util_max.cc b/milena/tests/unit_test/mln_util_max.cc
new file mode 100644
index 0000000..2f466b8
--- /dev/null
+++ b/milena/tests/unit_test/mln_util_max.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/util/max.hh.
+// Generated file, do not modify.
+#include <mln/util/max.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_util_vertex.cc b/milena/tests/unit_test/mln_util_vertex.cc
new file mode 100644
index 0000000..ceff3e5
--- /dev/null
+++ b/milena/tests/unit_test/mln_util_vertex.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/util/vertex.hh.
+// Generated file, do not modify.
+#include <mln/util/vertex.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_value_label_16.cc b/milena/tests/unit_test/mln_value_label_16.cc
new file mode 100644
index 0000000..9db5df4
--- /dev/null
+++ b/milena/tests/unit_test/mln_value_label_16.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/value/label_16.hh.
+// Generated file, do not modify.
+#include <mln/value/label_16.hh>
+
+int main()
+{
+ // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_value_label_8.cc b/milena/tests/unit_test/mln_value_label_8.cc
new file mode 100644
index 0000000..8b19799
--- /dev/null
+++ b/milena/tests/unit_test/mln_value_label_8.cc
@@ -0,0 +1,8 @@
+// Unit test for mln/value/label_8.hh.
+// Generated file, do not modify.
+#include <mln/value/label_8.hh>
+
+int main()
+{
+ // Nothing.
+}
--
1.5.6.5
1
0
* mln/core/concept/function.hh: add Function_l2b and Function_l2l.
* mln/fun/i2v/array.hh: inherits from array_base.
* mln/fun/internal/array_base.hh: base implementation for functions
based on an array.
* mln/fun/l2l/relabel.hh: l2l function used in labeling::relabel.
* mln/labeling/blobs.hh: use literal::zero and compare output(p) to
literal::zero instead of using operator!.
* mln/labeling/relabel.hh: new routine.
* mln/make/relabelfun.hh: new. Create a l2l function from a l2b
function.
* mln/value/label.hh: update. Make it work.
* mln/value/label_16.hh,
* mln/value/label_8.hh: New aliases.
* tests/labeling/Makefile.am,
* tests/labeling/relabel.cc: add a new test for labeling::relabel.
---
milena/ChangeLog | 29 +++
milena/mln/core/concept/function.hh | 200 +++++++++++++-------
milena/mln/fun/i2v/array.hh | 63 ++-----
.../fun/{i2v/array.hh => internal/array_base.hh} | 146 +++++----------
milena/mln/fun/{i2v/array.hh => l2l/relabel.hh} | 161 +++++++---------
milena/mln/labeling/blobs.hh | 47 +++---
milena/mln/labeling/relabel.hh | 130 +++++++++++++
milena/mln/make/relabelfun.hh | 93 +++++++++
milena/mln/value/label.hh | 142 +++++++-------
milena/mln/value/label_16.hh | 54 ++++++
milena/mln/value/label_8.hh | 54 ++++++
milena/tests/labeling/Makefile.am | 4 +-
milena/tests/labeling/relabel.cc | 96 ++++++++++
13 files changed, 808 insertions(+), 411 deletions(-)
copy milena/mln/fun/{i2v/array.hh => internal/array_base.hh} (58%)
copy milena/mln/fun/{i2v/array.hh => l2l/relabel.hh} (53%)
create mode 100644 milena/mln/labeling/relabel.hh
create mode 100644 milena/mln/make/relabelfun.hh
create mode 100644 milena/mln/value/label_16.hh
create mode 100644 milena/mln/value/label_8.hh
create mode 100644 milena/tests/labeling/relabel.cc
diff --git a/milena/ChangeLog b/milena/ChangeLog
index c8f90ed..07bdbdc 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,3 +1,32 @@
+2008-11-20 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Add labeling::relabel.
+
+ * mln/core/concept/function.hh: add Function_l2b and Function_l2l.
+
+ * mln/fun/i2v/array.hh: inherits from array_base.
+
+ * mln/fun/internal/array_base.hh: base implementation for functions
+ based on an array.
+
+ * mln/fun/l2l/relabel.hh: l2l function used in labeling::relabel.
+
+ * mln/labeling/blobs.hh: use literal::zero and compare output(p) to
+ literal::zero instead of using operator!.
+
+ * mln/labeling/relabel.hh: new routine.
+
+ * mln/make/relabelfun.hh: new. Create a l2l function from a l2b
+ function.
+
+ * mln/value/label.hh: update. Make it work.
+
+ * mln/value/label_16.hh,
+ * mln/value/label_8.hh: New aliases.
+
+ * tests/labeling/Makefile.am,
+ * tests/labeling/relabel.cc: add a new test for labeling::relabel.
+
2008-11-20 Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Bench the diff between canvas as class v. as procedure.
diff --git a/milena/mln/core/concept/function.hh b/milena/mln/core/concept/function.hh
index 68cb2d8..37112a4 100644
--- a/milena/mln/core/concept/function.hh
+++ b/milena/mln/core/concept/function.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -28,10 +29,9 @@
#ifndef MLN_CORE_CONCEPT_FUNCTION_HH
# define MLN_CORE_CONCEPT_FUNCTION_HH
-/*! \file mln/core/concept/function.hh
- *
- * \brief Definition of several concepts of functions.
- */
+/// \file mln/core/concept/function.hh
+///
+/// Definition of several concepts of functions.
# include <mln/core/concept/object.hh>
@@ -48,10 +48,11 @@ namespace mln
template <typename E> struct Function_p2b;
template <typename E> struct Function_p2p;
template <typename E> struct Function_x2x;
+ template <typename E> struct Function_l2b;
+ template <typename E> struct Function_l2l;
template <typename E> struct Function_vv2v;
-
/// Function category flag type.
template <>
struct Function<void>
@@ -60,19 +61,20 @@ namespace mln
};
- /*! \brief Base class for implementation of function-objects.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function : public Object<E>
{
typedef Function<void> category;
- /*
- An operator() has to be provided. Its signature depends
- on the particular function-object one considers.
- */
+ /*
+ ** An operator() has to be provided. Its signature depends
+ ** on the particular function-object one considers.
+ */
+
protected:
Function();
Function(const Function&);
@@ -86,12 +88,11 @@ namespace mln
template <>
struct Function_v2v<void> { typedef Function<void> super; };
- /*!
- * \brief Base class for implementation of function-objects from
- * value to value.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from
+ /// value to value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_v2v : public Function<E>
{
@@ -109,12 +110,11 @@ namespace mln
template <>
struct Function_i2v<void> { typedef Function_v2v<void> super; };
- /*!
- * \brief Base class for implementation of function-objects from
- * index to value.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from
+ /// index to value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_i2v : public Function_v2v<E>
{
@@ -132,12 +132,11 @@ namespace mln
template <>
struct Function_p2v<void> { typedef Function_v2v<void> super; };
- /*!
- * \brief Base class for implementation of function-objects from point to
- * value.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from point to
+ /// value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_p2v : public virtual Function_v2v<E>
{
@@ -155,12 +154,11 @@ namespace mln
template <>
struct Function_v2b<void> { typedef Function_v2v<void> super; };
- /*!
- * \brief Base class for implementation of function-objects from value to
- * bool.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from value to
+ /// bool.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_v2b : public virtual Function_v2v<E>
{
@@ -179,12 +177,11 @@ namespace mln
template <>
struct Function_p2b<void> { typedef Function_p2v<void> super; }; // FIXME
- /*!
- * \brief Base class for implementation of function-objects from point to
- * bool.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from point to
+ /// bool.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_p2b : public Function_p2v<E>,
public Function_v2b<E>
@@ -204,12 +201,11 @@ namespace mln
template <>
struct Function_p2p<void> { typedef Function_p2v<void> super; }; // FIXME
- /*!
- * \brief Base class for implementation of function-objects from point to
- * point.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from point to
+ /// point.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_p2p : public Function_p2v<E>
{
@@ -227,12 +223,11 @@ namespace mln
template <>
struct Function_x2x<void> { typedef Function_v2v<void> super; }; // FIXME
- /*!
- * \brief Base class for implementation of function-objects from vector to
- * vector.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from vector to
+ /// Vector.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_x2x : public Function_v2v<E>
{
@@ -247,12 +242,11 @@ namespace mln
| Vector <-> Vector. |
`--------------------*/
- /*!
- * \brief Base class for implementation of bijective function-objects from
- * vector to vector.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of bijective function-objects from
+ /// vector to vector.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Bijection_x2x : public Function_x2x< E >
{
@@ -265,6 +259,50 @@ namespace mln
};
+ /*-----------------.
+ | Label -> Value. |
+ `-----------------*/
+
+ template <>
+ struct Function_l2b<void> { typedef Function_v2b<void> super; };
+
+ /// Base class for implementation of function-objects from
+ /// label to value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
+ template <typename E>
+ struct Function_l2b : public Function_v2b<E>
+ {
+ typedef Function_l2b<void> category;
+ protected:
+ Function_l2b();
+ Function_l2b(const Function_l2b&);
+ };
+
+
+ /*-----------------.
+ | Label -> Label. |
+ `-----------------*/
+
+ template <>
+ struct Function_l2l<void> { typedef Function_v2v<void> super; };
+
+ /// Base class for implementation of function-objects from
+ /// label to value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
+ template <typename E>
+ struct Function_l2l : public Function_v2v<E>
+ {
+ typedef Function_l2l<void> category;
+ protected:
+ Function_l2l();
+ Function_l2l(const Function_l2l&);
+ };
+
+
/*------------------------.
| Value, Value -> Value. |
`------------------------*/
@@ -272,12 +310,11 @@ namespace mln
template <>
struct Function_vv2v<void> { typedef Function<void> super; };
- /*!
- * \brief Base class for implementation of function-objects from
- * a couple of values to a value.
- *
- * The parameter \a E is the exact type.
- */
+ /// Base class for implementation of function-objects from
+ /// a couple of values to a value.
+ ///
+ /// The parameter \a E is the exact type.
+ ///
template <typename E>
struct Function_vv2v : public Function<E>
{
@@ -408,6 +445,33 @@ namespace mln
template <typename E>
inline
+ Function_l2b<E>::Function_l2b()
+ {
+ }
+
+ template <typename E>
+ inline
+ Function_l2b<E>::Function_l2b(const Function_l2b<E>& rhs)
+ : Function_v2v<E>(rhs),
+ Function_v2b<E>(rhs)
+ {
+ }
+
+ template <typename E>
+ inline
+ Function_l2l<E>::Function_l2l()
+ {
+ }
+
+ template <typename E>
+ inline
+ Function_l2l<E>::Function_l2l(const Function_l2l<E>& rhs)
+ : Function_v2v<E>(rhs)
+ {
+ }
+
+ template <typename E>
+ inline
Function_vv2v<E>::Function_vv2v()
{
}
diff --git a/milena/mln/fun/i2v/array.hh b/milena/mln/fun/i2v/array.hh
index a97bf33..ee9b1bb 100644
--- a/milena/mln/fun/i2v/array.hh
+++ b/milena/mln/fun/i2v/array.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2008 EPITA Research and Development Laboratory
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,6 +34,7 @@
# include <vector>
# include <algorithm>
+# include <mln/fun/internal/array_base.hh>
# include <mln/core/concept/function.hh>
# include <mln/util/array.hh>
@@ -41,7 +42,6 @@
namespace mln
{
-
/// Forward declaration.
namespace fun
{
@@ -74,7 +74,6 @@ namespace mln
} // end of namespace mln::convert
-
namespace fun
{
@@ -82,11 +81,12 @@ namespace mln
{
template <typename T>
- class array : public Function_i2v< array<T> >
+ class array : public Function_i2v< array<T> >,
+ public internal::array_base<T>
{
- public:
+ typedef internal::array_base<T> super_base_;
- typedef T result;
+ public:
/// Constructors
/// \{
@@ -95,6 +95,8 @@ namespace mln
array();
/// Constructs a function with \p nvalues.
array(unsigned n);
+ /// Constructs a function with \p nvalues and \p val as default value.
+ array(unsigned n, const T& val);
/// Used in from_to(). Constructs that function from an util::array.
/// Always prefer using from_to instead of this constructor.
@@ -105,14 +107,6 @@ namespace mln
/// \}
- void resize(unsigned n);
- unsigned size() const;
-
- const T& operator()(unsigned i) const;
- T& operator()(unsigned i);
-
- private:
- std::vector<T> v_;
};
} // end of namespace mln::fun::i2v
@@ -120,6 +114,7 @@ namespace mln
} // end of namespace mln::fun
+
# ifndef MLN_INCLUDE_ONLY
@@ -165,14 +160,14 @@ namespace mln
template <typename T>
inline
array<T>::array(unsigned n)
+ : super_base_(n)
{
- resize(n);
}
template <typename T>
inline
array<T>::array(const util::array<T>& from)
- : v_(from.std_vector())
+ : super_base_(from)
{
}
@@ -180,45 +175,11 @@ namespace mln
template <typename T>
inline
array<T>::array(const std::vector<T>& from)
- : v_(from)
+ : super_base_(from)
{
}
- template <typename T>
- inline
- void
- array<T>::resize(unsigned n)
- {
- v_.resize(n);
- }
-
- template <typename T>
- inline
- unsigned
- array<T>::size() const
- {
- return v_.size();
- }
-
- template <typename T>
- inline
- const T&
- array<T>::operator()(unsigned i) const
- {
- mln_precondition(i < v_.size());
- return v_[i];
- }
-
- template <typename T>
- inline
- T&
- array<T>::operator()(unsigned i)
- {
- mln_precondition(i < v_.size());
- return v_[i];
- }
-
} // end of namespace mln::fun::i2v
} // end of namespace mln::fun
diff --git a/milena/mln/fun/i2v/array.hh b/milena/mln/fun/internal/array_base.hh
similarity index 58%
copy from milena/mln/fun/i2v/array.hh
copy to milena/mln/fun/internal/array_base.hh
index a97bf33..32abb8a 100644
--- a/milena/mln/fun/i2v/array.hh
+++ b/milena/mln/fun/internal/array_base.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2008 EPITA Research and Development Laboratory
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -25,10 +25,10 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-#ifndef MLN_FUN_I2V_ARRAY_HH
-# define MLN_FUN_I2V_ARRAY_HH
+#ifndef MLN_FUN_INTERNAL_ARRAY_BASE_HH
+# define MLN_FUN_INTERNAL_ARRAY_BASE_HH
-/// \file mln/fun/i2v/array.hh
+/// \file mln/fun/internal/array_base.hh
///
/// Function mapping an Id i to a value v.
@@ -41,137 +41,92 @@
namespace mln
{
-
- /// Forward declaration.
namespace fun
{
- namespace i2v
+ namespace internal
{
template <typename T>
- class array;
-
- } // end of namespace mln::fun::i2v
-
- } // end of namespace mln::fun
-
-
-
- namespace convert
- {
-
- template <typename T>
- inline
- void
- from_to(const util::array<T>& from, fun::i2v::array<T>& to);
-
- template <typename T>
- inline
- void
- from_to(const std::vector<T>& from, fun::i2v::array<T>& to);
-
- } // end of namespace mln::convert
+ class array_base
+ {
+ public:
+ typedef T result;
+ void resize(unsigned n);
+ unsigned size() const;
- namespace fun
- {
+ const T& operator()(unsigned i) const;
+ T& operator()(unsigned i);
- namespace i2v
- {
- template <typename T>
- class array : public Function_i2v< array<T> >
- {
- public:
+ protected:
- typedef T result;
+ std::vector<T> v_;
/// Constructors
/// \{
/// Default.
- array();
- /// Constructs a function with \p nvalues.
- array(unsigned n);
+ array_base();
+ /// Constructs an array with \p nvalues.
+ array_base(unsigned n);
- /// Used in from_to(). Constructs that function from an util::array.
+ /// Constructs an array with \p nvalues and \p val as value.
+ array_base(unsigned n, const T& val);
+
+ /// Used in from_to(). Constructs that object from an util::array.
/// Always prefer using from_to instead of this constructor.
- array(const util::array<T>& from);
- /// Used in from_to(). Constructs that function from an std::vector.
+ array_base(const util::array<T>& from);
+ /// Used in from_to(). Constructs that object from an std::vector.
/// Always prefer using from_to instead of this constructor.
- array(const std::vector<T>& from);
+ array_base(const std::vector<T>& from);
/// \}
- void resize(unsigned n);
- unsigned size() const;
-
- const T& operator()(unsigned i) const;
- T& operator()(unsigned i);
-
- private:
- std::vector<T> v_;
};
- } // end of namespace mln::fun::i2v
+ } // end of namespace mln::fun::internal
} // end of namespace mln::fun
-# ifndef MLN_INCLUDE_ONLY
-
-
- // convert::from_to
-
- namespace convert
- {
-
- template <typename T>
- inline
- void
- from_to(const util::array<T>& from, fun::i2v::array<T>& to)
- {
- to = fun::i2v::array<T>(from);
- }
-
- template <typename T>
- inline
- void
- from_to(const std::vector<T>& from, fun::i2v::array<T>& to)
- {
- to = fun::i2v::array<T>(from);
- }
-
- } // end of namespace mln::convert
+# ifndef MLN_INCLUDE_ONLY
- /// fun::i2v::array
+ /// fun::internal::array_base
namespace fun
{
- namespace i2v
+ namespace internal
{
template <typename T>
inline
- array<T>::array()
+ array_base<T>::array_base()
{
}
template <typename T>
inline
- array<T>::array(unsigned n)
+ array_base<T>::array_base(unsigned n)
+ : v_(n)
{
- resize(n);
}
template <typename T>
inline
- array<T>::array(const util::array<T>& from)
+ array_base<T>::array_base(unsigned n, const T& val)
+ : v_(n, val)
+ {
+ }
+
+ template <typename T>
+ inline
+ array_base<T>::array_base(const util::array<T>& from)
: v_(from.std_vector())
{
@@ -179,7 +134,7 @@ namespace mln
template <typename T>
inline
- array<T>::array(const std::vector<T>& from)
+ array_base<T>::array_base(const std::vector<T>& from)
: v_(from)
{
@@ -188,7 +143,7 @@ namespace mln
template <typename T>
inline
void
- array<T>::resize(unsigned n)
+ array_base<T>::resize(unsigned n)
{
v_.resize(n);
}
@@ -196,7 +151,7 @@ namespace mln
template <typename T>
inline
unsigned
- array<T>::size() const
+ array_base<T>::size() const
{
return v_.size();
}
@@ -204,7 +159,7 @@ namespace mln
template <typename T>
inline
const T&
- array<T>::operator()(unsigned i) const
+ array_base<T>::operator()(unsigned i) const
{
mln_precondition(i < v_.size());
return v_[i];
@@ -213,27 +168,20 @@ namespace mln
template <typename T>
inline
T&
- array<T>::operator()(unsigned i)
+ array_base<T>::operator()(unsigned i)
{
mln_precondition(i < v_.size());
return v_[i];
}
- } // end of namespace mln::fun::i2v
+ } // end of namespace mln::fun::internal
} // end of namespace mln::fun
- template <typename T>
- inline
- fun::i2v::array<T> array(T t)
- {
- fun::i2v::array<T> tmp(t);
- return tmp;
- }
# endif // ! MLN_INCLUDE_ONLY
} // end of namespace mln
-#endif // ! MLN_FUN_I2V_ARRAY_HH
+#endif // ! MLN_FUN_INTERNAL_ARRAY_BASE_HH
diff --git a/milena/mln/fun/i2v/array.hh b/milena/mln/fun/l2l/relabel.hh
similarity index 53%
copy from milena/mln/fun/i2v/array.hh
copy to milena/mln/fun/l2l/relabel.hh
index a97bf33..f4cd50a 100644
--- a/milena/mln/fun/i2v/array.hh
+++ b/milena/mln/fun/l2l/relabel.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2008 EPITA Research and Development Laboratory
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -25,34 +25,36 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-#ifndef MLN_FUN_I2V_ARRAY_HH
-# define MLN_FUN_I2V_ARRAY_HH
+#ifndef MLN_FUN_L2L_ARRAY_HH
+# define MLN_FUN_L2L_ARRAY_HH
-/// \file mln/fun/i2v/array.hh
+/// \file mln/fun/l2l/array.hh
///
-/// Function mapping an Id i to a value v.
+/// Function mapping a label to a new one.
+/// \sa mln::labeling::relabel
# include <vector>
# include <algorithm>
+# include <mln/fun/internal/array_base.hh>
# include <mln/core/concept/function.hh>
# include <mln/util/array.hh>
+# include <mln/metal/converts_to.hh>
namespace mln
{
-
/// Forward declaration.
namespace fun
{
- namespace i2v
+ namespace l2l
{
- template <typename T>
- class array;
+ template <typename L>
+ class relabel;
- } // end of namespace mln::fun::i2v
+ } // end of namespace mln::fun::l2l
} // end of namespace mln::fun
@@ -61,58 +63,51 @@ namespace mln
namespace convert
{
- template <typename T>
+ template <typename L>
inline
void
- from_to(const util::array<T>& from, fun::i2v::array<T>& to);
+ from_to(const util::array<L>& from,
+ fun::l2l::relabel<L>& to);
- template <typename T>
+ template <typename L>
inline
void
- from_to(const std::vector<T>& from, fun::i2v::array<T>& to);
+ from_to(const std::vector<L>& from,
+ fun::l2l::relabel<L>& to);
} // end of namespace mln::convert
-
namespace fun
{
- namespace i2v
+ namespace l2l
{
- template <typename T>
- class array : public Function_i2v< array<T> >
+ template <typename L>
+ class relabel : public Function_l2l< relabel<L> >,
+ public internal::array_base<L>
{
- public:
+ typedef internal::array_base<L> super_base_;
- typedef T result;
-
- /// Constructors
- /// \{
+ public:
/// Default.
- array();
+ relabel();
/// Constructs a function with \p nvalues.
- array(unsigned n);
+ relabel(unsigned n);
+ /// Constructs a function with \p nvalues and \p label as default label.
+ relabel(unsigned n, const L& label);
/// Used in from_to(). Constructs that function from an util::array.
/// Always prefer using from_to instead of this constructor.
- array(const util::array<T>& from);
+ relabel(const util::array<L>& from);
/// Used in from_to(). Constructs that function from an std::vector.
/// Always prefer using from_to instead of this constructor.
- array(const std::vector<T>& from);
+ relabel(const std::vector<L>& from);
/// \}
- void resize(unsigned n);
- unsigned size() const;
-
- const T& operator()(unsigned i) const;
- T& operator()(unsigned i);
-
- private:
- std::vector<T> v_;
};
} // end of namespace mln::fun::i2v
@@ -120,6 +115,7 @@ namespace mln
} // end of namespace mln::fun
+
# ifndef MLN_INCLUDE_ONLY
@@ -128,112 +124,87 @@ namespace mln
namespace convert
{
- template <typename T>
+ template <typename L>
inline
void
- from_to(const util::array<T>& from, fun::i2v::array<T>& to)
+ from_to(const util::array<L>& from, fun::l2l::relabel<L>& to)
{
- to = fun::i2v::array<T>(from);
+ to = fun::l2l::relabel<L>(from);
}
- template <typename T>
+ template <typename L>
inline
void
- from_to(const std::vector<T>& from, fun::i2v::array<T>& to)
+ from_to(const std::vector<L>& from, fun::l2l::relabel<L>& to)
{
- to = fun::i2v::array<T>(from);
+ to = fun::l2l::relabel<L>(from);
}
} // end of namespace mln::convert
- /// fun::i2v::array
+ /// fun::l2l::relabel
namespace fun
{
- namespace i2v
+ namespace l2l
{
- template <typename T>
+ template <typename L>
inline
- array<T>::array()
+ relabel<L>::relabel()
{
+ // FIXME: Too restrictive?
+ mlc_converts_to(L, unsigned)::check();
}
- template <typename T>
+ template <typename L>
inline
- array<T>::array(unsigned n)
+ relabel<L>::relabel(unsigned n)
+ : super_base_(n)
{
- resize(n);
+ // FIXME: Too restrictive?
+ mlc_converts_to(L, unsigned)::check();
}
- template <typename T>
+ template <typename L>
inline
- array<T>::array(const util::array<T>& from)
- : v_(from.std_vector())
+ relabel<L>::relabel(unsigned n, const L& label)
+ : super_base_(n, label)
{
-
+ // FIXME: Too restrictive?
+ mlc_converts_to(L, unsigned)::check();
}
- template <typename T>
+ template <typename L>
inline
- array<T>::array(const std::vector<T>& from)
- : v_(from)
+ relabel<L>::relabel(const util::array<L>& from)
+ : super_base_(from)
{
-
+ // FIXME: Too restrictive?
+ mlc_converts_to(L, unsigned)::check();
}
- template <typename T>
+ template <typename L>
inline
- void
- array<T>::resize(unsigned n)
+ relabel<L>::relabel(const std::vector<L>& from)
+ : super_base_(from)
{
- v_.resize(n);
+ // FIXME: Too restrictive?
+ mlc_converts_to(L, unsigned)::check();
}
- template <typename T>
- inline
- unsigned
- array<T>::size() const
- {
- return v_.size();
- }
- template <typename T>
- inline
- const T&
- array<T>::operator()(unsigned i) const
- {
- mln_precondition(i < v_.size());
- return v_[i];
- }
+# endif // ! MLN_INCLUDE_ONLY
- template <typename T>
- inline
- T&
- array<T>::operator()(unsigned i)
- {
- mln_precondition(i < v_.size());
- return v_[i];
- }
- } // end of namespace mln::fun::i2v
+ } // end of namespace mln::fun::l2l
} // end of namespace mln::fun
- template <typename T>
- inline
- fun::i2v::array<T> array(T t)
- {
- fun::i2v::array<T> tmp(t);
- return tmp;
- }
-
-# endif // ! MLN_INCLUDE_ONLY
-
} // end of namespace mln
-#endif // ! MLN_FUN_I2V_ARRAY_HH
+#endif // ! MLN_FUN_L2L_ARRAY_HH
diff --git a/milena/mln/labeling/blobs.hh b/milena/mln/labeling/blobs.hh
index 9f521a9..f5d6689 100644
--- a/milena/mln/labeling/blobs.hh
+++ b/milena/mln/labeling/blobs.hh
@@ -29,13 +29,12 @@
#ifndef MLN_LABELING_BLOBS_HH
# define MLN_LABELING_BLOBS_HH
-/*! \file mln/labeling/blobs.hh
- *
- * \brief Connected component labeling of the binary objects of a binary
- * image using a queue-based algorithm.
- *
- * \todo Handle abort in a nice way...
- */
+/// \file mln/labeling/blobs.hh
+///
+/// Connected component labeling of the binary objects of a binary
+/// image using a queue-based algorithm.
+///
+/// \todo Handle abort in a nice way...
# include <mln/core/concept/image.hh>
# include <mln/core/concept/neighborhood.hh>
@@ -50,19 +49,19 @@ namespace mln
namespace labeling
{
- /*! Connected component labeling of the binary objects of a binary
- * image.
- *
- * \param[in] input The input image.
- * \param[in] nbh The connexity of the objects.
- * \param[out] nlabels The number of labels.
- * \return The label image.
- *
- * \pre The input image has to be binary (checked at compile-time).
- *
- * A fast queue is used so that the algorithm is not recursive and
- * can handle large binary objects (blobs).
- */
+ /// Connected component labeling of the binary objects of a binary
+ /// image.
+ ///
+ /// \param[in] input The input image.
+ /// \param[in] nbh The connexity of the objects.
+ /// \param[out] nlabels The number of labels.
+ /// \return The label image.
+ ///
+ /// \pre The input image has to be binary (checked at compile-time).
+ ///
+ /// A fast queue is used so that the algorithm is not recursive and
+ /// can handle large binary objects (blobs).
+ ///
template <typename I, typename N, typename L>
mln_ch_value(I, L)
blobs(const Image<I>& input, const Neighborhood<N>& nbh,
@@ -88,15 +87,15 @@ namespace mln
p_queue_fast<P> qu;
// Initialization.
- nlabels = 0;
+ nlabels = literal::zero;
mln_ch_value(I, L) output;
initialize(output, input);
- level::fill(output, 0);
+ level::fill(output, literal::zero);
// Loop.
mln_piter(I) p(input.domain());
for_all(p)
- if (input(p) && ! output(p)) // Object point, not labeled yet.
+ if (input(p) && output(p) == literal::zero) // Object point, not labeled yet.
{
// Label this point component.
if (nlabels == mln_max(L))
@@ -113,7 +112,7 @@ namespace mln
cur = qu.front();
qu.pop();
for_all(n) if (input.has(n))
- if (input(n) && ! output(n))
+ if (input(n) && output(n) == literal::zero)
{
mln_invariant(! qu.compute_has(n));
qu.push(n);
diff --git a/milena/mln/labeling/relabel.hh b/milena/mln/labeling/relabel.hh
new file mode 100644
index 0000000..841cd1c
--- /dev/null
+++ b/milena/mln/labeling/relabel.hh
@@ -0,0 +1,130 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory
+// (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_LABELING_RELABEL_HH
+# define MLN_LABELING_RELABEL_HH
+
+/// \file mln/labeling/relabel.hh
+///
+/// Remove components and relabel a labeled image.
+
+# include <mln/core/concept/image.hh>
+# include <mln/make/relabelfun.hh>
+# include <mln/level/transform.hh>
+# include <mln/level/transform_inplace.hh>
+# include <mln/value/label.hh>
+
+namespace mln
+{
+
+ namespace labeling
+ {
+
+ /// Remove components and relabel a labeled image.
+ /// \input[in] label the labeled image.
+ /// \input[in] nlabels the number of labels in \p label.
+ /// \input[out] new_nlabels the number of labels after relabeling.
+ /// \input[in] f function returning the new component id for each pixel
+ /// value.
+ ///
+ /// \return the relabeled image.
+ template <typename I, typename F>
+ mln_concrete(I)
+ relabel(const Image<I>& label,
+ const mln_value(I)& nlabels,
+ mln_value(I)& new_nlabels,
+ const Function_l2b<F>& fl2b);
+
+ /// Remove components and relabel a labeled image inplace.
+ /// \input[in, out] label the labeled image.
+ /// \input[in, out] nlabels the number of labels in \p label.
+ /// \input[in] f function returning the new component id for each
+ /// pixel value.
+ ///
+ template <typename I, typename F>
+ void
+ relabel_inplace(Image<I>& label,
+ mln_value(I)& nlabels,
+ const Function_l2b<F>& fl2b);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+
+ template <typename I, typename F>
+ inline
+ mln_concrete(I)
+ relabel(const Image<I>& label,
+ const mln_value(I)& nlabels,
+ mln_value(I)& new_nlabels,
+ const Function_l2b<F>& fl2b)
+ {
+ trace::entering("labeling::relabel");
+
+ // FIXME: we may want to check that it is exactly a label.
+ mlc_is_a(mln_value(I), mln::value::Symbolic)::check();
+ mln_precondition(exact(label).has_data());
+
+ typedef fun::l2l::relabel<mln_value(I)> fl2l_t;
+ fl2l_t fl2l = make::relabelfun(fl2b, nlabels, new_nlabels);
+ mln_concrete(I) output = level::transform(label, fl2l);
+
+ trace::exiting("labeling::relabel");
+ return output;
+ }
+
+
+ template <typename I, typename F>
+ inline
+ void
+ relabel_inplace(Image<I>& label,
+ mln_value(I)& nlabels,
+ const Function_l2b<F>& fl2b)
+ {
+ trace::entering("labeling::relabel");
+
+ // FIXME: we may want to check that it is exactly a label.
+ mlc_is_a(mln_value(I), mln::value::Symbolic)::check();
+ mln_precondition(exact(label).has_data());
+
+ typedef fun::l2l::relabel<mln_value(I)> fl2l_t;
+ fl2l_t fl2l = make::relabelfun(fl2b, nlabels, nlabels);
+ level::transform_inplace(label, fl2l);
+
+ trace::exiting("labeling::relabel");
+ }
+
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::labeling
+
+} // end of namespace mln
+
+
+#endif // ! MLN_LABELING_RELABEL_HH
diff --git a/milena/mln/make/relabelfun.hh b/milena/mln/make/relabelfun.hh
new file mode 100644
index 0000000..d02dd88
--- /dev/null
+++ b/milena/mln/make/relabelfun.hh
@@ -0,0 +1,93 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_MAKE_RELABELFUN_HH
+# define MLN_MAKE_RELABELFUN_HH
+
+/// \file mln/make/relabelfun.hh
+///
+/// Routines to construct a function in order to relabel a labeled image.
+
+# include <mln/core/concept/function.hh>
+# include <mln/fun/l2l/relabel.hh>
+# include <mln/value/label.hh>
+
+namespace mln
+{
+
+ namespace make
+ {
+
+ /// Create a l2l function from a l2b function.
+ /// This function can be used to relabel a labeled image.
+ ///
+ /// \param[in] f a l2b function.
+ ///
+ /// \return a l2l function.
+ ///
+ /// \sa mln::labeling::relabel
+ template <unsigned n, typename F>
+ mln::fun::l2l::relabel< value::label<n> >
+ relabelfun(const mln::Function_l2b<F>& fl2b,
+ const value::label<n>& nlabels);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ template <unsigned n, typename F>
+ inline
+ mln::fun::l2l::relabel< value::label<n> >
+ relabelfun(const mln::Function_l2b<F>& fl2b_,
+ const value::label<n>& nlabels,
+ value::label<n>& new_nlabels)
+ {
+ trace::entering("mln::make::relabelfun");
+
+ const F& fl2b = exact(fl2b_);
+
+ value::label<n> tmp_nlabels = literal::zero;
+ typedef value::label<n> label_t;
+ fun::l2l::relabel<label_t> fl2l(nlabels.next(), literal::zero);
+ for (label_t i = 1; i <= nlabels; ++i)
+ if (fl2b(i))
+ {
+ fl2l(i) = i;
+ ++tmp_nlabels;
+ }
+ new_nlabels = tmp_nlabels;
+ trace::exiting("mln::make::relabelfun");
+ return fl2l;
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::make
+
+} // end of namespace mln
+
+
+#endif // ! MLN_MAKE_RELABELFUN_HH
diff --git a/milena/mln/value/label.hh b/milena/mln/value/label.hh
index 7eb1be0..02eec94 100644
--- a/milena/mln/value/label.hh
+++ b/milena/mln/value/label.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -28,10 +28,9 @@
#ifndef MLN_VALUE_LABEL_HH
# define MLN_VALUE_LABEL_HH
-/*! \file mln/value/label.hh
- *
- * \brief Define a generic class for labels.
- */
+/// \file mln/value/label.hh
+///
+/// Define a generic class for labels.
# include <mln/metal/math/pow.hh>
# include <mln/value/concept/symbolic.hh>
@@ -44,11 +43,14 @@
namespace mln
{
- // Fwd decl.
+ // Forward declaration.
namespace value {
template <unsigned n> struct label;
}
+ namespace literal {
+ struct zero_t;
+ }
namespace trait
@@ -59,6 +61,7 @@ namespace mln
{
private:
typedef mln::value::label<n> self_;
+
public:
enum {
@@ -71,7 +74,7 @@ namespace mln
typedef mln_value_quant_from_(card) quant;
static const self_ min() { return 0; }
- static const self_ max() { return card - 1; }
+ static const self_ max() { return mlc_pow_int(2, n) - 1; }
};
} // end of namespace trait
@@ -82,90 +85,70 @@ namespace mln
{
- /*! \brief Label value class.
- *
- * The parameter \c n is the number of encoding bits.
- */
+ /// Label value class.
+ ///
+ /// The parameter \c n is the number of encoding bits.
+ ///
template <unsigned n>
- struct label : public Symbolic< label<n> >
+ struct label
+ : public Symbolic< label<n> >,
+ public internal::value_like_< unsigned, // Equivalent.
+ typename internal::encoding_unsigned_<n>::ret, // Enc.
+ int, // Interoperation.
+ label<n> > // Exact.
+
{
public:
-
/// Encoding associated type.
typedef typename internal::encoding_unsigned_<n>::ret enc;
- /// Equivalent associated type.
- typedef typename internal::encoding_unsigned_<n>::ret equiv;
-
/// Constructor without argument.
label();
/// Constructor from an (unsigned) integer.
label(unsigned i);
+ /// Constructor from literal::zero.
+ label(const literal::zero_t& v);
+
+ /// Conversion to an unsigned integer.
+ operator unsigned() const;
+
/// Assignment from an (unsigned) integer.
label<n>& operator=(unsigned i);
+ /// Assignment from literal::zero.
+ label<n>& operator=(const literal::zero_t& v);
+
/// Self increment.
label<n>& operator++();
/// Self decrement.
label<n>& operator--();
+ /// Return the next value.
+ label<n> next() const;
+
/// Conversion to unsigned.
const enc& to_enc() const;
- /// Unit value.
- static const label<n> one;
-
protected:
enc v_;
};
- namespace internal
- {
-
- template <unsigned n>
- struct convert_< label<n> >
- {
- static label<n> value_at_index(unsigned i)
- {
- return i;
- }
- static unsigned index_of_value(const label<n>& v)
- {
- return v.to_enc();
- }
- };
-
- } // end of mln::value::internal
-
-
-
// Safety.
template <> struct label<0>;
template <> struct label<1>;
-
- /// Equality comparison.
- template <unsigned n>
- bool operator==(const label<n>& lhs, const label<n>& rhs);
-
- /// Ordering comparison.
- template <unsigned n>
- bool operator<(const label<n>& lhs, const label<n>& rhs);
-
-
-
- /*! \brief Print a label \p l into the output stream \p ostr.
- *
- * \param[in,out] ostr An output stream.
- * \param[in] l A label.
- *
- * \return The modified output stream \p ostr.
- */
+ /// Print a label \p l into the output stream \p ostr.
+ ///
+ /// \param[in,out] ostr An output stream.
+ /// \param[in] l A label.
+ ///
+ /// \return The modified output stream \p ostr.
+ ///
template <unsigned n>
std::ostream& operator<<(std::ostream& ostr, const label<n>& l);
@@ -182,12 +165,25 @@ namespace mln
inline
label<n>::label(unsigned i)
{
- mln_precondition(i <= mln_max(enc));
v_ = enc(i);
}
template <unsigned n>
inline
+ label<n>::label(const literal::zero_t&)
+ {
+ v_ = 0;
+ }
+
+ template <unsigned n>
+ inline
+ label<n>::operator unsigned() const
+ {
+ return to_enc();
+ }
+
+ template <unsigned n>
+ inline
label<n>&
label<n>::operator=(unsigned i)
{
@@ -199,6 +195,15 @@ namespace mln
template <unsigned n>
inline
label<n>&
+ label<n>::operator=(const literal::zero_t&)
+ {
+ v_ = 0;
+ return *this;
+ }
+
+ template <unsigned n>
+ inline
+ label<n>&
label<n>::operator++()
{
mln_precondition(v_ < mln_max(enc));
@@ -217,28 +222,19 @@ namespace mln
}
template <unsigned n>
- const label<n> label<n>::one = 1;
-
- template <unsigned n>
inline
- const mln_enc(label<n>)&
- label<n>::to_enc() const
+ label<n>
+ label<n>::next() const
{
- return v_;
+ return label<n>(v_ + 1);
}
template <unsigned n>
inline
- bool operator==(const label<n>& lhs, const label<n>& rhs)
- {
- return lhs.to_enc() == rhs.to_enc();
- }
-
- template <unsigned n>
- inline
- bool operator<(const label<n>& lhs, const label<n>& rhs)
+ const mln_enc(label<n>)&
+ label<n>::to_enc() const
{
- return lhs.to_enc() < rhs.to_enc();
+ return v_;
}
template <unsigned n>
diff --git a/milena/mln/value/label_16.hh b/milena/mln/value/label_16.hh
new file mode 100644
index 0000000..c7d4e13
--- /dev/null
+++ b/milena/mln/value/label_16.hh
@@ -0,0 +1,54 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_VALUE_LABEL_16_HH
+# define MLN_VALUE_LABEL_16_HH
+
+/// \file mln/value/label16.hh
+///
+/// Define the alias value::label16.
+
+# include <mln/value/label.hh>
+
+
+namespace mln
+{
+
+ namespace value
+ {
+
+
+ /// Alias for 16-bit integers.
+ typedef label<16> label16;
+
+
+ } // end of namespace mln::value
+
+} // end of namespace mln
+
+
+#endif // ! MLN_VALUE_LABEL_16_HH
diff --git a/milena/mln/value/label_8.hh b/milena/mln/value/label_8.hh
new file mode 100644
index 0000000..2a27179
--- /dev/null
+++ b/milena/mln/value/label_8.hh
@@ -0,0 +1,54 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_VALUE_LABEL_8_HH
+# define MLN_VALUE_LABEL_8_HH
+
+/// \file mln/value/label8.hh
+///
+/// Define the alias value::label8.
+
+# include <mln/value/label.hh>
+
+
+namespace mln
+{
+
+ namespace value
+ {
+
+
+ /// Alias for 8-bit labels.
+ typedef mln::value::label<8> label8;
+
+
+ } // end of namespace mln::value
+
+} // end of namespace mln
+
+
+#endif // ! MLN_VALUE_LABEL_8_HH
diff --git a/milena/tests/labeling/Makefile.am b/milena/tests/labeling/Makefile.am
index 399a1eb..044f83d 100644
--- a/milena/tests/labeling/Makefile.am
+++ b/milena/tests/labeling/Makefile.am
@@ -10,7 +10,8 @@ check_PROGRAMS = \
foreground \
level \
regional_maxima \
- regional_minima
+ regional_minima \
+ relabel
background_SOURCES = background.cc
blobs_SOURCES = blobs.cc
@@ -20,5 +21,6 @@ foreground_SOURCES = foreground.cc
level_SOURCES = level.cc
regional_maxima_SOURCES = regional_maxima.cc
regional_minima_SOURCES = regional_minima.cc
+relabel_SOURCES = relabel.cc
TESTS = $(check_PROGRAMS)
diff --git a/milena/tests/labeling/relabel.cc b/milena/tests/labeling/relabel.cc
new file mode 100644
index 0000000..409ded7
--- /dev/null
+++ b/milena/tests/labeling/relabel.cc
@@ -0,0 +1,96 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory
+// (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/// \file tests/labeling/relabel.cc
+///
+/// Tests on mln::labeling::relabel.
+
+
+#include <mln/core/image/image2d.hh>
+#include <mln/labeling/relabel.hh>
+#include <mln/value/label_16.hh>
+#include <mln/debug/println.hh>
+
+
+struct not_to_removed : public mln::Function_l2b< not_to_removed >
+{
+ bool operator()(const mln::value::label16& l) const
+ {
+ return l < mln::value::label16(3);
+ }
+};
+
+
+bool is_valid(const mln::value::label16& l)
+{
+ return l == 0u|| l == 1u || l == 2u;
+}
+
+
+
+int main()
+{
+ using namespace mln;
+ using value::label16;
+
+ label16 vals[6][5] = {
+ {0, 1, 1, 0, 0},
+ {0, 1, 1, 4, 0},
+ {0, 0, 0, 0, 0},
+ {2, 2, 0, 3, 0},
+ {2, 5, 3, 3, 3},
+ {2, 5, 5, 0, 0}
+ };
+
+ image2d<label16> lbl = make::image(vals);
+ label16 nlabels = 5;
+
+
+ {
+ label16 new_nlabels;
+ image2d<label16> lbl2 = labeling::relabel(lbl,
+ nlabels,
+ new_nlabels,
+ not_to_removed());
+ mln_assertion(new_nlabels == 2u);
+ mln_piter_(image2d<label16>) p(lbl2.domain());
+ for_all(p)
+ mln_assertion(is_valid(lbl2(p)));
+ }
+
+ {
+ label16 new_nlabels;
+ labeling::relabel_inplace(lbl,
+ nlabels,
+ not_to_removed());
+ mln_assertion(nlabels == 2u);
+ mln_piter_(image2d<label16>) p(lbl.domain());
+ for_all(p)
+ mln_assertion(is_valid(lbl(p)));
+ }
+}
--
1.5.6.5
1
0
20 Nov '08
https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog
from Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Bench the diff between canvas as class v. as procedure.
* doc/benchmark/canvas.cc: New.
canvas.cc | 301 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 301 insertions(+)
Index: doc/benchmark/canvas.cc
--- doc/benchmark/canvas.cc (revision 0)
+++ doc/benchmark/canvas.cc (revision 0)
@@ -0,0 +1,301 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/// \file doc/bench/canvas.cc
+///
+/// Test on mln::labeling::level.
+
+#include <mln/core/image/image2d.hh>
+#include <mln/core/alias/neighb2d.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/io/pgm/load.hh>
+
+#include <mln/labeling/level.hh>
+#include <mln/util/timer.hh>
+
+
+namespace mln
+{
+
+
+ namespace old_canvas
+ {
+
+ template <typename F>
+ struct labeling
+ {
+ // Functor.
+ F& f;
+
+ typedef typename F::I I;
+ typedef typename F::N N;
+ typedef typename F::L L;
+ typedef typename F::S S;
+
+ // Local type.
+ typedef mln_psite(I) psite;
+
+ // Auxiliary data.
+ mln_ch_value(I, bool) deja_vu;
+ mln_ch_value(I, psite) parent;
+
+ // Output.
+ mln_ch_value(I, L) output;
+ L nlabels;
+ bool status;
+
+ // Ctor.
+ labeling(F& f);
+
+ void init();
+
+ void pass_1();
+
+ void pass_2();
+
+
+ // Auxiliary methods.
+
+ void make_set(const psite& p);
+
+ bool is_root(const psite& p) const;
+
+ psite find_root(const psite& x);
+
+ void do_union(const psite& n, const psite& p);
+
+ };
+
+
+ template <typename F>
+ labeling<F>::labeling(F& f)
+ : f(f)
+ {
+ trace::entering("canvas::labeling");
+
+ init();
+ f.init(); // Client initialization.
+ pass_1();
+ pass_2();
+
+ trace::exiting("canvas::labeling");
+ }
+
+ template <typename F>
+ void
+ labeling<F>::init()
+ {
+ initialize(deja_vu, f.input);
+ mln::level::fill(deja_vu, false);
+ initialize(parent, f.input);
+ initialize(output, f.input);
+ mln::level::fill(output, L(literal::zero));
+ nlabels = 0;
+ }
+
+ template <typename F>
+ void
+ labeling<F>::pass_1()
+ {
+ mln_fwd_piter(S) p(f.s);
+ mln_niter(N) n(f.nbh, p);
+ for_all(p) if (f.handles(p))
+ {
+ make_set(p);
+ for_all(n)
+ if (f.input.domain().has(n) && deja_vu(n))
+ {
+ if (f.equiv(n, p))
+ do_union(n, p);
+ else
+ f.do_no_union(n, p);
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+ template <typename F>
+ void
+ labeling<F>::pass_2()
+ {
+ mln_bkd_piter(S) p(f.s);
+ for_all(p) if (f.handles(p))
+ {
+ if (is_root(p))
+ {
+ if (f.labels(p))
+ {
+ if (nlabels == mln_max(L))
+ {
+ status = false;
+ return;
+ }
+ output(p) = ++nlabels;
+ }
+ }
+ else
+ output(p) = output(parent(p));
+ }
+ status = true;
+ }
+
+ template <typename F>
+ void
+ labeling<F>::make_set(const psite& p)
+ {
+ parent(p) = p;
+ f.init_attr(p);
+ }
+
+ template <typename F>
+ bool
+ labeling<F>::is_root(const psite& p) const
+ {
+ return parent(p) == p;
+ }
+
+ template <typename F>
+ typename labeling<F>::psite
+ labeling<F>::find_root(const psite& x)
+ {
+ if (parent(x) == x)
+ return x;
+ else
+ return parent(x) = find_root(parent(x));
+ }
+
+ template <typename F>
+ void
+ labeling<F>::do_union(const psite& n, const psite& p)
+ {
+ psite r = find_root(n);
+ if (r != p)
+ {
+ parent(r) = p;
+ f.merge_attr(r, p);
+ }
+ }
+
+
+ } // end of namespace mln::old_canvas
+
+
+
+ namespace old_labeling
+ {
+
+
+ template <typename I_, typename N_, typename L_>
+ struct level_functor
+ {
+ typedef mln_psite(I_) P;
+
+ // requirements from mln::canvas::labeling:
+
+ typedef I_ I;
+ typedef N_ N;
+ typedef L_ L;
+ typedef mln_pset(I) S;
+
+ const I& input;
+ const N& nbh;
+ const S& s;
+
+ bool handles(const P& p) const { return input(p) == val; }
+ bool equiv(const P& n, const P&) const { return input(n) == val; }
+
+ void init() {}
+ bool labels(const P&) const { return true; }
+ void do_no_union(const P&, const P&) {}
+ void init_attr(const P&) {}
+ void merge_attr(const P&, const P&) {}
+
+ // end of requirements
+
+ const mln_value(I_)& val;
+
+ level_functor(const I& input, const mln_value(I)& val, const N& nbh)
+ : input(input),
+ nbh(nbh),
+ s(input.domain()),
+ val(val)
+ {}
+ };
+
+
+
+ template <typename I, typename N, typename L>
+ mln_ch_value(I, L)
+ level(const Image<I>& input, const mln_value(I)& val, const Neighborhood<N>& nbh,
+ L& nlabels)
+ {
+ trace::entering("labeling::level");
+
+ typedef level_functor<I,N,L> F;
+ F f(exact(input), val, exact(nbh));
+ old_canvas::labeling<F> run(f);
+
+ nlabels = run.nlabels;
+
+ trace::exiting("labeling::level");
+ return run.output;
+ }
+
+ } // end of namespace mln::old_labeling
+
+} // end of namespace mln
+
+
+
+
+int main()
+{
+ using namespace mln;
+ using value::int_u8;
+
+ image2d<int_u8> lena;
+ io::pgm::load(lena, "../../img/lena.pgm");
+
+ {
+ util::timer t;
+ t.start();
+ unsigned n;
+ for (unsigned l = 0; l <= 255; ++l)
+ old_labeling::level(lena, l, c4(), n);
+ std::cout << "canvas as class: " << t.read() << std::endl;
+ }
+
+ {
+ util::timer t;
+ t.start();
+ unsigned n;
+ for (unsigned l = 0; l <= 255; ++l)
+ labeling::impl::generic::level(lena, l, c4(), n);
+ std::cout << "canvas as proc.: " << t.read() << std::endl;
+ }
+
+}
1
0
https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog
from Nicolas Ballas <ballas(a)lrde.epita.fr>
Update fill_with_value dispatch.
* mln/level/fill_with_value.spe.hh: Update.
fill_with_value.spe.hh | 30 +++++++++---------------------
1 file changed, 9 insertions(+), 21 deletions(-)
Index: mln/level/fill_with_value.spe.hh
--- mln/level/fill_with_value.spe.hh (revision 2928)
+++ mln/level/fill_with_value.spe.hh (working copy)
@@ -80,12 +80,12 @@
I& ima = exact(ima_);
internal::fill_with_value_tests(ima, val);
- mln_precondition(((mlc_is(mln_trait_image_pw_io(I),
- trait::image::pw_io::read_write)::value ||
+ mlc_and(mlc_or(mlc_is(mln_trait_image_pw_io(I),
+ trait::image::pw_io::read_write),
mlc_is(mln_trait_image_vw_io(I),
- trait::image::vw_io::read_write)::value) &&
+ trait::image::vw_io::read_write)),
mlc_is(mln_trait_image_value_access(I),
- trait::image::value_access::direct)::value));
+ trait::image::value_access::direct))::check();
level::memset_(ima, ima.point_at_index(0), val, ima.nelements());
@@ -118,12 +118,13 @@
I& ima = exact(ima_);
internal::fill_with_value_tests(ima, val);
- mln_precondition(((mlc_is(mln_trait_image_pw_io(I),
- trait::image::pw_io::read_write)::value ||
+ mlc_and(
+ mlc_or(mlc_is(mln_trait_image_pw_io(I),
+ trait::image::pw_io::read_write),
mlc_is(mln_trait_image_vw_io(I),
- trait::image::vw_io::read_write)::value) &&
+ trait::image::vw_io::read_write)),
mlc_is(mln_trait_image_value_access(I),
- trait::image::value_access::direct)::value));
+ trait::image::value_access::direct))::check();
ima.val() = val;
@@ -197,7 +198,6 @@
}
-
template <typename I, typename V>
void fill_with_value_dispatch(trait::image::value_storage::disrupted,
trait::image::vw_io::any,
@@ -207,18 +207,6 @@
}
- // This specialization is only here to deal with image which have
- // non-updated properties (vw_io).
- template <typename I, typename V>
- void fill_with_value_dispatch(trait::image::value_storage::any,
- trait::undef,
- Image<I>& ima, const V& val)
- {
- impl::generic::fill_with_value(ima, val);
- }
-
-
-
template <typename I, typename V>
void fill_with_value_dispatch(Image<I>& ima, const V& val)
{
1
0
https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog
from Nicolas Ballas <ballas(a)lrde.epita.fr>
Cleanup image traits.
* mln/trait/images.hh: Update trait delegation to morpher.
* mln/core/image/flat_image.hh: Add documentation.
core/image/flat_image.hh | 1 +
trait/images.hh | 35 +++++++++++++++++++++++++++--------
2 files changed, 28 insertions(+), 8 deletions(-)
Index: mln/trait/images.hh
--- mln/trait/images.hh (revision 2927)
+++ mln/trait/images.hh (working copy)
@@ -84,6 +84,19 @@
mln::trait::image::value_io::read_only, \
mln_trait_image_value_io(I) )
+# define mln_internal_trait_image_pw_io_from(I) \
+ \
+ mlc_if( mlc_is_const(I), \
+ mln::trait::image::pw_io::read, \
+ mln_trait_image_pw_io(I) )
+
+
+# define mln_internal_trait_image_vw_io_from(I) \
+ \
+ mlc_if( mlc_is_const(I), \
+ mln::trait::image::vw_io::read, \
+ mln_trait_image_vw_io(I) )
+
# define mln_internal_trait_image_speed_from(I) \
\
@@ -189,19 +202,25 @@
typedef typename image_<D>::size size;
typedef mln_internal_trait_image_speed_from(D) speed; // un-fastest
- // value => delegation
- typedef typename image_<D>::vw_io vw_io;
- typedef typename image_<D>::vw_set vw_set;
+ // Image geometry
+ typedef typename image_<D>::localization localization;
+ typedef typename image_<D>::dimension dimension;
+
+ // Memory organization
typedef typename image_<D>::value_alignement value_alignement;
typedef typename image_<D>::value_access value_access;
typedef typename image_<D>::value_storage value_storage;
typedef typename image_<D>::value_browsing value_browsing;
- typedef mln_internal_trait_image_value_io_from(D) value_io; // un-write when D is const
+ // un-write when D is const
+ typedef mln_internal_trait_image_value_io_from(D) value_io;
- // site => delegation
- typedef typename image_<D>::pw_io pw_io;
- typedef typename image_<D>::localization localization;
- typedef typename image_<D>::dimension dimension;
+ // value wise access => delegation
+ typedef mln_internal_trait_image_vw_io_from(D) vw_io;
+ typedef typename image_<D>::vw_set vw_set;
+
+
+ // site wise access => delegation
+ typedef mln_internal_trait_image_pw_io_from(D) pw_io;
// extended domain => delegation
typedef typename image_<D>::ext_domain ext_domain;
Index: mln/core/image/flat_image.hh
--- mln/core/image/flat_image.hh (revision 2927)
+++ mln/core/image/flat_image.hh (working copy)
@@ -78,6 +78,7 @@
// value
typedef trait::image::vw_io::read_write vw_io;
+ /// FIXME this property should be set to uni
typedef trait::image::vw_set::none vw_set;
typedef trait::image::value_access::direct value_access;
typedef trait::image::value_storage::singleton value_storage;
1
0
https://svn.lrde.epita.fr/svn/oln/trunk/milena/sandbox
Index: ChangeLog
from Alexandre Abraham <abraham(a)lrde.epita.fr>
Mixin working for op_less.
* abraham/tests/morpho/test_watershed_topo.cc: .
* abraham/tests/morpho/Makefile: .
* abraham/tests/value/mixin.cc: New.
* abraham/mln/core/image/thru.hh: .
* abraham/mln/value/mixin.hh: New.
* abraham/mln/value/op_less.hh: New.
* abraham/mln/value/shell.hh: .
mln/core/image/thru.hh | 4 -
mln/value/mixin.hh | 117 ++++++++++++++++++++++++++++++++++++
mln/value/op_less.hh | 46 ++++++++++++++
mln/value/shell.hh | 3
tests/morpho/Makefile | 2
tests/morpho/test_watershed_topo.cc | 46 ++++----------
tests/value/mixin.cc | 64 +++++++++++++++++++
7 files changed, 247 insertions(+), 35 deletions(-)
Index: abraham/tests/morpho/test_watershed_topo.cc
--- abraham/tests/morpho/test_watershed_topo.cc (revision 2926)
+++ abraham/tests/morpho/test_watershed_topo.cc (working copy)
@@ -13,49 +13,33 @@
#include <string>
#include <iostream>
-int print_and_exit (std::string s)
-{
- std::cerr << s << std::endl;
- return 1;
-}
-
-int main ()
+int main (int argc, const char * argv[])
{
using namespace mln;
using value::int_u8;
typedef image2d<int_u8> image2dint;
- image2dint input, mverif, wverif;
-
- // #define TEST
-
- // io::pgm::load(input, "./images/test_watershed.pgm");
- // io::pgm::load(input, "./images/little_test.pgm");
- io::pgm::load(input, "./images/test.pgm");
- // io::pgm::load(input, "../../img/dots.pgm");
- //io::pgm::load(input, "./images/+irm6.pgm");
-
- // io::pgm::load(input, "./images/lena_light.pgm");
- // io::pgm::load(mverif, "./images/result_m_watershed.pgm");
- // io::pgm::load(wverif, "./images/result_topo_watershed.pgm");
-
- morpho::topo_wst< image2d<int_u8>, neighb2d> n(input, c4());
+ if (argc < 2) {
+ std::cerr << "usage: " << argv[0] << " in.pgm [other_files.pgm]" << std::endl;
+ return 1;
+ }
- /*
- image2dint::fwd_piter it(input.domain());
- for_all(it)
+ for (int i = 1; i < argc; ++i)
{
- input(it) = input(it)/17;
- mverif(it) = mverif(it)/17;
- }
- */
- // io::tikz::save(input, "start.tex");
+ image2dint ima;
+ io::pgm::load(ima, argv[i]);
+
+ morpho::topo_wst< image2d<int_u8>, neighb2d> n(ima, c4());
n.go();
- io::pgm::save(n.pima, "out.pgm");
+ std::string name(argv[i]);
+ name.erase(name.length() - 4);
+
+ io::pgm::save(n.pima, name.append("_wsd.pgm"));
+ }
return 0;
}
Index: abraham/tests/morpho/Makefile
--- abraham/tests/morpho/Makefile (revision 2926)
+++ abraham/tests/morpho/Makefile (working copy)
@@ -2,7 +2,7 @@
OBJ=$(SRC:.cc=.o)
EXEC=$(SRC:.cc=)
CC=g++
-CXXFLAGS=-Wall -W -I ../../ -I ../../../../ -g
+CXXFLAGS=-Wall -W -I ../../ -I ../../../../ -O3 -DNDEBUG
all: $(EXEC)
Index: abraham/tests/value/mixin.cc
--- abraham/tests/value/mixin.cc (revision 0)
+++ abraham/tests/value/mixin.cc (revision 0)
@@ -0,0 +1,64 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/*! \file tests/value/mixin.hh
+ *
+ * \brief Mixin types.
+ */
+
+
+#include <mln/value/mixin.hh>
+#include <mln/value/rgb.hh>
+#include <mln/value/rgb8.hh>
+
+
+namespace mln
+{
+
+ namespace value
+ {
+ template <unsigned int n>
+ struct op_less< mln::value::rgb<n> >
+ {
+ bool operator()(const mln::value::rgb<n> &a, const mln::value::rgb<n> &b)
+ {
+ return a.red() < b.red();
+ }
+ };
+ }
+}
+
+int main ()
+{
+ mln::value::rgb8 r(12, 13, 14);
+ mln::value::rgb8 s(13, 14, 15);
+
+ std::cout
+ << ( *(mln::value::mixin<mln::value::rgb8, mln::value::op_less>*)(void*) &r <
+ *(mln::value::mixin<mln::value::rgb8, mln::value::op_less>*)(void*) &s )
+ << std::endl;
+}
Index: abraham/mln/core/image/thru.hh
--- abraham/mln/core/image/thru.hh (revision 2926)
+++ abraham/mln/core/image/thru.hh (working copy)
@@ -118,6 +118,8 @@
/// Mutable access is for reading and writing.
lvalue operator()(const mln_psite(I)& p);
+
+ F f;
};
# ifndef MLN_INCLUDE_ONLY
@@ -164,7 +166,7 @@
thru<F,I>::operator()(const mln_psite(I)& p) const
{
mln_precondition(this->data_->ima_.has(p));
- return F()( this->data_->ima_(p) );
+ return f( this->data_->ima_(p) );
}
template <typename F, typename I>
Index: abraham/mln/value/mixin.hh
--- abraham/mln/value/mixin.hh (revision 0)
+++ abraham/mln/value/mixin.hh (revision 0)
@@ -0,0 +1,117 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_CORE_VALUE_MIXIN_HH
+# define MLN_CORE_VALUE_MIXIN_HH
+
+# include <mln/core/concept/function.hh>
+# include <mln/core/concept/image.hh>
+# include <mln/value/internal/value_like.hh>
+# include <mln/value/op_less.hh> // FIXME : include all modificators
+
+namespace mln
+{
+ namespace value
+ {
+ template <typename T, template <typename> class F>
+ struct mixin;
+ }
+
+ namespace trait
+ {
+
+ template <typename T, template <typename> class F>
+ struct value_< mln::value::mixin<T, F> >
+ : value_< T > // FIXME
+ {
+ };
+
+ } // end of namespace trait
+
+ namespace value
+ {
+
+ template <typename T, template <typename> class F>
+ struct mixin : T, Value < mixin<T, F> >, internal::value_like_ <T, mln_enc(T), mixin<T, F>, mixin<T, F> >
+ {
+ typedef T value;
+
+ // Ctor ?
+
+ // operator (T) ();
+
+ };
+ }
+
+# ifndef MLN_INCLUDE_ONLY
+
+ namespace value
+ {
+
+ template <typename T>
+ struct mixin <T, op_less> : T, Value < mixin<T, op_less> >, internal::value_like_ <T, mln_enc(T), mixin<T, op_less>, mixin<T, op_less> >
+ {
+ typedef mixin<T, op_less> exact;
+
+ bool operator< (const exact &rhs)
+ {
+ static op_less<T> l;
+ return l((T)*this, (T)rhs);
+ }
+ };
+
+ // Ctor
+
+ // template <typename T, template <typename> class F>
+ // mixin<T, F>::operator(T)()
+ // {
+ // return (T)*this;
+ // }
+
+ }
+
+/*
+ template <typename F, typename I>
+ std::ostream& operator<<(std::ostream& ostr, value::shell<F, I> &s)
+ {
+ ostr << (typename value::shell<F, I>::value) s;
+ return ostr;
+ }
+
+ template <typename F, typename I>
+ std::istream& operator>>(std::istream& istr, value::shell<F, I> &s)
+ {
+ (typename value::shell<F, I>::value) s >> istr;
+ return istr;
+ }
+*/
+
+# endif // MLN_INCLUDE_ONLY
+
+}; // end of namespace mln
+
+#endif // MLN_CORE_VALUE_MIXIN_HH
Index: abraham/mln/value/op_less.hh
--- abraham/mln/value/op_less.hh (revision 0)
+++ abraham/mln/value/op_less.hh (revision 0)
@@ -0,0 +1,46 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_CORE_VALUE_OP_LESS_HH
+# define MLN_CORE_VALUE_OP_LESS_HH
+
+namespace mln
+{
+
+ namespace value
+ {
+
+ template <typename T>
+ struct op_less
+ {
+ // Should have an operator() (T& lhs, T& rhs)
+ };
+
+ } // end of namespace value
+} // end of namespace mln
+
+#endif // ! MLN_CORE_VALUE_OP_LESS_HH
Index: abraham/mln/value/shell.hh
--- abraham/mln/value/shell.hh (revision 2926)
+++ abraham/mln/value/shell.hh (working copy)
@@ -48,8 +48,7 @@
template <typename F, typename I>
struct value_< mln::value::shell<F, I> >
- :
- value_< mln_result(F) >
+ : value_< mln_result(F) >
{
};
1
0
URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2008-11-19 Matthieu Garrigues <garrigues(a)lrde.epita.fr>
Put algebraic_union_find into a routine.
* mln/canvas/morpho/algebraic_union_find.hh: algebraic_union_find is
now a routine. The old version (functor) is renamed as
algebraic_union_find_f.
* mln/morpho/closing_attribute.hh,
* mln/morpho/opening_attribute.hh: Update to use algebraic_union_find
as a routine instead of a functor.
---
canvas/morpho/algebraic_union_find.hh | 157 +++++++++++++++++++++++++++++++++-
morpho/closing_attribute.hh | 74 ++++++++++++++--
morpho/opening_attribute.hh | 77 +++++++++++++++-
3 files changed, 295 insertions(+), 13 deletions(-)
Index: trunk/milena/mln/morpho/closing_attribute.hh
===================================================================
--- trunk/milena/mln/morpho/closing_attribute.hh (revision 2925)
+++ trunk/milena/mln/morpho/closing_attribute.hh (revision 2926)
@@ -56,9 +56,73 @@
namespace impl
{
+ template <typename I, typename A_>
+ struct closing_attribute_t
+ {
+ // requirements from mln::canvas::morpho::algebraic_union_find
+
+ typedef A_ A;
+ typedef mln_psite(I) P;
+ typedef p_array<P> S;
+
+ mln_result(A) lambda;
+ const S s;
+
+ inline
+ void init()
+ {
+ // FIXME: border::fill(input, mln_max(mln_value(I)));
+ }
+
+ inline
+ bool is_active(const A& attr) const
+ {
+ return attr.to_result() < lambda;
+ }
+
+ inline
+ void inactivate(A& attr)
+ {
+ attr.set_value(lambda);
+ }
+
+ // end of requirements
+
+ inline
+ closing_attribute_t(const Image<I>& input, mln_result(A) lambda)
+ : lambda(lambda),
+ s(level::sort_psites_increasing(exact(input)))
+ {
+ }
+
+ };
+
+ } // end of namespace mln::morpho::impl
+
+
+ template <typename A,
+ typename I, typename N, typename O>
+ inline
+ void closing_attribute(const Image<I>& input,
+ const Neighborhood<N>& nbh, mln_result(A) lambda,
+ Image<O>& output)
+ {
+ typedef impl::closing_attribute_t<I, A> F;
+ F f(input, lambda);
+ canvas::morpho::algebraic_union_find(input, nbh, f, output);
+
+ mln_postcondition(output >= input);
+ }
+
+ // -----------------------------------------------------------
+ // Old code below.
+
+ namespace impl
+ {
+
template <typename A_,
typename I_, typename N_, typename O_>
- struct closing_attribute_t
+ struct closing_attribute_t_f
{
typedef mln_psite(I_) P;
@@ -104,7 +168,7 @@
// end of requirements
inline
- closing_attribute_t(const I_& input, const N_& nbh,
+ closing_attribute_t_f(const I_& input, const N_& nbh,
mln_result(A) lambda, O_& output)
: input(input), nbh(nbh), lambda(lambda), output(output),
s(level::sort_psites_increasing(input))
@@ -119,7 +183,7 @@
template <typename A,
typename I, typename N, typename O>
inline
- void closing_attribute(const Image<I>& input_,
+ void closing_attribute_f(const Image<I>& input_,
const Neighborhood<N>& nbh_, mln_result(A) lambda,
Image<O>& output_)
{
@@ -128,9 +192,9 @@
O& output = exact(output_);
mln_precondition(output.domain() == input.domain());
- typedef impl::closing_attribute_t<A,I,N,O> F;
+ typedef impl::closing_attribute_t_f<A,I,N,O> F;
F f(input, nbh, lambda, output);
- canvas::morpho::algebraic_union_find<F> run(f);
+ canvas::morpho::algebraic_union_find_f<F> run(f);
mln_postcondition(output >= input);
}
Index: trunk/milena/mln/morpho/opening_attribute.hh
===================================================================
--- trunk/milena/mln/morpho/opening_attribute.hh (revision 2925)
+++ trunk/milena/mln/morpho/opening_attribute.hh (revision 2926)
@@ -56,9 +56,75 @@
namespace impl
{
+ template <typename I, typename A_>
+ struct opening_attribute_t
+ {
+ // requirements from mln::canvas::morpho::algebraic_union_find
+
+ typedef A_ A;
+ typedef mln_psite(I) P;
+ typedef p_array<P> S;
+
+ mln_result(A) lambda;
+ const S s;
+
+ inline
+ void init()
+ {
+ // FIXME: border::fill(input, mln_max(mln_value(I)));
+ }
+
+ inline
+ bool is_active(const A& attr) const
+ {
+ return attr.to_result() < lambda;
+ }
+
+ inline
+ void inactivate(A& attr)
+ {
+ attr.set_value(lambda);
+ }
+
+ // end of requirements
+
+ inline
+ opening_attribute_t(const Image<I>& input, mln_result(A) lambda)
+ : lambda(lambda),
+ s(level::sort_psites_decreasing(exact(input)))
+ {
+ }
+
+ };
+
+ } // end of namespace mln::morpho::impl
+
+
+ template <typename A,
+ typename I, typename N, typename O>
+ inline
+ void opening_attribute(const Image<I>& input,
+ const Neighborhood<N>& nbh, mln_result(A) lambda,
+ Image<O>& output)
+ {
+ typedef impl::opening_attribute_t<I, A> F;
+ F f(input, lambda);
+ canvas::morpho::algebraic_union_find(input, nbh, f, output);
+
+ mln_postcondition(output <= input);
+ }
+
+
+ // -----------------------------------------------------------
+ // Old code below.
+
+
+ namespace impl
+ {
+
template <typename A_,
typename I_, typename N_, typename O_>
- struct opening_attribute_t
+ struct opening_attribute_t_f
{
typedef mln_psite(I_) P;
@@ -99,7 +165,7 @@
// end of requirements
inline
- opening_attribute_t(const I_& input, const N_& nbh,
+ opening_attribute_t_f(const I_& input, const N_& nbh,
mln_result(A) lambda, O_& output)
: input(input), nbh(nbh), lambda(lambda), output(output),
s(level::sort_psites_decreasing(input))
@@ -114,7 +180,7 @@
template <typename A,
typename I, typename N, typename O>
inline
- void opening_attribute(const Image<I>& input_,
+ void opening_attribute_f(const Image<I>& input_,
const Neighborhood<N>& nbh_, mln_result(A) lambda,
Image<O>& output_)
{
@@ -123,13 +189,14 @@
O& output = exact(output_);
mln_precondition(output.domain() == input.domain());
- typedef impl::opening_attribute_t<A,I,N,O> F;
+ typedef impl::opening_attribute_t_f<A,I,N,O> F;
F f(input, nbh, lambda, output);
- canvas::morpho::algebraic_union_find<F> run(f);
+ canvas::morpho::algebraic_union_find_f<F> run(f);
mln_postcondition(output <= input);
}
+
# endif // ! MLN_INCLUDE_ONLY
} // end of namespace mln::morpho
Index: trunk/milena/mln/canvas/morpho/algebraic_union_find.hh
===================================================================
--- trunk/milena/mln/canvas/morpho/algebraic_union_find.hh (revision 2925)
+++ trunk/milena/mln/canvas/morpho/algebraic_union_find.hh (revision 2926)
@@ -49,10 +49,162 @@
namespace morpho
{
+ // FIXME: Is it really needed?
+ struct opening_attribute_functor_base
+ {
+ inline void init() {}
+
+ template <typename A>
+ inline bool is_active(const A&) const { return false; }
+
+ template <typename A>
+ inline void inactivate(A&) {}
+ };
+
+
+ template <typename I>
+ static inline
+ mln_psite(I)
+ find_root(I& parent,
+ const mln_psite(I)& x)
+ {
+ if (parent(x) == x)
+ return x;
+ else
+ return parent(x) = find_root(parent, parent(x));
+ }
+
+ template <typename I, typename N, typename F, typename O>
+ void
+ algebraic_union_find(const Image<I>& input_,
+ const Neighborhood<N>& nbh_,
+ F& f,
+ Image<O>& output_)
+ {
+ trace::entering("canvas::morpho::algebraic_union_find");
+
+ // FIXME: Tests?
+
+ typedef typename F::S S;
+ typedef typename F::A A;
+
+ const I& input = exact(input_);
+ const N& nbh = exact(nbh_);
+ O& output = exact(output_);
+
+ mln_precondition(output.domain() == input.domain());
+
+ // Local type.
+ typedef mln_psite(I) P;
+
+ // Auxiliary data.
+ mln_ch_value(O, bool) deja_vu;
+ mln_ch_value(O, P) parent;
+ mln_ch_value(O, A) data;
+
+ // init
+ {
+ initialize(deja_vu, input);
+ mln::level::fill(deja_vu, false);
+ initialize(parent, input);
+ initialize(data, input);
+ f.init(); // init required.
+ }
+
+ // first pass
+ {
+ mln_fwd_piter(S) p(f.s); // s required.
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ // Make set.
+ {
+ parent(p) = p;
+ /* FIXME: What if the value_type of DATA (i.e., A) were not
+ based on a accu::count<mln::pix>? Currently, nothing
+ enforces this, but the code below expects this line to be
+ valid:
+
+ data(p).take_as_init(make::pix(f.input, p))
+
+ which probably restricts the kind of input images.
+
+ If we want to be more generic, the initialization should
+ read something like:
+
+ init_data(p);
+
+ i.e., the functor for the initialization of data should
+ be passed as an argument to the canvas' ctor.
+
+ Of course, we might want to restrict attributes to the
+ accumulator accu::count<mln::pix> (which is perfectly
+ acceptable), but then this class should statically check
+ the conformance of the template parameter A to this
+ constraint. */
+ data(p).take_as_init(make::pix(input, p)); // FIXME: algebraic so p!
+ }
+
+ for_all(n)
+ if (input.domain().has(n) && deja_vu(n))
+ {
+ //do_union(n, p);
+ P r = find_root(parent, n);
+ if (r != p)
+ {
+ if (input(r) == input(p) || f.is_active(data(r))) // Equiv(r, p)
+ // Either a flat zone or the component of r is still growing.
+ {
+ /* FIXME: Same remark as above concerning the
+ initialization of data(p); instead of
+
+ data(p).take(data(r));
+
+ we should (or could) have
+
+ unite_data(p, r);
+
+ so as to keep the generic aspect of this canvas
+ (as long as the set of acceptable types for the
+ template parameter A is not bound). */
+ data(p).take(data(r));
+ parent(r) = p;
+ }
+ else
+ f.inactivate(data(p));
+ }
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+ // second pass
+ {
+ mln_bkd_piter(S) p(f.s);
+ for_all(p)
+ if (parent(p) == p) // p is root.
+ output(p) = input(p);
+ else
+ output(p) = output(parent(p));
+ }
+
+ /*
+ Change 2nd pass into:
+ for_all(p) if (not is_root(p)) output(p) = output(parent(p));
+ and add in init:
+ mln::level::assign(output, input);
+ */
+ trace::exiting("canvas::morpho::algebraic_union_find");
+ }
+
+
+ // -----------------------------------------------------------
+ // Old code below.
+
// General version.
template <typename F>
- struct algebraic_union_find
+ struct algebraic_union_find_f
{
F& f;
@@ -68,7 +220,7 @@
mln_ch_value(O, psite) parent;
mln_ch_value(O, A) data;
- algebraic_union_find(F& f)
+ algebraic_union_find_f(F& f)
: f(f)
{
run();
@@ -194,7 +346,6 @@
};
-
// FIXME: Fast version.
1
0
URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena/sandbox
ChangeLog:
2008-11-19 Matthieu Garrigues <garrigues(a)lrde.epita.fr>
Clean and Fix tiled_image2d.
* garrigues/tiled_image2d/backend/mmap.hh,
* garrigues/tiled_image2d/tiled_image2d.cc,
* garrigues/tiled_image2d/tiled_image2d.hh: Use a lru cache of size 10
instead of 1500.
---
backend/mmap.hh | 7 +++++--
tiled_image2d.cc | 6 +++---
tiled_image2d.hh | 16 ++++++++++------
3 files changed, 18 insertions(+), 11 deletions(-)
Index: trunk/milena/sandbox/garrigues/tiled_image2d/backend/mmap.hh
===================================================================
--- trunk/milena/sandbox/garrigues/tiled_image2d/backend/mmap.hh (revision 2924)
+++ trunk/milena/sandbox/garrigues/tiled_image2d/backend/mmap.hh (revision 2925)
@@ -42,8 +42,8 @@
typedef Block block_type;
mmap_backend(int fd, unsigned n_blocks)
- : fd_(fd), size_(n_blocks) {
-
+ : fd_(fd), size_(n_blocks), n_loaded_(0) {
+ std::cout << "size: " << size_ << "blocks." << std::endl;
assert(Block::nbytes % getpagesize() == 0);
if (fd == -1) { perror("open"); exit(1); }
assert(fd_ != -1);
@@ -97,6 +97,7 @@
assert(n < size_);
Block *b = loaded_[n];
loaded_[n] = 0;
+ n_loaded_--;
if (munmap(b->bytes, Block::nbytes) == -1)
perror("munmap");
}
@@ -105,6 +106,7 @@
assert(n < size_);
Block *b = loaded_[n];
if (!b) {
+ n_loaded_++;
b = (Block*) mmap(0, Block::nbytes, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd_, n * Block::nbytes);
if (b == (void*)-1)
perror("mmap");
@@ -117,6 +119,7 @@
Block** loaded_;
int fd_;
unsigned size_;
+ int n_loaded_;
};
Index: trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.hh
===================================================================
--- trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.hh (revision 2924)
+++ trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.hh (revision 2925)
@@ -72,10 +72,10 @@
template <typename T>
struct data_< tiled_image2d<T> >
{
- typedef block<T, BLOCK_SIZE> block;
- typedef mmap_backend<block> backend;
- typedef lru_support<backend> support;
- typedef layout2d<BLOCK_SIDE, BLOCK_SIDE> layout;
+ typedef typename tiled_image2d<T>::block block;
+ typedef typename tiled_image2d<T>::backend backend;
+ typedef typename tiled_image2d<T>::support support;
+ typedef typename tiled_image2d<T>::layout layout;
data_(const box2d& b);
~data_();
@@ -154,9 +154,13 @@
/// Block type.
typedef block<T, BLOCK_SIZE> block;
+ //typedef block<T, 10> block;
+
+ /// Backend type.
+ typedef mmap_backend<block> backend;
/// Support type.
- typedef lru_support<mmap_backend<block> > support;
+ typedef lru_support<backend> support;
/// Layout type
typedef layout2d<BLOCK_SIDE, BLOCK_SIDE> layout;
/// Page type
@@ -245,7 +249,7 @@
support_(*new support(
*new backend( open("/tmp/milena_tiled.image", O_RDWR | O_CREAT | O_TRUNC, 0664),
layout::image_layout::size(geom::nrows(b), geom::ncols(b))),
- 1500 // Fixme : size of lru cache.
+ 10 // Fixme : size of lru cache.
)
)
{
Index: trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.cc
===================================================================
--- trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.cc (revision 2924)
+++ trunk/milena/sandbox/garrigues/tiled_image2d/tiled_image2d.cc (revision 2925)
@@ -45,10 +45,10 @@
using namespace mln;
std::cout << "allocate the image." << std::endl;
- tiled_image2d<value::int_u8> ima(1024 * 1024, 1024 * 1.5);
+ tiled_image2d<value::int_u8> ima(30000, 30024);
std::cout << "fill the image." << std::endl;
debug::iota(ima);
- std::cout << "save the image." << std::endl;
- io::pgm::save(ima, "test.pgm");
+ //std::cout << "save the image." << std::endl;
+ //io::pgm::save(ima, "/tmp/test.pgm");
}
1
0
* mln/labeling/compute.hh: Refactor and cleanup.
* mln/util/array.hh: add a two new constructors.
---
milena/ChangeLog | 8 +++
milena/mln/labeling/compute.hh | 110 ++++++++++++++++++++++------------------
milena/mln/util/array.hh | 21 ++++++++
3 files changed, 90 insertions(+), 49 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 9ca0020..443fb05 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,13 @@
2008-11-19 Guillaume Lazzara <z(a)lrde.epita.fr>
+ Cleanup labeling::compute.
+
+ * mln/labeling/compute.hh: Refactor and cleanup.
+
+ * mln/util/array.hh: add a two new constructors.
+
+2008-11-19 Guillaume Lazzara <z(a)lrde.epita.fr>
+
Add an example using make::graph.
* doc/examples/mk_graph.cc: new example.
diff --git a/milena/mln/labeling/compute.hh b/milena/mln/labeling/compute.hh
index 5be6dca..1206c3d 100644
--- a/milena/mln/labeling/compute.hh
+++ b/milena/mln/labeling/compute.hh
@@ -33,6 +33,8 @@
/// Compute accumulators onto sites/values of each labeled component
/// of an image.
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/accumulator.hh>
# include <mln/core/concept/meta_accumulator.hh>
# include <mln/util/array.hh>
@@ -57,7 +59,8 @@ namespace mln
util::array<mln_result(A)>
compute(const Accumulator<A>& a,
const Image<I>& input,
- const Image<J>& label, mln_value(J) nlabels);
+ const Image<J>& label,
+ const mln_value(J)& nlabels);
/// Compute an accumulator onto the pixel values of the image \p input.
/// for each component of the image \p label.
@@ -73,7 +76,8 @@ namespace mln
util::array<mln_accu_with(A, mln_value(I))::result>
compute(const Meta_Accumulator<A>& a,
const Image<I>& input,
- const Image<J>& label, mln_value(J) nlabels);
+ const Image<J>& label,
+ const mln_value(J)& nlabels);
/// Compute an accumulator onto the pixel sites of each component domain of
/// \p label.
@@ -87,7 +91,8 @@ namespace mln
template <typename A, typename J>
util::array<mln_result(A)>
compute(const Accumulator<A>& a,
- const Image<J>& label, mln_value(J) nlabels);
+ const Image<J>& label,
+ const mln_value(J)& nlabels);
/// Compute an accumulator onto the pixel sites of each component domain of
/// \p label.
@@ -101,7 +106,8 @@ namespace mln
template <typename A, typename J>
util::array<mln_accu_with(A, mln_psite(J))::result>
compute(const Meta_Accumulator<A>& a,
- const Image<J>& label, mln_value(J) nlabels);
+ const Image<J>& label,
+ const mln_value(J)& nlabels);
@@ -112,30 +118,36 @@ namespace mln
template <typename A, typename J>
inline
- void compute_tests(const Accumulator<A>&,
- const Image<J>& label,
- mln_value(J))
+ void
+ compute_tests(const Accumulator<A>& a,
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
mln_precondition(exact(label).has_data());
+ (void) a;
(void) label;
+ (void) nlabels;
}
template <typename A, typename I, typename J>
inline
- void compute_tests(const Accumulator<A>&,
- const Image<I>& input,
- const Image<J>& label,
- mln_value(J))
+ void
+ compute_tests(const Accumulator<A>& a,
+ const Image<I>& input,
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
mln_precondition(exact(input).has_data());
mln_precondition(exact(label).has_data());
+ (void) a;
(void) input;
(void) label;
+ (void) nlabels;
}
- }
+ } // end of namespace mln::labeling::internal
@@ -148,68 +160,60 @@ namespace mln
template <typename A, typename J>
inline
util::array<mln_result(A)>
- compute(const Accumulator<A>& a,
+ compute(const Accumulator<A>& a_,
const Image<J>& label_,
- mln_value(J) nlabels)
+ const mln_value(J)& nlabels)
{
trace::entering("labeling::impl::generic::compute");
- internal::compute_tests(a, label_, nlabels);
+ internal::compute_tests(a_, label_, nlabels);
+ const A& a = exact(a_);
const J& label = exact(label_);
- util::array<A> accus;
- for (mln_value(J) i = 0; i <= nlabels; ++i)
- accus.append(exact(a));
+ util::array<A> accus(nlabels + 1, a);
mln_piter(J) p(label.domain());
- mln_value(J) l;
for_all(p)
accus[label(p)].take(p);
- util::array<mln_result(A)> results;
+ util::array<mln_result(A)> arr(nlabels + 1);
for (unsigned i = 0; i < accus.nelements(); ++i)
if (accus[i].is_valid())
- results.append(accus[i]);
- else
- results.append(mln_result(A)());
+ arr[i] = accus[i];
trace::exiting("labeling::impl::generic::compute");
- return results;
+ return arr;
}
template <typename A, typename I, typename J>
inline
util::array<mln_result(A)>
- compute(const Accumulator<A>& a,
+ compute(const Accumulator<A>& a_,
const Image<I>& input_,
const Image<J>& label_,
- mln_value(J) nlabels)
+ const mln_value(J)& nlabels)
{
trace::entering("labeling::impl::generic::compute");
- internal::compute_tests(a, input_, label_, nlabels);
+ internal::compute_tests(a_, input_, label_, nlabels);
+ const A& a = exact(a_);
const I& input = exact(input_);
const J& label = exact(label_);
- util::array<A> accus;
- for (mln_value(J) i = 0; i <= nlabels; ++i)
- accus.append(A());
+ util::array<A> accus (nlabels + 1, a);
mln_piter(I) p(input.domain());
- mln_value(J) l;
for_all(p)
accus[label(p)].take(input(p));
- util::array<mln_result(A)> results;
+ util::array<mln_result(A)> res(nlabels + 1);
for (unsigned i = 0; i < accus.nelements(); ++i)
if (accus[i].is_valid())
- results.append(accus[i]);
- else
- results.append(mln_result(A)());
+ res[i] = accus[i];
trace::exiting("labeling::impl::generic::compute");
- return results;
+ return res;
}
} // end of namespace mln::labeling::impl::internal
@@ -226,7 +230,7 @@ namespace mln
util::array<mln_result(A)>
compute_dispatch(const Accumulator<A>& a,
const Image<J>& label,
- mln_value(J) nlabels)
+ const mln_value(J)& nlabels)
{
return impl::generic::compute(a, label, nlabels);
}
@@ -238,12 +242,12 @@ namespace mln
compute_dispatch(const Accumulator<A>& a,
const Image<I>& input,
const Image<J>& label,
- mln_value(J) nlabels)
+ const mln_value(J)& nlabels)
{
return impl::generic::compute(a, input, label, nlabels);
}
- } // end of namespace mln::internal
+ } // end of namespace mln::labeling::internal
@@ -254,15 +258,18 @@ namespace mln
util::array<mln_result(A)>
compute(const Accumulator<A>& a,
const Image<I>& input,
- const Image<J>& label, mln_value(J) nlabels)
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
trace::entering("labeling::compute");
- util::array<mln_result(A)> results =
- internal::compute_dispatch(a, input, label, nlabels);
+ internal::compute_tests(a, input, label, nlabels);
+
+ typedef util::array<mln_result(A)> R;
+ R res = internal::compute_dispatch(a, input, label, nlabels);
trace::exiting("labeling::compute");
- return results;
+ return res;
}
template <typename A, typename I, typename J>
@@ -270,7 +277,8 @@ namespace mln
util::array<mln_accu_with(A, mln_value(I))::result>
compute(const Meta_Accumulator<A>& a,
const Image<I>& input,
- const Image<J>& label, mln_value(J) nlabels)
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
typedef mln_accu_with(A, mln_value(I)) A_;
A_ a_ = accu::unmeta(exact(a), mln_value(I)());
@@ -283,15 +291,18 @@ namespace mln
inline
util::array<mln_result(A)>
compute(const Accumulator<A>& a,
- const Image<J>& label, mln_value(J) nlabels)
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
trace::entering("labeling::compute");
- util::array<mln_result(A)> results =
- internal::compute_dispatch(a, label, nlabels);
+ internal::compute_tests(a, label, nlabels);
+
+ typedef util::array<mln_result(A)> R;
+ R res = internal::compute_dispatch(a, label, nlabels);
trace::exiting("labeling::compute");
- return results;
+ return res;
}
@@ -299,7 +310,8 @@ namespace mln
inline
util::array<mln_accu_with(A, mln_psite(J))::result>
compute(const Meta_Accumulator<A>& a,
- const Image<J>& label, mln_value(J) nlabels)
+ const Image<J>& label,
+ const mln_value(J)& nlabels)
{
typedef mln_accu_with(A, mln_psite(J)) A_;
A_ a_ = accu::unmeta(exact(a), mln_psite(J)());
diff --git a/milena/mln/util/array.hh b/milena/mln/util/array.hh
index 5f49839..9658919 100644
--- a/milena/mln/util/array.hh
+++ b/milena/mln/util/array.hh
@@ -82,6 +82,13 @@ namespace mln
/// Constructor without arguments.
array();
+ /// Construct a new array and resize it to \n elements.
+ array(unsigned n);
+
+ /// Construct a new array, resize it to \n elements and fill it
+ /// with \p default_value.
+ array(unsigned n, const T& value);
+
/// Reserve memory for \p n elements.
void reserve(unsigned n);
@@ -247,6 +254,20 @@ namespace mln
template <typename T>
inline
+ array<T>::array(unsigned n)
+ : v_(n)
+ {
+ }
+
+ template <typename T>
+ inline
+ array<T>::array(unsigned n, const T& value)
+ : v_(n, value)
+ {
+ }
+
+ template <typename T>
+ inline
void
array<T>::reserve(unsigned n)
{
--
1.5.6.5
1
0
19 Nov '08
#74: Review the trunk/milena/mln/morpho directory
-----------------------+----------------------------------------------------
Reporter: levill_r | Owner: levill_r
Type: task | Status: closed
Priority: critical | Milestone: Olena 1.0
Component: Milena | Version: 1.0
Resolution: wontfix | Keywords:
-----------------------+----------------------------------------------------
Changes (by levill_r):
* status: assigned => closed
* resolution: => wontfix
Comment:
Closing, as the merging from source:trunk/cleanup-2008/ into source:trunk/
will require a new reviewing effort.
--
Ticket URL: <https://trac.lrde.org/olena/ticket/74#comment:4>
Olena <http://olena.lrde.epita.fr>
Olena, a generic and efficient C++ image processing library.
1
0