From eb1dcafc3eb8d1fc3fd70907d783b8b3b3eb4a3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 29 Jun 2022 22:22:09 +0000 Subject: [PATCH] deploy: 1a4d9ad9492297214986cc7ef37d2d3ef85ed69c --- html/_sources/index.rst.txt | 2 +- html/_sources/installation.rst.txt | 6 +- html/design/basics.html | 2 +- html/design/channel.html | 2 +- html/design/color_base.html | 2 +- html/design/color_space.html | 2 +- html/design/concepts.html | 2 +- html/design/conclusions.html | 2 +- html/design/dynamic_image.html | 2 +- html/design/examples.html | 2 +- html/design/extending.html | 2 +- html/design/image.html | 2 +- html/design/image_view.html | 2 +- html/design/index.html | 2 +- html/design/metafunctions.html | 2 +- html/design/pixel.html | 2 +- html/design/pixel_iterator.html | 2 +- html/design/pixel_locator.html | 2 +- html/design/point.html | 2 +- html/design/technicalities.html | 2 +- html/genindex.html | 2 +- html/histogram/create.html | 2 +- html/histogram/cumulative.html | 2 +- html/histogram/extend.html | 2 +- html/histogram/extension/index.html | 2 +- html/histogram/extension/overview.html | 2 +- html/histogram/extension/std.html | 2 +- html/histogram/fill.html | 2 +- html/histogram/index.html | 2 +- html/histogram/limitations.html | 2 +- html/histogram/overview.html | 2 +- html/histogram/stl_compatibility.html | 2 +- html/histogram/subhistogram.html | 2 +- html/histogram/utilities.html | 2 +- .../affine-region-detectors.html | 2 +- html/image_processing/basics.html | 2 +- .../histogram_equalization.html | 2 +- .../histogram_matching.html | 2 +- .../contrast_enhancement/index.html | 2 +- .../contrast_enhancement/overview.html | 2 +- html/image_processing/index.html | 2 +- html/image_processing/overview.html | 2 +- html/index.html | 4 +- html/installation.html | 8 +- html/io.html | 2 +- html/naming.html | 2 +- html/numeric.html | 2 +- ...__histogram__equalization_8hpp_source.html | 348 +-- html/reference/algorithm_8hpp_source.html | 2555 +++++++++-------- html/reference/annotated.html | 2 +- html/reference/any__image_8hpp_source.html | 5 +- .../any__image__view_8hpp_source.html | 17 +- .../apply__operation_8hpp_source.html | 3 +- html/reference/base_8hpp_source.html | 11 +- html/reference/basic_8hpp_source.html | 5 +- ..._aligned__pixel__iterator_8hpp_source.html | 155 +- ...aligned__pixel__reference_8hpp_source.html | 552 ++-- .../bit__operations_8hpp_source.html | 5 +- html/reference/channel_8hpp_source.html | 924 +++--- .../channel__algorithm_8hpp_source.html | 746 ++--- ...nnel__numeric__operations_8hpp_source.html | 3 +- ...assboost_1_1gil_1_1any__image-members.html | 4 +- .../classboost_1_1gil_1_1any__image.html | 8 +- ...st_1_1gil_1_1any__image__view-members.html | 2 +- ...classboost_1_1gil_1_1any__image__view.html | 2 +- ...assboost_1_1gil_1_1bit__range-members.html | 18 +- .../classboost_1_1gil_1_1bit__range.html | 50 +- ..._1_1color__convert__deref__fn-members.html | 2 +- ...t_1_1gil_1_1color__convert__deref__fn.html | 2 +- ...oost_1_1gil_1_1deref__compose-members.html | 2 +- .../classboost_1_1gil_1_1deref__compose.html | 2 +- ...ereference__iterator__adaptor-members.html | 2 +- ...gil_1_1dereference__iterator__adaptor.html | 2 +- ..._1gil_1_1derived__image__type-members.html | 2 +- ...sboost_1_1gil_1_1derived__image__type.html | 2 +- ...il_1_1derived__iterator__type-members.html | 2 +- ...ost_1_1gil_1_1derived__iterator__type.html | 2 +- ...rived__pixel__reference__type-members.html | 2 +- ...il_1_1derived__pixel__reference__type.html | 2 +- ...1_1gil_1_1derived__view__type-members.html | 2 +- ...ssboost_1_1gil_1_1derived__view__type.html | 2 +- ...il_1_1detail_1_1correlator__n-members.html | 2 +- ...ost_1_1gil_1_1detail_1_1correlator__n.html | 2 +- ...etail_1_1file__stream__device-members.html | 10 +- ...gil_1_1detail_1_1file__stream__device.html | 35 +- ..._1_1detail_1_1istream__device-members.html | 2 +- ...t_1_1gil_1_1detail_1_1istream__device.html | 2 +- ...detail_1_1kernel__1d__adaptor-members.html | 2 +- ...1gil_1_1detail_1_1kernel__1d__adaptor.html | 2 +- ..._1gil_1_1detail_1_1kernel__2d-members.html | 2 +- ...sboost_1_1gil_1_1detail_1_1kernel__2d.html | 2 +- ..._1detail_1_1kernel__2d__fixed-members.html | 2 +- ...1_1gil_1_1detail_1_1kernel__2d__fixed.html | 2 +- ..._1_1detail_1_1ostream__device-members.html | 2 +- ...t_1_1gil_1_1detail_1_1ostream__device.html | 2 +- ...il_1_1step__iterator__adaptor-members.html | 6 +- ..._1_1detail_1_1step__iterator__adaptor.html | 14 +- ...lassboost_1_1gil_1_1histogram-members.html | 2 +- .../classboost_1_1gil_1_1histogram.html | 2 +- .../classboost_1_1gil_1_1image-members.html | 14 +- .../reference/classboost_1_1gil_1_1image.html | 44 +- ...ssboost_1_1gil_1_1image__view-members.html | 2 +- .../classboost_1_1gil_1_1image__view.html | 4 +- ..._1_1gil_1_1iterator__from__2d-members.html | 2 +- ...assboost_1_1gil_1_1iterator__from__2d.html | 2 +- ...assboost_1_1gil_1_1kernel__1d-members.html | 2 +- .../classboost_1_1gil_1_1kernel__1d.html | 2 +- ...t_1_1gil_1_1kernel__1d__fixed-members.html | 2 +- ...lassboost_1_1gil_1_1kernel__1d__fixed.html | 2 +- ...1_1memory__based__2d__locator-members.html | 2 +- ..._1_1gil_1_1memory__based__2d__locator.html | 2 +- ...memory__based__step__iterator-members.html | 8 +- ...1gil_1_1memory__based__step__iterator.html | 26 +- ...0_01_num_bits_00_01false_01_4-members.html | 12 +- ..._field_00_01_num_bits_00_01false_01_4.html | 32 +- ...00_01_num_bits_00_01true_01_4-members.html | 16 +- ...t_field_00_01_num_bits_00_01true_01_4.html | 44 +- ...l_1_1pixel__2d__locator__base-members.html | 4 +- ...st_1_1gil_1_1pixel__2d__locator__base.html | 8 +- .../classboost_1_1gil_1_1point-members.html | 2 +- .../reference/classboost_1_1gil_1_1point.html | 2 +- ...t_1_1gil_1_1promote__integral-members.html | 2 +- ...lassboost_1_1gil_1_1promote__integral.html | 2 +- ...l_1_1scanline__read__iterator-members.html | 2 +- ...st_1_1gil_1_1scanline__read__iterator.html | 2 +- ..._1gil_1_1virtual__2d__locator-members.html | 4 +- ...sboost_1_1gil_1_1virtual__2d__locator.html | 8 +- html/reference/cmyk_8hpp_source.html | 13 +- html/reference/color_8hpp_source.html | 3 +- html/reference/color__base_8hpp_source.html | 27 +- .../color__base__algorithm_8hpp_source.html | 784 ++--- .../reference/color__convert_8hpp_source.html | 478 +-- .../reference/concept__check_8hpp_source.html | 3 +- .../concepts_2channel_8hpp_source.html | 9 +- .../concepts_2color__base_8hpp_source.html | 3 +- .../concepts_2dynamic__step_8hpp_source.html | 3 +- .../concepts_2image_8hpp_source.html | 11 +- .../concepts_2image__view_8hpp_source.html | 3 +- .../concepts_2pixel_8hpp_source.html | 7 +- ...concepts_2pixel__iterator_8hpp_source.html | 5 +- .../concepts_2point_8hpp_source.html | 3 +- .../conversion__policies_8hpp_source.html | 3 +- html/reference/convolve_8hpp_source.html | 21 +- html/reference/device_8hpp_source.html | 1109 ++++--- html/reference/device__n_8hpp_source.html | 5 +- .../reference/dynamic__at__c_8hpp_source.html | 3 +- html/reference/dynamic__step_8hpp_source.html | 3 +- html/reference/error_8hpp_source.html | 3 +- ...nsion_2dynamic__image_2algorithm_8hpp.html | 7 + ...dynamic__image_2algorithm_8hpp_source.html | 23 +- ...age_2image__view__factory_8hpp_source.html | 9 +- html/reference/filter_8hpp_source.html | 232 +- html/reference/functions.html | 10 +- html/reference/functions_func.html | 10 +- html/reference/fwd_8hpp_source.html | 3 +- .../get__read__device_8hpp_source.html | 3 +- html/reference/get__reader_8hpp_source.html | 3 +- .../get__write__device_8hpp_source.html | 3 +- html/reference/get__writer_8hpp_source.html | 3 +- html/reference/gray_8hpp_source.html | 5 +- .../group___channel_convert_algorithm.html | 10 +- .../group___channel_invert_algorithm.html | 21 +- .../group___channel_multiply_algorithm.html | 12 +- .../group___color_base_algorithm_color.html | 38 +- .../group___color_base_algorithm_equal.html | 6 +- .../group___color_base_algorithm_min_max.html | 24 +- ...___color_base_algorithm_semantic_at_c.html | 14 +- .../reference/group___histogram-_helpers.html | 6 +- html/reference/group___image_model.html | 16 +- .../group___image_processing_math.html | 119 +- .../group___image_view_constructors.html | 32 +- ...group___image_view_transformations180.html | 17 +- ...___image_view_transformations90_c_c_w.html | 17 +- ...up___image_view_transformations90_c_w.html | 17 +- ...ge_view_transformations_color_convert.html | 16 +- ...__image_view_transformations_flip_l_r.html | 17 +- ...__image_view_transformations_flip_u_d.html | 17 +- ...mage_view_transformations_kth_channel.html | 17 +- ...mage_view_transformations_nth_channel.html | 12 +- ...image_view_transformations_transposed.html | 17 +- ...group___pixel_model_non_aligned_pixel.html | 8 +- .../group___pixel_model_packed_pixel.html | 8 +- html/reference/group___point_algorithm.html | 97 +- .../group___s_t_l_optimizations.html | 24 +- html/reference/harris_8hpp_source.html | 3 +- html/reference/hessian_8hpp_source.html | 3 +- html/reference/histogram_8hpp_source.html | 1152 ++++---- .../histogram__equalization_8hpp_source.html | 23 +- .../histogram__matching_8hpp_source.html | 256 +- html/reference/image_8hpp_source.html | 688 ++--- html/reference/image__view_8hpp_source.html | 33 +- .../image__view__factory_8hpp_source.html | 890 +++--- html/reference/io_2typedefs_8hpp_source.html | 11 +- html/reference/iobackend.html | 3 +- .../iterator__from__2d_8hpp_source.html | 5 +- html/reference/kernel_8hpp_source.html | 3 +- html/reference/locator_8hpp_source.html | 13 +- html/reference/make__backend_8hpp_source.html | 3 +- ...e__dynamic__image__reader_8hpp_source.html | 3 +- ...e__dynamic__image__writer_8hpp_source.html | 228 +- html/reference/make__reader_8hpp_source.html | 249 +- .../make__scanline__reader_8hpp_source.html | 109 +- html/reference/make__writer_8hpp_source.html | 219 +- html/reference/menudata.js | 2 + html/reference/metafunctions_8hpp_source.html | 5 +- html/reference/morphology_8hpp_source.html | 352 ++- html/reference/namespaceboost.html | 61 + html/reference/namespaces.html | 61 + html/reference/numeric_8hpp_source.html | 347 +-- html/reference/packed__pixel_8hpp_source.html | 3 +- html/reference/path__spec_8hpp_source.html | 17 +- html/reference/pixel_8hpp_source.html | 3 +- html/reference/pixel__based_8hpp_source.html | 3 +- .../pixel__dereference_8hpp_source.html | 3 +- .../pixel__iterator_8hpp_source.html | 3 +- .../pixel__iterator__adaptor_8hpp_source.html | 134 +- .../reference/pixel__locator_8hpp_source.html | 3 +- ...ixel__numeric__operations_8hpp_source.html | 3 +- .../planar__pixel__iterator_8hpp_source.html | 98 +- .../planar__pixel__reference_8hpp_source.html | 3 +- html/reference/point_8hpp_source.html | 39 +- .../position__iterator_8hpp_source.html | 139 +- html/reference/premultiply_8hpp_source.html | 32 +- .../promote__integral_8hpp_source.html | 5 +- ...read__and__convert__image_8hpp_source.html | 7 +- .../read__and__convert__view_8hpp_source.html | 45 +- html/reference/read__image_8hpp_source.html | 7 +- .../read__image__info_8hpp_source.html | 3 +- html/reference/read__view_8hpp_source.html | 29 +- html/reference/reader__base_8hpp_source.html | 13 +- html/reference/rgb_8hpp_source.html | 44 +- html/reference/rgba_8hpp_source.html | 40 +- .../row__buffer__helper_8hpp_source.html | 3 +- html/reference/scaling_8hpp_source.html | 3 +- .../scanline__read__iterator_8hpp_source.html | 5 +- .../reference/step__iterator_8hpp_source.html | 437 +-- ...ctboost_1_1gil_1_1_assignable-members.html | 2 +- .../structboost_1_1gil_1_1_assignable.html | 2 +- ...st_1_1gil_1_1_channel_concept-members.html | 2 +- ...tructboost_1_1gil_1_1_channel_concept.html | 2 +- ...1_channel_convertible_concept-members.html | 2 +- ..._1gil_1_1_channel_convertible_concept.html | 2 +- ...l_1_1_channel_mapping_concept-members.html | 2 +- ...st_1_1gil_1_1_channel_mapping_concept.html | 2 +- ...gil_1_1_channel_value_concept-members.html | 2 +- ...oost_1_1gil_1_1_channel_value_concept.html | 2 +- ...1_channels_compatible_concept-members.html | 2 +- ..._1gil_1_1_channels_compatible_concept.html | 2 +- ...collection_image_view_concept-members.html | 2 +- ...gil_1_1_collection_image_view_concept.html | 2 +- ...1_1gil_1_1_color_base_concept-members.html | 2 +- ...ctboost_1_1gil_1_1_color_base_concept.html | 2 +- ..._1_1_color_base_value_concept-members.html | 2 +- ...t_1_1gil_1_1_color_base_value_concept.html | 2 +- ...olor_bases_compatible_concept-members.html | 2 +- ...il_1_1_color_bases_compatible_concept.html | 2 +- ..._1gil_1_1_color_space_concept-members.html | 2 +- ...tboost_1_1gil_1_1_color_space_concept.html | 2 +- ...lor_spaces_compatible_concept-members.html | 2 +- ...l_1_1_color_spaces_compatible_concept.html | 2 +- ...1_1gil_1_1_copy_constructible-members.html | 2 +- ...ctboost_1_1gil_1_1_copy_constructible.html | 2 +- ...gil_1_1_default_constructible-members.html | 2 +- ...oost_1_1gil_1_1_default_constructible.html | 2 +- ..._1gil_1_1_equality_comparable-members.html | 2 +- ...tboost_1_1gil_1_1_equality_comparable.html | 2 +- ...collection_image_view_concept-members.html | 2 +- ...forward_collection_image_view_concept.html | 2 +- ...s_dynamic_x_step_type_concept-members.html | 2 +- ...l_1_1_has_dynamic_x_step_type_concept.html | 2 +- ...s_dynamic_y_step_type_concept-members.html | 2 +- ...l_1_1_has_dynamic_y_step_type_concept.html | 2 +- ...1_has_transposed_type_concept-members.html | 2 +- ..._1gil_1_1_has_transposed_type_concept.html | 2 +- ...omogeneous_color_base_concept-members.html | 2 +- ...il_1_1_homogeneous_color_base_concept.html | 2 +- ...eous_color_base_value_concept-members.html | 2 +- ..._homogeneous_color_base_value_concept.html | 2 +- ...mogeneous_pixel_based_concept-members.html | 2 +- ...l_1_1_homogeneous_pixel_based_concept.html | 2 +- ...1_1_homogeneous_pixel_concept-members.html | 2 +- ..._1_1gil_1_1_homogeneous_pixel_concept.html | 2 +- ...mogeneous_pixel_value_concept-members.html | 2 +- ...l_1_1_homogeneous_pixel_value_concept.html | 2 +- ...oost_1_1gil_1_1_image_concept-members.html | 2 +- .../structboost_1_1gil_1_1_image_concept.html | 2 +- ...1_1gil_1_1_image_view_concept-members.html | 2 +- ...ctboost_1_1gil_1_1_image_view_concept.html | 2 +- ..._1_1_iterator_adaptor_concept-members.html | 2 +- ...t_1_1gil_1_1_iterator_adaptor_concept.html | 2 +- ...memory_based_iterator_concept-members.html | 2 +- ...gil_1_1_memory_based_iterator_concept.html | 2 +- ...boost_1_1gil_1_1_metafunction-members.html | 2 +- .../structboost_1_1gil_1_1_metafunction.html | 2 +- ...l_1_1_mutable_channel_concept-members.html | 2 +- ...st_1_1gil_1_1_mutable_channel_concept.html | 2 +- ..._1_mutable_color_base_concept-members.html | 2 +- ...1_1gil_1_1_mutable_color_base_concept.html | 2 +- ...omogeneous_color_base_concept-members.html | 2 +- ...utable_homogeneous_color_base_concept.html | 2 +- ...ble_homogeneous_pixel_concept-members.html | 2 +- ...1_1_mutable_homogeneous_pixel_concept.html | 2 +- ..._1_mutable_image_view_concept-members.html | 2 +- ...1_1gil_1_1_mutable_image_view_concept.html | 2 +- ...able_iterator_adaptor_concept-members.html | 2 +- ..._1_1_mutable_iterator_adaptor_concept.html | 2 +- ...gil_1_1_mutable_pixel_concept-members.html | 2 +- ...oost_1_1gil_1_1_mutable_pixel_concept.html | 2 +- ...utable_pixel_iterator_concept-members.html | 2 +- ...il_1_1_mutable_pixel_iterator_concept.html | 2 +- ...mutable_pixel_locator_concept-members.html | 2 +- ...gil_1_1_mutable_pixel_locator_concept.html | 2 +- ..._access2_d_image_view_concept-members.html | 2 +- ...e_random_access2_d_image_view_concept.html | 2 +- ...dom_access2_d_locator_concept-members.html | 2 +- ...able_random_access2_d_locator_concept.html | 2 +- ...access_n_d_image_view_concept-members.html | 2 +- ..._random_access_n_d_image_view_concept.html | 2 +- ...om_access_n_d_locator_concept-members.html | 2 +- ...ble_random_access_n_d_locator_concept.html | 2 +- ...mutable_step_iterator_concept-members.html | 2 +- ...gil_1_1_mutable_step_iterator_concept.html | 2 +- ..._1gil_1_1_pixel_based_concept-members.html | 2 +- ...tboost_1_1gil_1_1_pixel_based_concept.html | 2 +- ...oost_1_1gil_1_1_pixel_concept-members.html | 2 +- .../structboost_1_1gil_1_1_pixel_concept.html | 2 +- ...1_1_pixel_convertible_concept-members.html | 2 +- ..._1_1gil_1_1_pixel_convertible_concept.html | 4 +- ...l_dereference_adaptor_concept-members.html | 2 +- ...1_1_pixel_dereference_adaptor_concept.html | 2 +- ...il_1_1_pixel_iterator_concept-members.html | 2 +- ...ost_1_1gil_1_1_pixel_iterator_concept.html | 2 +- ...gil_1_1_pixel_locator_concept-members.html | 2 +- ...oost_1_1gil_1_1_pixel_locator_concept.html | 2 +- ..._1gil_1_1_pixel_value_concept-members.html | 2 +- ...tboost_1_1gil_1_1_pixel_value_concept.html | 2 +- ...1_1_pixels_compatible_concept-members.html | 2 +- ..._1_1gil_1_1_pixels_compatible_concept.html | 2 +- ...t_1_1gil_1_1_point2_d_concept-members.html | 2 +- ...ructboost_1_1gil_1_1_point2_d_concept.html | 2 +- ..._1_1gil_1_1_point_n_d_concept-members.html | 2 +- ...uctboost_1_1gil_1_1_point_n_d_concept.html | 2 +- ...andom_access2_d_image_concept-members.html | 2 +- ...il_1_1_random_access2_d_image_concept.html | 2 +- ..._access2_d_image_view_concept-members.html | 2 +- ...1_random_access2_d_image_view_concept.html | 8 +- ...dom_access2_d_locator_concept-members.html | 2 +- ..._1_1_random_access2_d_locator_concept.html | 2 +- ...ndom_access_n_d_image_concept-members.html | 2 +- ...l_1_1_random_access_n_d_image_concept.html | 12 +- ...access_n_d_image_view_concept-members.html | 2 +- ..._random_access_n_d_image_view_concept.html | 8 +- ...om_access_n_d_locator_concept-members.html | 2 +- ...1_1_random_access_n_d_locator_concept.html | 2 +- ...tructboost_1_1gil_1_1_regular-members.html | 2 +- .../structboost_1_1gil_1_1_regular.html | 2 +- ...collection_image_view_concept-members.html | 2 +- ...ersible_collection_image_view_concept.html | 2 +- ...uctboost_1_1gil_1_1_same_type-members.html | 2 +- .../structboost_1_1gil_1_1_same_type.html | 2 +- ...gil_1_1_step_iterator_concept-members.html | 2 +- ...oost_1_1gil_1_1_step_iterator_concept.html | 2 +- ...uctboost_1_1gil_1_1_swappable-members.html | 2 +- .../structboost_1_1gil_1_1_swappable.html | 4 +- ..._1_1_views_compatible_concept-members.html | 2 +- ...t_1_1gil_1_1_views_compatible_concept.html | 2 +- .../structboost_1_1gil_1_1alpha__t.html | 2 +- ...gil_1_1binary__operation__obj-members.html | 8 +- ...oost_1_1gil_1_1binary__operation__obj.html | 20 +- ...1_1bit__aligned__image1__type-members.html | 2 +- ..._1_1gil_1_1bit__aligned__image1__type.html | 2 +- ...1_1bit__aligned__image2__type-members.html | 2 +- ..._1_1gil_1_1bit__aligned__image2__type.html | 2 +- ...1_1bit__aligned__image3__type-members.html | 2 +- ..._1_1gil_1_1bit__aligned__image3__type.html | 2 +- ...1_1bit__aligned__image4__type-members.html | 2 +- ..._1_1gil_1_1bit__aligned__image4__type.html | 2 +- ...1_1bit__aligned__image5__type-members.html | 2 +- ..._1_1gil_1_1bit__aligned__image5__type.html | 2 +- ..._1_1bit__aligned__image__type-members.html | 2 +- ...t_1_1gil_1_1bit__aligned__image__type.html | 2 +- ...bit__aligned__pixel__iterator-members.html | 10 +- ...1gil_1_1bit__aligned__pixel__iterator.html | 32 +- .../structboost_1_1gil_1_1black__t.html | 2 +- .../structboost_1_1gil_1_1blue__t.html | 2 +- ...ructboost_1_1gil_1_1byte__to__memunit.html | 2 +- ...1_1gil_1_1channel__assigns__t-members.html | 2 +- ...ctboost_1_1gil_1_1channel__assigns__t.html | 2 +- ..._1_1gil_1_1channel__converter-members.html | 4 +- ...uctboost_1_1gil_1_1channel__converter.html | 8 +- ..._unsigned_3_01_t_00_01_t_01_4-members.html | 2 +- ...nverter__unsigned_3_01_t_00_01_t_01_4.html | 2 +- ...2__t_00_01_dst_channel_v_01_4-members.html | 4 +- ...01float32__t_00_01_dst_channel_v_01_4.html | 8 +- ...loat32__t_00_01uint32__t_01_4-members.html | 4 +- ...ed_3_01float32__t_00_01uint32__t_01_4.html | 8 +- ...int32__t_00_01float32__t_01_4-members.html | 4 +- ...ed_3_01uint32__t_00_01float32__t_01_4.html | 8 +- ..._1channel__divides__scalar__t-members.html | 2 +- ...1_1gil_1_1channel__divides__scalar__t.html | 2 +- ...1_1gil_1_1channel__divides__t-members.html | 2 +- ...ctboost_1_1gil_1_1channel__divides__t.html | 2 +- ..._1_1gil_1_1channel__halves__t-members.html | 2 +- ...uctboost_1_1gil_1_1channel__halves__t.html | 2 +- ...rence60971d1be7c73d78ff725e654349b4f8.html | 2 +- ...reference_00_01_color_space_01_4_01_4.html | 2 +- ..._1_1channel__minus__scalar__t-members.html | 2 +- ...t_1_1gil_1_1channel__minus__scalar__t.html | 2 +- ...t_1_1gil_1_1channel__minus__t-members.html | 2 +- ...ructboost_1_1gil_1_1channel__minus__t.html | 2 +- ...1_1gil_1_1channel__multiplier-members.html | 4 +- ...ctboost_1_1gil_1_1channel__multiplier.html | 8 +- ...channel__multiplier__unsigned-members.html | 4 +- ...1gil_1_1channel__multiplier__unsigned.html | 8 +- ..._unsigned_3_01float32__t_01_4-members.html | 4 +- ...tiplier__unsigned_3_01float32__t_01_4.html | 8 +- ...__unsigned_3_01uint16__t_01_4-members.html | 4 +- ...ltiplier__unsigned_3_01uint16__t_01_4.html | 8 +- ...r__unsigned_3_01uint8__t_01_4-members.html | 4 +- ...ultiplier__unsigned_3_01uint8__t_01_4.html | 8 +- ...hannel__multiplies__scalar__t-members.html | 2 +- ...gil_1_1channel__multiplies__scalar__t.html | 2 +- ...gil_1_1channel__multiplies__t-members.html | 2 +- ...oost_1_1gil_1_1channel__multiplies__t.html | 2 +- ...l_1_1channel__plus__scalar__t-members.html | 2 +- ...st_1_1gil_1_1channel__plus__scalar__t.html | 2 +- ...st_1_1gil_1_1channel__plus__t-members.html | 2 +- ...tructboost_1_1gil_1_1channel__plus__t.html | 2 +- .../structboost_1_1gil_1_1channel__type.html | 2 +- ...e_00_01_color_space_01_4_01_4-members.html | 2 +- ...reference_00_01_color_space_01_4_01_4.html | 2 +- ...t_1_1gil_1_1channel__zeros__t-members.html | 2 +- ...ructboost_1_1gil_1_1channel__zeros__t.html | 2 +- ...t_1_1gil_1_1channels__are__compatible.html | 2 +- ...1color__converted__view__type-members.html | 2 +- ..._1gil_1_1color__converted__view__type.html | 2 +- ..._4_007c517a1792029d793aefced61b1af954.html | 2 +- ...8_8_8_01_4_00_01_dst_p_00_01_c_c_01_4.html | 2 +- ...s_8_8_8_01_4_00_01_dst_p_01_4-members.html | 2 +- ..._01_views_8_8_8_01_4_00_01_dst_p_01_4.html | 2 +- ...ement__const__reference__type-members.html | 2 +- ...olor__element__const__reference__type.html | 2 +- ...lor__element__reference__type-members.html | 2 +- ...il_1_1color__element__reference__type.html | 2 +- ..._1gil_1_1color__element__type-members.html | 2 +- ...tboost_1_1gil_1_1color__element__type.html | 2 +- ...reference_00_01_color_space_01_4_01_4.html | 2 +- ...e_00_4fb1a46a79bb525d815c77d4e7feb3e2.html | 2 +- ...boost_1_1gil_1_1const__iterator__type.html | 2 +- ...structboost_1_1gil_1_1contains__color.html | 2 +- .../structboost_1_1gil_1_1cyan__t.html | 2 +- ..._1default__channel__converter-members.html | 4 +- ...1_1gil_1_1default__channel__converter.html | 8 +- ..._1_1default__color__converter-members.html | 2 +- ...t_1_1gil_1_1default__color__converter.html | 2 +- ...il_1_1default__color__converter__impl.html | 2 +- ...mpl_3_01_c1_00_01rgba__t_01_4-members.html | 2 +- ...erter__impl_3_01_c1_00_01rgba__t_01_4.html | 2 +- ...ter__impl_3_01_c_00_01_c_01_4-members.html | 2 +- ...__converter__impl_3_01_c_00_01_c_01_4.html | 2 +- ...3_01cmyk__t_00_01gray__t_01_4-members.html | 2 +- ...r__impl_3_01cmyk__t_00_01gray__t_01_4.html | 2 +- ..._3_01cmyk__t_00_01rgb__t_01_4-members.html | 2 +- ...er__impl_3_01cmyk__t_00_01rgb__t_01_4.html | 2 +- ...3_01gray__t_00_01cmyk__t_01_4-members.html | 2 +- ...r__impl_3_01gray__t_00_01cmyk__t_01_4.html | 2 +- ..._3_01gray__t_00_01rgb__t_01_4-members.html | 2 +- ...er__impl_3_01gray__t_00_01rgb__t_01_4.html | 2 +- ..._3_01rgb__t_00_01cmyk__t_01_4-members.html | 2 +- ...er__impl_3_01rgb__t_00_01cmyk__t_01_4.html | 2 +- ..._3_01rgb__t_00_01gray__t_01_4-members.html | 2 +- ...er__impl_3_01rgb__t_00_01gray__t_01_4.html | 2 +- ...mpl_3_01rgba__t_00_01_c2_01_4-members.html | 2 +- ...erter__impl_3_01rgba__t_00_01_c2_01_4.html | 2 +- ...3_01rgba__t_00_01rgba__t_01_4-members.html | 2 +- ...r__impl_3_01rgba__t_00_01rgba__t_01_4.html | 2 +- ...ctboost_1_1gil_1_1deref__base-members.html | 2 +- .../structboost_1_1gil_1_1deref__base.html | 2 +- ..._1_channel_is_mutable_concept-members.html | 2 +- ...detail_1_1_channel_is_mutable_concept.html | 2 +- ...image_view_is_mutable_concept-members.html | 2 +- ...1_pixel_image_view_is_mutable_concept.html | 2 +- ...l_iterator_is_mutable_concept-members.html | 2 +- ...1_1_pixel_iterator_is_mutable_concept.html | 2 +- ...image_view_is_mutable_concept-members.html | 2 +- ...cess2_d_image_view_is_mutable_concept.html | 2 +- ...image_view_is_mutable_concept-members.html | 2 +- ...ess_n_d_image_view_is_mutable_concept.html | 2 +- ..._d_locator_is_mutable_concept-members.html | 2 +- ...access_n_d_locator_is_mutable_concept.html | 2 +- ...el__converter__unsigned__impl-members.html | 4 +- ...1_1channel__converter__unsigned__impl.html | 8 +- ...1_1gil_1_1detail_1_1copier__n-members.html | 2 +- ...ctboost_1_1gil_1_1detail_1_1copier__n.html | 2 +- ...__from__2d_3_01_o_l_01_4_01_4-members.html | 2 +- ...iterator__from__2d_3_01_o_l_01_4_01_4.html | 2 +- ...2d_3_01_i_l_01_4_00_01_o_01_4-members.html | 2 +- ...__from__2d_3_01_i_l_01_4_00_01_o_01_4.html | 2 +- ...r__fr9b29768443232234f95320b3f7e74729.html | 2 +- ...iterator__from__2d_3_01_o_l_01_4_01_4.html | 2 +- ...il_1_1detail_1_1correlator__k-members.html | 2 +- ...ost_1_1gil_1_1detail_1_1correlator__k.html | 2 +- ...boost_1_1gil_1_1detail_1_1dec-members.html | 2 +- .../structboost_1_1gil_1_1detail_1_1dec.html | 2 +- ...__from__2d_3_01_loc_01_4_01_4-members.html | 2 +- ...iterator__from__2d_3_01_loc_01_4_01_4.html | 2 +- ...c1_01629d3bb430b0f68b56ea86189659092c.html | 2 +- ...c1_0173caba61dca2b882aec2f645342d0509.html | 2 +- ...d_3_01_loc_01_4_00_01_it_01_4-members.html | 2 +- ..._from__2d_3_01_loc_01_4_00_01_it_01_4.html | 2 +- ...0_01p070af5a6381fa1052984b9da304c2ab5.html | 2 +- ...0_01pf9bfe8ab8bfc90e04b4b4cc6781043d9.html | 2 +- ..._01_4d72b7921e34c93820ef294c57244dd71.html | 2 +- ..._01_4d7864b08625bf89623b959decef9be6b.html | 2 +- ..._1_1file__stream__device_1_1read__tag.html | 2 +- ...st_1_1gil_1_1detail_1_1filler-members.html | 2 +- ...tructboost_1_1gil_1_1detail_1_1filler.html | 2 +- ..._1detail_1_1filler_3_011_01_4-members.html | 2 +- ...1_1gil_1_1detail_1_1filler_3_011_01_4.html | 2 +- ...1gil_1_1detail_1_1hash__tuple-members.html | 4 +- ...boost_1_1gil_1_1detail_1_1hash__tuple.html | 8 +- ...ment_00_01_layout_00_011_01_4-members.html | 2 +- ...3_01_element_00_01_layout_00_011_01_4.html | 2 +- ...ment_00_01_layout_00_012_01_4-members.html | 4 +- ...3_01_element_00_01_layout_00_012_01_4.html | 8 +- ...ment_00_01_layout_00_013_01_4-members.html | 4 +- ...3_01_element_00_01_layout_00_013_01_4.html | 8 +- ...ment_00_01_layout_00_014_01_4-members.html | 4 +- ...3_01_element_00_01_layout_00_014_01_4.html | 8 +- ...ment_00_01_layout_00_015_01_4-members.html | 4 +- ...3_01_element_00_01_layout_00_015_01_4.html | 8 +- ..._1_1gil_1_1detail_1_1identity-members.html | 2 +- ...uctboost_1_1gil_1_1detail_1_1identity.html | 2 +- ...boost_1_1gil_1_1detail_1_1inc-members.html | 2 +- .../structboost_1_1gil_1_1detail_1_1inc.html | 2 +- ...1_1gil_1_1detail_1_1is__input__device.html | 2 +- ..._1gil_1_1detail_1_1is__output__device.html | 2 +- ..._1_1gil_1_1detail_1_1is__read__device.html | 2 +- ...st_1_1gil_1_1detail_1_1is__read__only.html | 2 +- ...1_1gil_1_1detail_1_1is__write__device.html | 2 +- ...il_1_1kth__channel__deref__fn-members.html | 2 +- ..._1_1detail_1_1kth__channel__deref__fn.html | 2 +- ...il_1_1nth__channel__deref__fn-members.html | 4 +- ..._1_1detail_1_1nth__channel__deref__fn.html | 8 +- ...1_1detail_1_1plus__asymmetric-members.html | 2 +- ..._1_1gil_1_1detail_1_1plus__asymmetric.html | 2 +- ...ail_1_1rgb__to__luminance__fn-members.html | 4 +- ...l_1_1detail_1_1rgb__to__luminance__fn.html | 8 +- ...gil_1_1detail_1_1std__fill__t-members.html | 2 +- ...oost_1_1gil_1_1detail_1_1std__fill__t.html | 2 +- ...gil_1_1detail_1_1tuple__limit-members.html | 2 +- ...oost_1_1gil_1_1detail_1_1tuple__limit.html | 2 +- ...t_1_1gil_1_1detail_1_1type__to__index.html | 2 +- ...ructboost_1_1gil_1_1devicen__color__t.html | 2 +- ..._1_1gil_1_1devicen__layout__t-members.html | 2 +- ...uctboost_1_1gil_1_1devicen__layout__t.html | 2 +- ...uctboost_1_1gil_1_1devicen__t-members.html | 2 +- .../structboost_1_1gil_1_1devicen__t.html | 2 +- ...oost_1_1gil_1_1dynamic__x__step__type.html | 2 +- ...ep__type_3_01_pixel_01_5_01_4-members.html | 2 +- ...c__x__step__type_3_01_pixel_01_5_01_4.html | 2 +- ..._3_01const_01_pixel_01_5_01_4-members.html | 2 +- ...ep__type_3_01const_01_pixel_01_5_01_4.html | 2 +- ..._1dynamic__xy__step__transposed__type.html | 2 +- ...ost_1_1gil_1_1dynamic__xy__step__type.html | 2 +- ...oost_1_1gil_1_1dynamic__y__step__type.html | 2 +- ...il_1_1element__const__reference__type.html | 2 +- ...st_1_1gil_1_1element__reference__type.html | 2 +- .../structboost_1_1gil_1_1element__type.html | 2 +- ...1_1gil_1_1get__dynamic__image__reader.html | 2 +- ...1_1gil_1_1get__dynamic__image__writer.html | 2 +- .../structboost_1_1gil_1_1get__reader.html | 2 +- ...tboost_1_1gil_1_1get__reader__backend.html | 2 +- ...1gil_1_1get__scanline__reader-members.html | 2 +- ...boost_1_1gil_1_1get__scanline__reader.html | 2 +- .../structboost_1_1gil_1_1get__writer.html | 2 +- .../structboost_1_1gil_1_1gray__color__t.html | 2 +- .../structboost_1_1gil_1_1green__t.html | 2 +- ...tructboost_1_1gil_1_1image__is__basic.html | 2 +- ...ctboost_1_1gil_1_1image__type-members.html | 2 +- .../structboost_1_1gil_1_1image__type.html | 2 +- ...boost_1_1gil_1_1is__iterator__adaptor.html | 2 +- ...1_b_00_01_c_00_01_l_00_01_m_01_4_01_4.html | 2 +- ...reference_00_01_color_space_01_4_01_4.html | 2 +- ...reference_00_01_color_space_01_4_01_4.html | 2 +- ...ctboost_1_1gil_1_1is__read__supported.html | 2 +- ..._1gil_1_1iterator__adaptor__get__base.html | 2 +- ...t_1_1gil_1_1iterator__adaptor__rebind.html | 2 +- ..._1gil_1_1iterator__add__deref-members.html | 2 +- ...tboost_1_1gil_1_1iterator__add__deref.html | 2 +- ..._00_0927b7f3fa453e9b4decea8a0c8e52f27.html | 2 +- ..._00_099dd338dfbc32474aacfee6846d34880.html | 2 +- ...ctboost_1_1gil_1_1iterator__is__basic.html | 2 +- ...el_3_01_t_00_01_l_01_4_01_5_01_4_01_4.html | 2 +- ...t_00_49e6005b45e6301328ca4342b3cea079.html | 2 +- ...el__i11756f255913088facaf56838bba8ad0.html | 2 +- ...el__i1e167244adb96adf7850fda415bdbfe9.html | 2 +- ...01pixel_3_01_t_00_01_l_01_4_01_5_01_4.html | 2 +- ...3_01_t_00_01_l_01_4_01const_01_5_01_4.html | 2 +- ...rator_3_01_t_01_5_00_01_c_s_01_4_01_4.html | 2 +- ...01_t_01const_01_5_00_01_c_s_01_4_01_4.html | 2 +- ...boost_1_1gil_1_1iterator__is__mutable.html | 2 +- ...uctboost_1_1gil_1_1iterator__is__step.html | 2 +- .../structboost_1_1gil_1_1iterator__type.html | 2 +- ...1_1gil_1_1iterator__type__from__pixel.html | 2 +- ...l_1_1kth__channel__view__type-members.html | 4 +- ...st_1_1gil_1_1kth__channel__view__type.html | 8 +- ...ement__const__reference__type-members.html | 2 +- ...ntic__element__const__reference__type.html | 2 +- ...tic__element__reference__type-members.html | 2 +- ...h__semantic__element__reference__type.html | 2 +- ...1kth__semantic__element__type-members.html | 2 +- ..._1gil_1_1kth__semantic__element__type.html | 2 +- .../structboost_1_1gil_1_1layout-members.html | 2 +- .../structboost_1_1gil_1_1layout.html | 2 +- ...uctboost_1_1gil_1_1locator__is__basic.html | 2 +- ...tboost_1_1gil_1_1locator__is__mutable.html | 2 +- ...st_1_1gil_1_1locator__is__step__in__x.html | 2 +- ...st_1_1gil_1_1locator__is__step__in__y.html | 2 +- ...boost_1_1gil_1_1locator__type-members.html | 2 +- .../structboost_1_1gil_1_1locator__type.html | 2 +- .../structboost_1_1gil_1_1magenta__t.html | 2 +- ...t_1_1gil_1_1memunit__step__fn-members.html | 6 +- ...ructboost_1_1gil_1_1memunit__step__fn.html | 14 +- ...l_1_1nth__channel__view__type-members.html | 4 +- ...st_1_1gil_1_1nth__channel__view__type.html | 8 +- ...ew_3_01_views_8_8_8_01_4_01_4-members.html | 2 +- ...mage__view_3_01_views_8_8_8_01_4_01_4.html | 2 +- .../structboost_1_1gil_1_1num__channels.html | 2 +- ..._1gil_1_1packed__image1__type-members.html | 2 +- ...tboost_1_1gil_1_1packed__image1__type.html | 2 +- ..._1gil_1_1packed__image2__type-members.html | 2 +- ...tboost_1_1gil_1_1packed__image2__type.html | 2 +- ..._1gil_1_1packed__image3__type-members.html | 2 +- ...tboost_1_1gil_1_1packed__image3__type.html | 2 +- ..._1gil_1_1packed__image4__type-members.html | 2 +- ...tboost_1_1gil_1_1packed__image4__type.html | 2 +- ..._1gil_1_1packed__image5__type-members.html | 2 +- ...tboost_1_1gil_1_1packed__image5__type.html | 2 +- ...1_1gil_1_1packed__image__type-members.html | 2 +- ...ctboost_1_1gil_1_1packed__image__type.html | 2 +- ...boost_1_1gil_1_1packed__pixel-members.html | 2 +- .../structboost_1_1gil_1_1packed__pixel.html | 2 +- ...1_1gil_1_1packed__pixel__type-members.html | 2 +- ...ctboost_1_1gil_1_1packed__pixel__type.html | 2 +- .../structboost_1_1gil_1_1pixel-members.html | 2 +- .../structboost_1_1gil_1_1pixel.html | 2 +- ...t_1_1gil_1_1pixel__assigns__t-members.html | 2 +- ...ructboost_1_1gil_1_1pixel__assigns__t.html | 2 +- ..._1_1pixel__divides__scalar__t-members.html | 2 +- ...t_1_1gil_1_1pixel__divides__scalar__t.html | 2 +- ...t_1_1gil_1_1pixel__divides__t-members.html | 2 +- ...ructboost_1_1gil_1_1pixel__divides__t.html | 2 +- ...st_1_1gil_1_1pixel__halves__t-members.html | 2 +- ...tructboost_1_1gil_1_1pixel__halves__t.html | 2 +- ...tboost_1_1gil_1_1pixel__is__reference.html | 2 +- ...ost_1_1gil_1_1pixel__minus__t-members.html | 2 +- ...structboost_1_1gil_1_1pixel__minus__t.html | 2 +- ...1pixel__multiplies__scalar__t-members.html | 2 +- ..._1gil_1_1pixel__multiplies__scalar__t.html | 2 +- ..._1gil_1_1pixel__multiplies__t-members.html | 2 +- ...tboost_1_1gil_1_1pixel__multiplies__t.html | 2 +- ...oost_1_1gil_1_1pixel__plus__t-members.html | 2 +- .../structboost_1_1gil_1_1pixel__plus__t.html | 2 +- .../structboost_1_1gil_1_1pixel__proxy.html | 2 +- ...1_1gil_1_1pixel__reference__is__basic.html | 2 +- ...1gil_1_1pixel__reference__is__mutable.html | 2 +- ...1_1gil_1_1pixel__reference__is__proxy.html | 2 +- ...oost_1_1gil_1_1pixel__reference__type.html | 2 +- ..._1_1gil_1_1pixel__value__type-members.html | 2 +- ...uctboost_1_1gil_1_1pixel__value__type.html | 2 +- ...ost_1_1gil_1_1pixel__zeros__t-members.html | 2 +- ...structboost_1_1gil_1_1pixel__zeros__t.html | 2 +- ...ost_1_1gil_1_1pixels__are__compatible.html | 2 +- ...il_1_1planar__pixel__iterator-members.html | 2 +- ...ost_1_1gil_1_1planar__pixel__iterator.html | 2 +- ...l_1_1planar__pixel__reference-members.html | 2 +- ...st_1_1gil_1_1planar__pixel__reference.html | 2 +- ..._1_1gil_1_1position__iterator-members.html | 18 +- ...uctboost_1_1gil_1_1position__iterator.html | 57 +- ...tboost_1_1gil_1_1reader__base-members.html | 2 +- .../structboost_1_1gil_1_1reader__base.html | 2 +- .../structboost_1_1gil_1_1red__t.html | 2 +- .../reference/structboost_1_1gil_1_1size.html | 2 +- ...st_1_1gil_1_1transposed__type-members.html | 2 +- ...tructboost_1_1gil_1_1transposed__type.html | 2 +- ...il_1_1type__from__x__iterator-members.html | 2 +- ...ost_1_1gil_1_1type__from__x__iterator.html | 2 +- ...structboost_1_1gil_1_1view__is__basic.html | 2 +- ...ructboost_1_1gil_1_1view__is__mutable.html | 2 +- ...boost_1_1gil_1_1view__is__step__in__x.html | 2 +- ...boost_1_1gil_1_1view__is__step__in__y.html | 2 +- ...uctboost_1_1gil_1_1view__type-members.html | 2 +- .../structboost_1_1gil_1_1view__type.html | 2 +- ...il_1_1view__type__from__pixel-members.html | 2 +- ...ost_1_1gil_1_1view__type__from__pixel.html | 2 +- ...oost_1_1gil_1_1views__are__compatible.html | 2 +- .../structboost_1_1gil_1_1yellow__t.html | 2 +- html/reference/threshold_8hpp_source.html | 15 +- html/reference/todo.html | 2 +- html/reference/typedefs_8hpp_source.html | 416 +-- html/reference/utilities_8hpp_source.html | 288 +- .../virtual__locator_8hpp_source.html | 3 +- html/reference/write__view_8hpp_source.html | 31 +- html/search.html | 2 +- html/searchindex.js | 2 +- html/toolbox.html | 2 +- html/tutorial/gradient.html | 2 +- html/tutorial/histogram.html | 2 +- html/tutorial/video.html | 2 +- 710 files changed, 8780 insertions(+), 8380 deletions(-) create mode 100644 html/reference/namespaceboost.html create mode 100644 html/reference/namespaces.html diff --git a/html/_sources/index.rst.txt b/html/_sources/index.rst.txt index 71bdcf120..40779419c 100644 --- a/html/_sources/index.rst.txt +++ b/html/_sources/index.rst.txt @@ -1,7 +1,7 @@ Boost Generic Image Library =========================== -The Generic Image Library (GIL) is a C++11 header-only library that abstracts image +The Generic Image Library (GIL) is a C++14 header-only library that abstracts image representations from algorithms and allows writing code that can work on a variety of images with performance similar to hand-writing for a specific image type. diff --git a/html/_sources/installation.rst.txt b/html/_sources/installation.rst.txt index d81064515..41b910d3c 100644 --- a/html/_sources/installation.rst.txt +++ b/html/_sources/installation.rst.txt @@ -20,13 +20,11 @@ Compiling --------- The Boost.GIL library source code should successfully compile with any -compiler with complete C++11 support. +compiler with complete C++14 support. .. note:: - We are planning to drop support for require C++14 support in Boost 1.76 or later, - or selectively drop support for GCC 5 due to its issues with inheriting constructors, - see `discussion for PR #526 `_. + Boost.GIL requires C++14 compiler since ince Boost 1.80. For the actual list of currently tested compilers, check results of the library CI builds linked from the `README.md `_ diff --git a/html/design/basics.html b/html/design/basics.html index 34fc21b8c..af8976b80 100644 --- a/html/design/basics.html +++ b/html/design/basics.html @@ -114,7 +114,7 @@ read the sections in order.

diff --git a/html/design/channel.html b/html/design/channel.html index 426c60ad2..38c4daa95 100644 --- a/html/design/channel.html +++ b/html/design/channel.html @@ -263,7 +263,7 @@ channel-level algorithms that GIL provides:

diff --git a/html/design/color_base.html b/html/design/color_base.html index 6b6045e20..25a7974c3 100644 --- a/html/design/color_base.html +++ b/html/design/color_base.html @@ -310,7 +310,7 @@ color base require that they all have the same color space.

diff --git a/html/design/color_space.html b/html/design/color_space.html index dfe109da5..f0e0ca7ce 100644 --- a/html/design/color_space.html +++ b/html/design/color_space.html @@ -162,7 +162,7 @@ A color space and its associated mapping are often used together.

diff --git a/html/design/concepts.html b/html/design/concepts.html index a1534bd94..45fa65add 100644 --- a/html/design/concepts.html +++ b/html/design/concepts.html @@ -143,7 +143,7 @@ Most of them are defined at the diff --git a/html/design/conclusions.html b/html/design/conclusions.html index 1097e4294..cbe480ceb 100644 --- a/html/design/conclusions.html +++ b/html/design/conclusions.html @@ -121,7 +121,7 @@ raw pixel data from another image library.

diff --git a/html/design/dynamic_image.html b/html/design/dynamic_image.html index dfe996afb..9b3c3f7bd 100644 --- a/html/design/dynamic_image.html +++ b/html/design/dynamic_image.html @@ -274,7 +274,7 @@ uniformly as a collection and store them in the same container.

diff --git a/html/design/examples.html b/html/design/examples.html index 6b228b386..b5c2bfdfa 100644 --- a/html/design/examples.html +++ b/html/design/examples.html @@ -264,7 +264,7 @@ channel depth. They could be either planar or interleaved.

diff --git a/html/design/extending.html b/html/design/extending.html index 7b8c25bc0..4348aa867 100644 --- a/html/design/extending.html +++ b/html/design/extending.html @@ -234,7 +234,7 @@ defines the Mandelbrot set.

diff --git a/html/design/image.html b/html/design/image.html index 82bb830ee..b009a885a 100644 --- a/html/design/image.html +++ b/html/design/image.html @@ -175,7 +175,7 @@ there are no padding bits at the end of rows of packed images.

diff --git a/html/design/image_view.html b/html/design/image_view.html index 4ff1348ca..a4726cdf1 100644 --- a/html/design/image_view.html +++ b/html/design/image_view.html @@ -486,7 +486,7 @@ development and is not optimized for speed

diff --git a/html/design/index.html b/html/design/index.html index a01fda94b..580170efa 100644 --- a/html/design/index.html +++ b/html/design/index.html @@ -102,7 +102,7 @@ structure and basic elements of the Generic Image Library (GIL).

diff --git a/html/design/metafunctions.html b/html/design/metafunctions.html index 6a26d67bc..4cbb4cd69 100644 --- a/html/design/metafunctions.html +++ b/html/design/metafunctions.html @@ -302,7 +302,7 @@ is basic, but a color converted view or a virtual view is not.

diff --git a/html/design/pixel.html b/html/design/pixel.html index e375294f4..79d9bc82f 100644 --- a/html/design/pixel.html +++ b/html/design/pixel.html @@ -348,7 +348,7 @@ different color spaces and channel types:

diff --git a/html/design/pixel_iterator.html b/html/design/pixel_iterator.html index 2a943ae8a..a4744c14c 100644 --- a/html/design/pixel_iterator.html +++ b/html/design/pixel_iterator.html @@ -368,7 +368,7 @@ but not MemoryBased diff --git a/html/design/pixel_locator.html b/html/design/pixel_locator.html index 0747aef43..a068467fe 100644 --- a/html/design/pixel_locator.html +++ b/html/design/pixel_locator.html @@ -358,7 +358,7 @@ using the x-iterators directly.

diff --git a/html/design/point.html b/html/design/point.html index 569956d12..88c61ce99 100644 --- a/html/design/point.html +++ b/html/design/point.html @@ -134,7 +134,7 @@ coordinate type.

diff --git a/html/design/technicalities.html b/html/design/technicalities.html index 1407fe2d7..292f126a2 100644 --- a/html/design/technicalities.html +++ b/html/design/technicalities.html @@ -159,7 +159,7 @@ suggesting the above solution.

diff --git a/html/genindex.html b/html/genindex.html index 4f6978482..dfcf30fa6 100644 --- a/html/genindex.html +++ b/html/genindex.html @@ -76,7 +76,7 @@ diff --git a/html/histogram/create.html b/html/histogram/create.html index 85a1cce48..d5de00442 100644 --- a/html/histogram/create.html +++ b/html/histogram/create.html @@ -105,7 +105,7 @@ to match the GIL image.

diff --git a/html/histogram/cumulative.html b/html/histogram/cumulative.html index 270757ee1..6ec70d1c5 100644 --- a/html/histogram/cumulative.html +++ b/html/histogram/cumulative.html @@ -102,7 +102,7 @@ and then call the function.

diff --git a/html/histogram/extend.html b/html/histogram/extend.html index 9aa2360d0..c51911010 100644 --- a/html/histogram/extend.html +++ b/html/histogram/extend.html @@ -138,7 +138,7 @@ the key.

diff --git a/html/histogram/extension/index.html b/html/histogram/extension/index.html index 04dde4dd2..3253fa191 100644 --- a/html/histogram/extension/index.html +++ b/html/histogram/extension/index.html @@ -90,7 +90,7 @@ usage of external containers as histograms for GIL images.

diff --git a/html/histogram/extension/overview.html b/html/histogram/extension/overview.html index cb6e8fe7b..9a9a6c207 100644 --- a/html/histogram/extension/overview.html +++ b/html/histogram/extension/overview.html @@ -121,7 +121,7 @@ are provided as extensions.

diff --git a/html/histogram/extension/std.html b/html/histogram/extension/std.html index 84ee15885..1a67c63bf 100644 --- a/html/histogram/extension/std.html +++ b/html/histogram/extension/std.html @@ -120,7 +120,7 @@ diff --git a/html/histogram/fill.html b/html/histogram/fill.html index a7f8045dc..1bdea8f47 100644 --- a/html/histogram/fill.html +++ b/html/histogram/fill.html @@ -182,7 +182,7 @@ which is of std::tu diff --git a/html/histogram/index.html b/html/histogram/index.html index 2d83af210..4e7788acd 100644 --- a/html/histogram/index.html +++ b/html/histogram/index.html @@ -95,7 +95,7 @@ histogram class and functions used in many image processing algorithms.

diff --git a/html/histogram/limitations.html b/html/histogram/limitations.html index d62679578..6950b0484 100644 --- a/html/histogram/limitations.html +++ b/html/histogram/limitations.html @@ -82,7 +82,7 @@ diff --git a/html/histogram/overview.html b/html/histogram/overview.html index f071ecb18..907bddcf8 100644 --- a/html/histogram/overview.html +++ b/html/histogram/overview.html @@ -114,7 +114,7 @@ key are shipped with the class itself.

diff --git a/html/histogram/stl_compatibility.html b/html/histogram/stl_compatibility.html index 06f89c491..0d4a9bd0a 100644 --- a/html/histogram/stl_compatibility.html +++ b/html/histogram/stl_compatibility.html @@ -82,7 +82,7 @@ diff --git a/html/histogram/subhistogram.html b/html/histogram/subhistogram.html index bc29c9925..0308a5ed8 100644 --- a/html/histogram/subhistogram.html +++ b/html/histogram/subhistogram.html @@ -137,7 +137,7 @@ and blue color lie between 2 - 10

diff --git a/html/histogram/utilities.html b/html/histogram/utilities.html index 4671e0076..d68c9628a 100644 --- a/html/histogram/utilities.html +++ b/html/histogram/utilities.html @@ -82,7 +82,7 @@ diff --git a/html/image_processing/affine-region-detectors.html b/html/image_processing/affine-region-detectors.html index 5227010f4..aed1c9f45 100644 --- a/html/image_processing/affine-region-detectors.html +++ b/html/image_processing/affine-region-detectors.html @@ -162,7 +162,7 @@ detector.” In Alvey vision conference, vol. 15, no. 50, pp. 10-5244. diff --git a/html/image_processing/basics.html b/html/image_processing/basics.html index 9d4005c44..6411d8608 100644 --- a/html/image_processing/basics.html +++ b/html/image_processing/basics.html @@ -123,7 +123,7 @@ gets sharper depending on it’s sigma value.

diff --git a/html/image_processing/contrast_enhancement/histogram_equalization.html b/html/image_processing/contrast_enhancement/histogram_equalization.html index 4c1b4e186..4864c6158 100644 --- a/html/image_processing/contrast_enhancement/histogram_equalization.html +++ b/html/image_processing/contrast_enhancement/histogram_equalization.html @@ -145,7 +145,7 @@ before trying the histogram equalization algorithm.

diff --git a/html/image_processing/contrast_enhancement/histogram_matching.html b/html/image_processing/contrast_enhancement/histogram_matching.html index c4756c264..b2447a005 100644 --- a/html/image_processing/contrast_enhancement/histogram_matching.html +++ b/html/image_processing/contrast_enhancement/histogram_matching.html @@ -138,7 +138,7 @@ before trying the histogram matching algorithm.

diff --git a/html/image_processing/contrast_enhancement/index.html b/html/image_processing/contrast_enhancement/index.html index 2d95cad3b..b625ed1fe 100644 --- a/html/image_processing/contrast_enhancement/index.html +++ b/html/image_processing/contrast_enhancement/index.html @@ -89,7 +89,7 @@ processing algorithms used for contrast enhancement.

diff --git a/html/image_processing/contrast_enhancement/overview.html b/html/image_processing/contrast_enhancement/overview.html index e5e5542cc..8d1de2606 100644 --- a/html/image_processing/contrast_enhancement/overview.html +++ b/html/image_processing/contrast_enhancement/overview.html @@ -95,7 +95,7 @@ These include :

diff --git a/html/image_processing/index.html b/html/image_processing/index.html index d315cd1f4..b20404336 100644 --- a/html/image_processing/index.html +++ b/html/image_processing/index.html @@ -103,7 +103,7 @@ features, structures and algorithms, for image processing and analysis.

diff --git a/html/image_processing/overview.html b/html/image_processing/overview.html index a0bff7533..8314cadc3 100644 --- a/html/image_processing/overview.html +++ b/html/image_processing/overview.html @@ -88,7 +88,7 @@ projects run in frame of the Google Summer of Code 2019:

diff --git a/html/index.html b/html/index.html index 225e20803..c3a94eecb 100644 --- a/html/index.html +++ b/html/index.html @@ -64,7 +64,7 @@

Boost Generic Image Library

-

The Generic Image Library (GIL) is a C++11 header-only library that abstracts image +

The Generic Image Library (GIL) is a C++14 header-only library that abstracts image representations from algorithms and allows writing code that can work on a variety of images with performance similar to hand-writing for a specific image type.

@@ -197,7 +197,7 @@ Blurring images (requires the optional Numeric extension)
diff --git a/html/installation.html b/html/installation.html index 611c99401..c2bc91435 100644 --- a/html/installation.html +++ b/html/installation.html @@ -81,12 +81,10 @@ where to find Boost and GIL headers should be sufficient for most projects.

Compiling

The Boost.GIL library source code should successfully compile with any -compiler with complete C++11 support.

+compiler with complete C++14 support.

Note

-

We are planning to drop support for require C++14 support in Boost 1.76 or later, -or selectively drop support for GCC 5 due to its issues with inheriting constructors, -see discussion for PR #526.

+

Boost.GIL requires C++14 compiler since ince Boost 1.80.

For the actual list of currently tested compilers, check results of the library CI builds linked from the README.md @@ -105,7 +103,7 @@ of the library repository.

diff --git a/html/io.html b/html/io.html index 77f3c3dbb..577f4bcab 100644 --- a/html/io.html +++ b/html/io.html @@ -741,7 +741,7 @@ to enable the tests:

diff --git a/html/naming.html b/html/naming.html index 11445494e..d41696efb 100644 --- a/html/naming.html +++ b/html/naming.html @@ -114,7 +114,7 @@ pixel. diff --git a/html/numeric.html b/html/numeric.html index b9c0ce140..5ad19d332 100644 --- a/html/numeric.html +++ b/html/numeric.html @@ -79,7 +79,7 @@ diff --git a/html/reference/adaptive__histogram__equalization_8hpp_source.html b/html/reference/adaptive__histogram__equalization_8hpp_source.html index 77ae1525c..617a4af9c 100644 --- a/html/reference/adaptive__histogram__equalization_8hpp_source.html +++ b/html/reference/adaptive__histogram__equalization_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
19 #include <map>
20 #include <vector>
21 
-
22 namespace boost { namespace gil {
+
22 namespace boost { namespace gil {
23 
36 
37 namespace detail {
@@ -138,181 +138,181 @@ $(function() {
116  }
117 }
118 
-
119 } // namespace detail
+
119 } // namespace detail
120 
-
121 
-
137 template <typename SrcView, typename DstView>
-
138 void non_overlapping_interpolated_clahe(
-
139  SrcView const& src_view,
-
140  DstView const& dst_view,
-
141  std::ptrdiff_t tile_width_x = 20,
-
142  std::ptrdiff_t tile_width_y = 20,
-
143  double clip_limit = 0.03,
-
144  std::size_t bin_width = 1.0,
-
145  bool mask = false,
-
146  std::vector<std::vector<bool>> src_mask = {})
-
147 {
-
148  gil_function_requires<ImageViewConcept<SrcView>>();
-
149  gil_function_requires<MutableImageViewConcept<DstView>>();
-
150 
-
151  static_assert(
-
152  color_spaces_are_compatible<
-
153  typename color_space_type<SrcView>::type,
-
154  typename color_space_type<DstView>::type>::value,
-
155  "Source and destination views must have same color space");
-
156 
-
157  using source_channel_t = typename channel_type<SrcView>::type;
-
158  using dst_channel_t = typename channel_type<DstView>::type;
-
159  using coord_t = typename SrcView::x_coord_t;
-
160 
-
161  std::size_t const channels = num_channels<SrcView>::value;
-
162  coord_t const width = src_view.width();
-
163  coord_t const height = src_view.height();
-
164 
-
165  // Find control points
-
166 
-
167  std::vector<coord_t> sample_x;
-
168  coord_t sample_x1 = tile_width_x / 2;
-
169  coord_t sample_y1 = tile_width_y / 2;
-
170 
-
171  auto extend_left = tile_width_x;
-
172  auto extend_top = tile_width_y;
-
173  auto extend_right = (tile_width_x - width % tile_width_x) % tile_width_x + tile_width_x;
-
174  auto extend_bottom = (tile_width_y - height % tile_width_y) % tile_width_y + tile_width_y;
-
175 
-
176  auto new_width = width + extend_left + extend_right;
-
177  auto new_height = height + extend_top + extend_bottom;
-
178 
-
179  image<typename SrcView::value_type> padded_img(new_width, new_height);
-
180 
-
181  auto top_left_x = tile_width_x;
-
182  auto top_left_y = tile_width_y;
-
183  auto bottom_right_x = tile_width_x + width;
-
184  auto bottom_right_y = tile_width_y + height;
-
185 
-
186  copy_pixels(src_view, subimage_view(view(padded_img), top_left_x, top_left_y, width, height));
-
187 
-
188  for (std::size_t k = 0; k < channels; k++)
-
189  {
-
190  std::vector<histogram<source_channel_t>> prev_row(new_width / tile_width_x),
-
191  next_row((new_width / tile_width_x));
-
192  std::vector<std::map<source_channel_t, source_channel_t>> prev_map(
-
193  new_width / tile_width_x),
-
194  next_map((new_width / tile_width_x));
-
195 
-
196  coord_t prev = 0, next = 1;
-
197  auto channel_view = nth_channel_view(view(padded_img), k);
-
198 
-
199  for (std::ptrdiff_t i = top_left_y; i < bottom_right_y; ++i)
-
200  {
-
201  if ((i - sample_y1) / tile_width_y >= next || i == top_left_y)
-
202  {
-
203  if (i != top_left_y)
-
204  {
-
205  prev = next;
-
206  next++;
-
207  }
-
208  prev_row = next_row;
-
209  prev_map = next_map;
-
210  for (std::ptrdiff_t j = sample_x1; j < new_width; j += tile_width_x)
-
211  {
-
212  auto img_view = subimage_view(
-
213  channel_view, j - sample_x1, next * tile_width_y,
-
214  std::max<int>(
-
215  std::min<int>(tile_width_x + j - sample_x1, bottom_right_x) -
-
216  (j - sample_x1),
-
217  0),
-
218  std::max<int>(
-
219  std::min<int>((next + 1) * tile_width_y, bottom_right_y) -
-
220  next * tile_width_y,
-
221  0));
-
222 
-
223  fill_histogram(
-
224  img_view, next_row[(j - sample_x1) / tile_width_x], bin_width, false,
-
225  false);
-
226 
-
227  detail::clip_and_redistribute(
-
228  next_row[(j - sample_x1) / tile_width_x],
-
229  next_row[(j - sample_x1) / tile_width_x], clip_limit);
-
230 
-
231  next_map[(j - sample_x1) / tile_width_x] =
-
232  histogram_equalization(next_row[(j - sample_x1) / tile_width_x]);
-
233  }
-
234  }
-
235  bool prev_row_mask = 1, next_row_mask = 1;
-
236  if (prev == 0)
-
237  prev_row_mask = false;
-
238  else if (next + 1 == new_height / tile_width_y)
-
239  next_row_mask = false;
-
240  for (std::ptrdiff_t j = top_left_x; j < bottom_right_x; ++j)
-
241  {
-
242  bool prev_col_mask = true, next_col_mask = true;
-
243  if ((j - sample_x1) / tile_width_x == 0)
-
244  prev_col_mask = false;
-
245  else if ((j - sample_x1) / tile_width_x + 1 == new_width / tile_width_x - 1)
-
246  next_col_mask = false;
-
247 
-
248  // Bilinear interpolation
-
249  point_t top_left(
-
250  (j - sample_x1) / tile_width_x * tile_width_x + sample_x1,
-
251  prev * tile_width_y + sample_y1);
-
252  point_t top_right(top_left.x + tile_width_x, top_left.y);
-
253  point_t bottom_left(top_left.x, top_left.y + tile_width_y);
-
254  point_t bottom_right(top_left.x + tile_width_x, top_left.y + tile_width_y);
-
255 
-
256  long double x_diff = top_right.x - top_left.x;
-
257  long double y_diff = bottom_left.y - top_left.y;
-
258 
-
259  long double x1 = (j - top_left.x) / x_diff;
-
260  long double x2 = (top_right.x - j) / x_diff;
-
261  long double y1 = (i - top_left.y) / y_diff;
-
262  long double y2 = (bottom_left.y - i) / y_diff;
-
263 
-
264  if (prev_row_mask == 0)
-
265  y1 = 1;
-
266  else if (next_row_mask == 0)
-
267  y2 = 1;
-
268  if (prev_col_mask == 0)
-
269  x1 = 1;
-
270  else if (next_col_mask == 0)
-
271  x2 = 1;
-
272 
-
273  long double numerator =
-
274  ((prev_row_mask & prev_col_mask) * x2 *
-
275  prev_map[(top_left.x - sample_x1) / tile_width_x][channel_view(j, i)] +
-
276  (prev_row_mask & next_col_mask) * x1 *
-
277  prev_map[(top_right.x - sample_x1) / tile_width_x][channel_view(j, i)]) *
-
278  y2 +
-
279  ((next_row_mask & prev_col_mask) * x2 *
-
280  next_map[(bottom_left.x - sample_x1) / tile_width_x][channel_view(j, i)] +
-
281  (next_row_mask & next_col_mask) * x1 *
-
282  next_map[(bottom_right.x - sample_x1) / tile_width_x][channel_view(j, i)]) *
-
283  y1;
-
284 
-
285  if (mask && !src_mask[i - top_left_y][j - top_left_x])
-
286  {
-
287  dst_view(j - top_left_x, i - top_left_y) =
-
288  channel_convert<dst_channel_t>(
-
289  static_cast<source_channel_t>(channel_view(i, j)));
-
290  }
-
291  else
-
292  {
-
293  dst_view(j - top_left_x, i - top_left_y) =
-
294  channel_convert<dst_channel_t>(static_cast<source_channel_t>(numerator));
-
295  }
-
296  }
-
297  }
-
298  }
-
299 }
-
300 
-
301 }} //namespace boost::gil
-
302 
-
303 #endif
+
136 template <typename SrcView, typename DstView>
+
137 void non_overlapping_interpolated_clahe(
+
138  SrcView const& src_view,
+
139  DstView const& dst_view,
+
140  std::ptrdiff_t tile_width_x = 20,
+
141  std::ptrdiff_t tile_width_y = 20,
+
142  double clip_limit = 0.03,
+
143  std::size_t bin_width = 1.0,
+
144  bool mask = false,
+
145  std::vector<std::vector<bool>> src_mask = {})
+
146 {
+
147  gil_function_requires<ImageViewConcept<SrcView>>();
+
148  gil_function_requires<MutableImageViewConcept<DstView>>();
+
149 
+
150  static_assert(
+
151  color_spaces_are_compatible<
+
152  typename color_space_type<SrcView>::type,
+
153  typename color_space_type<DstView>::type>::value,
+
154  "Source and destination views must have same color space");
+
155 
+
156  using source_channel_t = typename channel_type<SrcView>::type;
+
157  using dst_channel_t = typename channel_type<DstView>::type;
+
158  using coord_t = typename SrcView::x_coord_t;
+
159 
+
160  std::size_t const channels = num_channels<SrcView>::value;
+
161  coord_t const width = src_view.width();
+
162  coord_t const height = src_view.height();
+
163 
+
164  // Find control points
+
165 
+
166  std::vector<coord_t> sample_x;
+
167  coord_t sample_x1 = tile_width_x / 2;
+
168  coord_t sample_y1 = tile_width_y / 2;
+
169 
+
170  auto extend_left = tile_width_x;
+
171  auto extend_top = tile_width_y;
+
172  auto extend_right = (tile_width_x - width % tile_width_x) % tile_width_x + tile_width_x;
+
173  auto extend_bottom = (tile_width_y - height % tile_width_y) % tile_width_y + tile_width_y;
+
174 
+
175  auto new_width = width + extend_left + extend_right;
+
176  auto new_height = height + extend_top + extend_bottom;
+
177 
+
178  image<typename SrcView::value_type> padded_img(new_width, new_height);
+
179 
+
180  auto top_left_x = tile_width_x;
+
181  auto top_left_y = tile_width_y;
+
182  auto bottom_right_x = tile_width_x + width;
+
183  auto bottom_right_y = tile_width_y + height;
+
184 
+
185  copy_pixels(src_view, subimage_view(view(padded_img), top_left_x, top_left_y, width, height));
+
186 
+
187  for (std::size_t k = 0; k < channels; k++)
+
188  {
+
189  std::vector<histogram<source_channel_t>> prev_row(new_width / tile_width_x),
+
190  next_row((new_width / tile_width_x));
+
191  std::vector<std::map<source_channel_t, source_channel_t>> prev_map(
+
192  new_width / tile_width_x),
+
193  next_map((new_width / tile_width_x));
+
194 
+
195  coord_t prev = 0, next = 1;
+
196  auto channel_view = nth_channel_view(view(padded_img), k);
+
197 
+
198  for (std::ptrdiff_t i = top_left_y; i < bottom_right_y; ++i)
+
199  {
+
200  if ((i - sample_y1) / tile_width_y >= next || i == top_left_y)
+
201  {
+
202  if (i != top_left_y)
+
203  {
+
204  prev = next;
+
205  next++;
+
206  }
+
207  prev_row = next_row;
+
208  prev_map = next_map;
+
209  for (std::ptrdiff_t j = sample_x1; j < new_width; j += tile_width_x)
+
210  {
+
211  auto img_view = subimage_view(
+
212  channel_view, j - sample_x1, next * tile_width_y,
+
213  std::max<int>(
+
214  std::min<int>(tile_width_x + j - sample_x1, bottom_right_x) -
+
215  (j - sample_x1),
+
216  0),
+
217  std::max<int>(
+
218  std::min<int>((next + 1) * tile_width_y, bottom_right_y) -
+
219  next * tile_width_y,
+
220  0));
+
221 
+
222  fill_histogram(
+
223  img_view, next_row[(j - sample_x1) / tile_width_x], bin_width, false,
+
224  false);
+
225 
+
226  detail::clip_and_redistribute(
+
227  next_row[(j - sample_x1) / tile_width_x],
+
228  next_row[(j - sample_x1) / tile_width_x], clip_limit);
+
229 
+
230  next_map[(j - sample_x1) / tile_width_x] =
+
231  histogram_equalization(next_row[(j - sample_x1) / tile_width_x]);
+
232  }
+
233  }
+
234  bool prev_row_mask = 1, next_row_mask = 1;
+
235  if (prev == 0)
+
236  prev_row_mask = false;
+
237  else if (next + 1 == new_height / tile_width_y)
+
238  next_row_mask = false;
+
239  for (std::ptrdiff_t j = top_left_x; j < bottom_right_x; ++j)
+
240  {
+
241  bool prev_col_mask = true, next_col_mask = true;
+
242  if ((j - sample_x1) / tile_width_x == 0)
+
243  prev_col_mask = false;
+
244  else if ((j - sample_x1) / tile_width_x + 1 == new_width / tile_width_x - 1)
+
245  next_col_mask = false;
+
246 
+
247  // Bilinear interpolation
+
248  point_t top_left(
+
249  (j - sample_x1) / tile_width_x * tile_width_x + sample_x1,
+
250  prev * tile_width_y + sample_y1);
+
251  point_t top_right(top_left.x + tile_width_x, top_left.y);
+
252  point_t bottom_left(top_left.x, top_left.y + tile_width_y);
+
253  point_t bottom_right(top_left.x + tile_width_x, top_left.y + tile_width_y);
+
254 
+
255  long double x_diff = top_right.x - top_left.x;
+
256  long double y_diff = bottom_left.y - top_left.y;
+
257 
+
258  long double x1 = (j - top_left.x) / x_diff;
+
259  long double x2 = (top_right.x - j) / x_diff;
+
260  long double y1 = (i - top_left.y) / y_diff;
+
261  long double y2 = (bottom_left.y - i) / y_diff;
+
262 
+
263  if (prev_row_mask == 0)
+
264  y1 = 1;
+
265  else if (next_row_mask == 0)
+
266  y2 = 1;
+
267  if (prev_col_mask == 0)
+
268  x1 = 1;
+
269  else if (next_col_mask == 0)
+
270  x2 = 1;
+
271 
+
272  long double numerator =
+
273  ((prev_row_mask & prev_col_mask) * x2 *
+
274  prev_map[(top_left.x - sample_x1) / tile_width_x][channel_view(j, i)] +
+
275  (prev_row_mask & next_col_mask) * x1 *
+
276  prev_map[(top_right.x - sample_x1) / tile_width_x][channel_view(j, i)]) *
+
277  y2 +
+
278  ((next_row_mask & prev_col_mask) * x2 *
+
279  next_map[(bottom_left.x - sample_x1) / tile_width_x][channel_view(j, i)] +
+
280  (next_row_mask & next_col_mask) * x1 *
+
281  next_map[(bottom_right.x - sample_x1) / tile_width_x][channel_view(j, i)]) *
+
282  y1;
+
283 
+
284  if (mask && !src_mask[i - top_left_y][j - top_left_x])
+
285  {
+
286  dst_view(j - top_left_x, i - top_left_y) =
+
287  channel_convert<dst_channel_t>(
+
288  static_cast<source_channel_t>(channel_view(i, j)));
+
289  }
+
290  else
+
291  {
+
292  dst_view(j - top_left_x, i - top_left_y) =
+
293  channel_convert<dst_channel_t>(static_cast<source_channel_t>(numerator));
+
294  }
+
295  }
+
296  }
+
297  }
+
298 }
+
299 
+
300 }} //namespace boost::gil
+
301 
+
302 #endif
-
nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
Definition: image_view_factory.hpp:418
-
BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
std::copy for image views
Definition: algorithm.hpp:288
-
const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
Returns the non-constant-pixel view of an image.
Definition: image.hpp:549
-
View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
Definition: image_view_factory.hpp:254
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
+
nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
Definition: image_view_factory.hpp:448
+
BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
std::copy for image views
Definition: algorithm.hpp:292
+
auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
Returns the non-constant-pixel view of an image.
Definition: image.hpp:565
+
View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
Definition: image_view_factory.hpp:283
diff --git a/html/reference/algorithm_8hpp_source.html b/html/reference/algorithm_8hpp_source.html index b1ebbae18..3e9c18c55 100644 --- a/html/reference/algorithm_8hpp_source.html +++ b/html/reference/algorithm_8hpp_source.html @@ -82,7 +82,7 @@ $(function() {
33 #include <typeinfo>
34 #include <numeric>
35 
-
36 namespace boost { namespace gil {
+
36 namespace boost { namespace gil {
37 
38 //forward declarations
39 template <typename ChannelPtr, typename ColorSpace>
@@ -103,39 +103,39 @@ $(function() {
89  using result_type = Result;
90 
91  template <typename V1, typename V2> BOOST_FORCEINLINE
-
92  result_type operator()(const std::pair<const V1*,const V2*>& p) const {
+
92  auto operator()(const std::pair<const V1*,const V2*>& p) const -> result_type {
93  return apply(*p.first, *p.second, typename views_are_compatible<V1,V2>::type());
94  }
95 
96  template <typename V1, typename V2> BOOST_FORCEINLINE
-
97  result_type operator()(const V1& v1, const V2& v2) const {
+
97  auto operator()(const V1& v1, const V2& v2) const -> result_type {
98  return apply(v1, v2, typename views_are_compatible<V1,V2>::type());
99  }
100 
-
101  result_type operator()(const error_t&) const { throw std::bad_cast(); }
+
101  auto operator()(const error_t&) const -> result_type { throw std::bad_cast(); }
102 private:
103 
104  // dispatch from apply overload to a function with distinct name
105  template <typename V1, typename V2>
106  BOOST_FORCEINLINE
-
107  result_type apply(V1 const& v1, V2 const& v2, std::false_type) const
-
108  {
+
107  auto apply(V1 const& v1, V2 const& v2, std::false_type) const -> result_type
+
108  {
109  return ((const Derived*)this)->apply_incompatible(v1, v2);
110  }
111 
112  // dispatch from apply overload to a function with distinct name
113  template <typename V1, typename V2>
114  BOOST_FORCEINLINE
-
115  result_type apply(V1 const& v1, V2 const& v2, std::true_type) const
-
116  {
+
115  auto apply(V1 const& v1, V2 const& v2, std::true_type) const -> result_type
+
116  {
117  return ((const Derived*)this)->apply_compatible(v1, v2);
118  }
119 
120  // function with distinct name - it can be overloaded by subclasses
121  template <typename V1, typename V2>
122  BOOST_FORCEINLINE
-
123  result_type apply_incompatible(V1 const& /*v1*/, V2 const& /*v2*/) const
-
124  {
+
123  auto apply_incompatible(V1 const& /*v1*/, V2 const& /*v2*/) const -> result_type
+
124  {
125  throw std::bad_cast();
126  }
127 };
@@ -149,1308 +149,1313 @@ $(function() {
140 
143 template<typename T, typename CS>
144 BOOST_FORCEINLINE
-
145 auto copy(
+
145 auto copy(
150 {
-
151  auto p = std::copy((unsigned char*)first, (unsigned char*)last, (unsigned char*)dst);
+
151  auto p = std::copy((unsigned char*)first, (unsigned char*)last, (unsigned char*)dst);
152  return reinterpret_cast<boost::gil::pixel<T, CS>*>(p);
153 }
154 
157 template<typename T, typename CS>
-
158 BOOST_FORCEINLINE boost::gil::pixel<T,CS>*
- - -
161  return (boost::gil::pixel<T,CS>*)std::copy((unsigned char*)first,(unsigned char*)last, (unsigned char*)dst);
-
162 }
-
163 } // namespace std
-
164 
-
165 namespace boost { namespace gil {
-
166 namespace detail {
-
167 template <typename I, typename O> struct copy_fn {
-
168  BOOST_FORCEINLINE I operator()(I first, I last, O dst) const { return std::copy(first,last,dst); }
-
169 };
-
170 } // namespace detail
-
171 } } // namespace boost::gil
-
172 
-
173 namespace std {
-
176 template<typename CS, typename IC1, typename IC2> BOOST_FORCEINLINE
- -
178  boost::gil::gil_function_requires<boost::gil::ChannelsCompatibleConcept<typename std::iterator_traits<IC1>::value_type,typename std::iterator_traits<IC2>::value_type>>();
-
179  static_for_each(first,last,dst,boost::gil::detail::copy_fn<IC1,IC2>());
-
180  return dst+(last-first);
-
181 }
-
182 } // namespace std
-
183 
-
184 namespace boost { namespace gil {
-
185 namespace detail {
-
188 template <typename I, typename O>
-
189 struct copier_n {
-
190  BOOST_FORCEINLINE void operator()(I src, typename std::iterator_traits<I>::difference_type n, O dst) const { std::copy(src,src+n, dst); }
-
191 };
-
192 
-
194 template <typename IL, typename O> // IL Models ConstPixelLocatorConcept, O Models PixelIteratorConcept
-
195 struct copier_n<iterator_from_2d<IL>,O> {
-
196  using diff_t = typename std::iterator_traits<iterator_from_2d<IL>>::difference_type;
-
197  BOOST_FORCEINLINE void operator()(iterator_from_2d<IL> src, diff_t n, O dst) const {
-
198  gil_function_requires<PixelLocatorConcept<IL>>();
-
199  gil_function_requires<MutablePixelIteratorConcept<O>>();
-
200  while (n>0) {
-
201  diff_t l=src.width()-src.x_pos();
-
202  diff_t numToCopy=(n<l ? n:l);
-
203  detail::copy_n(src.x(), numToCopy, dst);
-
204  dst+=numToCopy;
-
205  src+=numToCopy;
-
206  n-=numToCopy;
-
207  }
-
208  }
-
209 };
-
210 
-
212 template <typename I, typename OL> // I Models ConstPixelIteratorConcept, OL Models PixelLocatorConcept
-
213 struct copier_n<I,iterator_from_2d<OL>> {
-
214  using diff_t = typename std::iterator_traits<I>::difference_type;
-
215  BOOST_FORCEINLINE void operator()(I src, diff_t n, iterator_from_2d<OL> dst) const {
-
216  gil_function_requires<PixelIteratorConcept<I>>();
-
217  gil_function_requires<MutablePixelLocatorConcept<OL>>();
-
218  while (n>0) {
-
219  diff_t l=dst.width()-dst.x_pos();
-
220  diff_t numToCopy=(n<l ? n:l);
-
221  detail::copy_n(src, numToCopy, dst.x());
-
222  dst+=numToCopy;
-
223  src+=numToCopy;
-
224  n-=numToCopy;
-
225  }
-
226  }
-
227 };
-
228 
-
230 template <typename IL, typename OL>
- -
232  using diff_t = typename iterator_from_2d<IL>::difference_type;
-
233  BOOST_FORCEINLINE void operator()(iterator_from_2d<IL> src, diff_t n, iterator_from_2d<OL> dst) const {
-
234  gil_function_requires<PixelLocatorConcept<IL>>();
-
235  gil_function_requires<MutablePixelLocatorConcept<OL>>();
-
236  if (src.x_pos()!=dst.x_pos() || src.width()!=dst.width()) {
-
237  while(n-->0) {
-
238  *dst++=*src++;
-
239  }
-
240  }
-
241  while (n>0) {
-
242  diff_t l=dst.width()-dst.x_pos();
-
243  diff_t numToCopy=(n<l ? n : l);
-
244  detail::copy_n(src.x(), numToCopy, dst.x());
-
245  dst+=numToCopy;
-
246  src+=numToCopy;
-
247  n-=numToCopy;
-
248  }
-
249  }
-
250 };
-
251 
-
252 template <typename SrcIterator, typename DstIterator>
-
253 BOOST_FORCEINLINE DstIterator copy_with_2d_iterators(SrcIterator first, SrcIterator last, DstIterator dst) {
-
254  using src_x_iterator = typename SrcIterator::x_iterator;
-
255  using dst_x_iterator = typename DstIterator::x_iterator;
-
256 
-
257  typename SrcIterator::difference_type n = last - first;
+
158 BOOST_FORCEINLINE
+
159 auto copy(const boost::gil::pixel<T,CS>* first, const boost::gil::pixel<T,CS>* last,
+ +
161 {
+
162  return (boost::gil::pixel<T,CS>*)std::copy((unsigned char*)first,(unsigned char*)last, (unsigned char*)dst);
+
163 }
+
164 } // namespace std
+
165 
+
166 namespace boost { namespace gil {
+
167 namespace detail {
+
168 template <typename I, typename O> struct copy_fn {
+
169  BOOST_FORCEINLINE I operator()(I first, I last, O dst) const { return std::copy(first,last,dst); }
+
170 };
+
171 } // namespace detail
+
172 } } // namespace boost::gil
+
173 
+
174 namespace std {
+
177 template<typename CS, typename IC1, typename IC2> BOOST_FORCEINLINE
+ +
179 {
+
180  boost::gil::gil_function_requires<boost::gil::ChannelsCompatibleConcept<typename std::iterator_traits<IC1>::value_type,typename std::iterator_traits<IC2>::value_type>>();
+
181  static_for_each(first,last,dst,boost::gil::detail::copy_fn<IC1,IC2>());
+
182  return dst+(last-first);
+
183 }
+
184 } // namespace std
+
185 
+
186 namespace boost { namespace gil {
+
187 namespace detail {
+
190 template <typename I, typename O>
+
191 struct copier_n {
+
192  BOOST_FORCEINLINE void operator()(I src, typename std::iterator_traits<I>::difference_type n, O dst) const { std::copy(src,src+n, dst); }
+
193 };
+
194 
+
196 template <typename IL, typename O> // IL Models ConstPixelLocatorConcept, O Models PixelIteratorConcept
+
197 struct copier_n<iterator_from_2d<IL>,O> {
+
198  using diff_t = typename std::iterator_traits<iterator_from_2d<IL>>::difference_type;
+
199  BOOST_FORCEINLINE void operator()(iterator_from_2d<IL> src, diff_t n, O dst) const {
+
200  gil_function_requires<PixelLocatorConcept<IL>>();
+
201  gil_function_requires<MutablePixelIteratorConcept<O>>();
+
202  while (n>0) {
+
203  diff_t l=src.width()-src.x_pos();
+
204  diff_t numToCopy=(n<l ? n:l);
+
205  detail::copy_n(src.x(), numToCopy, dst);
+
206  dst+=numToCopy;
+
207  src+=numToCopy;
+
208  n-=numToCopy;
+
209  }
+
210  }
+
211 };
+
212 
+
214 template <typename I, typename OL> // I Models ConstPixelIteratorConcept, OL Models PixelLocatorConcept
+
215 struct copier_n<I,iterator_from_2d<OL>> {
+
216  using diff_t = typename std::iterator_traits<I>::difference_type;
+
217  BOOST_FORCEINLINE void operator()(I src, diff_t n, iterator_from_2d<OL> dst) const {
+
218  gil_function_requires<PixelIteratorConcept<I>>();
+
219  gil_function_requires<MutablePixelLocatorConcept<OL>>();
+
220  while (n>0) {
+
221  diff_t l=dst.width()-dst.x_pos();
+
222  diff_t numToCopy=(n<l ? n:l);
+
223  detail::copy_n(src, numToCopy, dst.x());
+
224  dst+=numToCopy;
+
225  src+=numToCopy;
+
226  n-=numToCopy;
+
227  }
+
228  }
+
229 };
+
230 
+
232 template <typename IL, typename OL>
+ +
234  using diff_t = typename iterator_from_2d<IL>::difference_type;
+
235  BOOST_FORCEINLINE void operator()(iterator_from_2d<IL> src, diff_t n, iterator_from_2d<OL> dst) const {
+
236  gil_function_requires<PixelLocatorConcept<IL>>();
+
237  gil_function_requires<MutablePixelLocatorConcept<OL>>();
+
238  if (src.x_pos()!=dst.x_pos() || src.width()!=dst.width()) {
+
239  while(n-->0) {
+
240  *dst++=*src++;
+
241  }
+
242  }
+
243  while (n>0) {
+
244  diff_t l=dst.width()-dst.x_pos();
+
245  diff_t numToCopy=(n<l ? n : l);
+
246  detail::copy_n(src.x(), numToCopy, dst.x());
+
247  dst+=numToCopy;
+
248  src+=numToCopy;
+
249  n-=numToCopy;
+
250  }
+
251  }
+
252 };
+
253 
+
254 template <typename SrcIterator, typename DstIterator>
+
255 BOOST_FORCEINLINE auto copy_with_2d_iterators(SrcIterator first, SrcIterator last, DstIterator dst) -> DstIterator {
+
256  using src_x_iterator = typename SrcIterator::x_iterator;
+
257  using dst_x_iterator = typename DstIterator::x_iterator;
258 
-
259  if (first.is_1d_traversable()) {
-
260  if (dst.is_1d_traversable())
-
261  copier_n<src_x_iterator,dst_x_iterator>()(first.x(),n, dst.x());
-
262  else
-
263  copier_n<src_x_iterator,DstIterator >()(first.x(),n, dst);
-
264  } else {
-
265  if (dst.is_1d_traversable())
-
266  copier_n<SrcIterator,dst_x_iterator>()(first,n, dst.x());
-
267  else
-
268  copier_n<SrcIterator,DstIterator>()(first,n,dst);
-
269  }
-
270  return dst+n;
-
271 }
-
272 } // namespace detail
-
273 } } // namespace boost::gil
-
274 
-
275 namespace std {
-
278 template <typename IL, typename OL>
- -
280  return boost::gil::detail::copy_with_2d_iterators(first,last,dst);
-
281 }
-
282 } // namespace std
-
283 
-
284 namespace boost { namespace gil {
-
287 template <typename View1, typename View2> BOOST_FORCEINLINE
-
288 void copy_pixels(const View1& src, const View2& dst)
-
289 {
-
290  BOOST_ASSERT(src.dimensions() == dst.dimensions());
-
291  detail::copy_with_2d_iterators(src.begin(),src.end(),dst.begin());
-
292 }
-
293 
-
295 // copy_and_convert_pixels
-
297 
-
303 
-
304 namespace detail {
-
305 template <typename CC>
-
306 class copy_and_convert_pixels_fn : public binary_operation_obj<copy_and_convert_pixels_fn<CC>>
-
307 {
-
308 private:
-
309  CC _cc;
-
310 public:
-
311  using result_type = typename binary_operation_obj<copy_and_convert_pixels_fn<default_color_converter>>::result_type;
-
312  copy_and_convert_pixels_fn() {}
-
313  copy_and_convert_pixels_fn(CC cc_in) : _cc(cc_in) {}
-
314  // when the two color spaces are incompatible, a color conversion is performed
-
315  template <typename V1, typename V2> BOOST_FORCEINLINE
-
316  result_type apply_incompatible(const V1& src, const V2& dst) const {
-
317  copy_pixels(color_converted_view<typename V2::value_type>(src,_cc),dst);
-
318  }
-
319 
-
320  // If the two color spaces are compatible, copy_and_convert is just copy
-
321  template <typename V1, typename V2> BOOST_FORCEINLINE
-
322  result_type apply_compatible(const V1& src, const V2& dst) const {
-
323  copy_pixels(src,dst);
-
324  }
-
325 };
-
326 } // namespace detail
-
327 
-
329 template <typename V1, typename V2,typename CC>
-
330 BOOST_FORCEINLINE
-
331 void copy_and_convert_pixels(const V1& src, const V2& dst,CC cc) {
-
332  detail::copy_and_convert_pixels_fn<CC> ccp(cc);
-
333  ccp(src,dst);
-
334 }
-
335 
-
336 struct default_color_converter;
-
337 
-
339 template <typename View1, typename View2>
-
340 BOOST_FORCEINLINE
-
341 void copy_and_convert_pixels(const View1& src, const View2& dst) {
-
342  detail::copy_and_convert_pixels_fn<default_color_converter> ccp;
-
343  ccp(src,dst);
-
344 }
-
345 } } // namespace boost::gil
-
346 
-
348 // std::fill and gil::fill_pixels
-
350 
-
354 
-
355 namespace std {
-
364 template <typename IL, typename V>
- -
366  boost::gil::gil_function_requires<boost::gil::MutablePixelLocatorConcept<IL>>();
-
367  if (first.is_1d_traversable()) {
-
368  std::fill(first.x(), last.x(), val);
-
369  } else {
-
370  // fill row by row
-
371  std::ptrdiff_t n=last-first;
-
372  while (n>0) {
-
373  std::ptrdiff_t numToDo=std::min<const std::ptrdiff_t>(n,(std::ptrdiff_t)(first.width()-first.x_pos()));
-
374  std::fill_n(first.x(), numToDo, val);
-
375  first+=numToDo;
-
376  n-=numToDo;
-
377  }
-
378  }
-
379 }
-
380 } // namespace std
-
381 
-
382 namespace boost { namespace gil {
-
383 
-
384 namespace detail {
+
259  typename SrcIterator::difference_type n = last - first;
+
260 
+
261  if (first.is_1d_traversable()) {
+
262  if (dst.is_1d_traversable())
+
263  copier_n<src_x_iterator,dst_x_iterator>()(first.x(),n, dst.x());
+
264  else
+
265  copier_n<src_x_iterator,DstIterator >()(first.x(),n, dst);
+
266  } else {
+
267  if (dst.is_1d_traversable())
+
268  copier_n<SrcIterator,dst_x_iterator>()(first,n, dst.x());
+
269  else
+
270  copier_n<SrcIterator,DstIterator>()(first,n,dst);
+
271  }
+
272  return dst+n;
+
273 }
+
274 } // namespace detail
+
275 } } // namespace boost::gil
+
276 
+
277 namespace std {
+
280 template <typename IL, typename OL>
+ +
282 {
+
283  return boost::gil::detail::copy_with_2d_iterators(first,last,dst);
+
284 }
+
285 
+
286 } // namespace std
+
287 
+
288 namespace boost { namespace gil {
+
291 template <typename View1, typename View2> BOOST_FORCEINLINE
+
292 void copy_pixels(const View1& src, const View2& dst)
+
293 {
+
294  BOOST_ASSERT(src.dimensions() == dst.dimensions());
+
295  detail::copy_with_2d_iterators(src.begin(),src.end(),dst.begin());
+
296 }
+
297 
+
299 // copy_and_convert_pixels
+
301 
+
307 
+
308 namespace detail {
+
309 template <typename CC>
+
310 class copy_and_convert_pixels_fn : public binary_operation_obj<copy_and_convert_pixels_fn<CC>>
+
311 {
+
312 private:
+
313  CC _cc;
+
314 public:
+
315  using result_type = typename binary_operation_obj<copy_and_convert_pixels_fn<default_color_converter>>::result_type;
+
316  copy_and_convert_pixels_fn() {}
+
317  copy_and_convert_pixels_fn(CC cc_in) : _cc(cc_in) {}
+
318  // when the two color spaces are incompatible, a color conversion is performed
+
319  template <typename V1, typename V2> BOOST_FORCEINLINE
+
320  auto apply_incompatible(const V1& src, const V2& dst) const -> result_type {
+
321  copy_pixels(color_converted_view<typename V2::value_type>(src,_cc),dst);
+
322  }
+
323 
+
324  // If the two color spaces are compatible, copy_and_convert is just copy
+
325  template <typename V1, typename V2> BOOST_FORCEINLINE
+
326  auto apply_compatible(const V1& src, const V2& dst) const -> result_type {
+
327  copy_pixels(src,dst);
+
328  }
+
329 };
+
330 } // namespace detail
+
331 
+
333 template <typename V1, typename V2,typename CC>
+
334 BOOST_FORCEINLINE
+
335 void copy_and_convert_pixels(const V1& src, const V2& dst,CC cc) {
+
336  detail::copy_and_convert_pixels_fn<CC> ccp(cc);
+
337  ccp(src,dst);
+
338 }
+
339 
+
340 struct default_color_converter;
+
341 
+
343 template <typename View1, typename View2>
+
344 BOOST_FORCEINLINE
+
345 void copy_and_convert_pixels(const View1& src, const View2& dst) {
+
346  detail::copy_and_convert_pixels_fn<default_color_converter> ccp;
+
347  ccp(src,dst);
+
348 }
+
349 } } // namespace boost::gil
+
350 
+
352 // std::fill and gil::fill_pixels
+
354 
+
358 
+
359 namespace std {
+
368 template <typename IL, typename V>
+ +
370  boost::gil::gil_function_requires<boost::gil::MutablePixelLocatorConcept<IL>>();
+
371  if (first.is_1d_traversable()) {
+
372  std::fill(first.x(), last.x(), val);
+
373  } else {
+
374  // fill row by row
+
375  std::ptrdiff_t n=last-first;
+
376  while (n>0) {
+
377  std::ptrdiff_t numToDo=std::min<const std::ptrdiff_t>(n,(std::ptrdiff_t)(first.width()-first.x_pos()));
+
378  std::fill_n(first.x(), numToDo, val);
+
379  first+=numToDo;
+
380  n-=numToDo;
+
381  }
+
382  }
+
383 }
+
384 } // namespace std
385 
-
387 struct std_fill_t {
-
388  template <typename It, typename P>
-
389  void operator()(It first, It last, const P& p_in) {
-
390  std::fill(first,last,p_in);
-
391  }
-
392 };
-
393 
-
395 template <typename It, typename P>
-
396 BOOST_FORCEINLINE
-
397 void fill_aux(It first, It last, P const& p, std::true_type)
-
398 {
-
399  static_for_each(first, last, p, std_fill_t());
-
400 }
-
401 
-
403 template <typename It, typename P>
-
404 BOOST_FORCEINLINE
-
405 void fill_aux(It first, It last, P const& p, std::false_type)
-
406 {
-
407  std::fill(first, last, p);
-
408 }
-
409 
-
410 } // namespace detail
-
411 
-
414 template <typename View, typename Value>
-
415 BOOST_FORCEINLINE
-
416 void fill_pixels(View const& view, Value const& value)
-
417 {
-
418  if (view.is_1d_traversable())
-
419  {
-
420  detail::fill_aux(
-
421  view.begin().x(), view.end().x(), value, is_planar<View>());
-
422  }
-
423  else
-
424  {
-
425  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
-
426  detail::fill_aux(
-
427  view.row_begin(y), view.row_end(y), value, is_planar<View>());
-
428  }
-
429 }
-
430 
-
432 // destruct_pixels
-
434 
-
438 
-
439 namespace detail {
-
440 template <typename Iterator>
-
441 BOOST_FORCEINLINE
-
442 void destruct_range_impl(Iterator first, Iterator last,
-
443  typename std::enable_if
-
444  <
-
445  mp11::mp_and
-
446  <
-
447  std::is_pointer<Iterator>,
-
448  mp11::mp_not
-
449  <
-
450  detail::is_trivially_destructible<typename std::iterator_traits<Iterator>::value_type>
-
451  >
-
452  >::value
-
453  >::type* /*ptr*/ = 0)
-
454 {
-
455  while (first != last)
-
456  {
-
457  first->~value_t();
-
458  ++first;
-
459  }
-
460 }
-
461 
-
462 template <typename Iterator>
-
463 BOOST_FORCEINLINE
-
464 void destruct_range_impl(Iterator /*first*/, Iterator /*last*/,
-
465  typename std::enable_if
-
466  <
-
467  mp11::mp_or
-
468  <
-
469  mp11::mp_not<std::is_pointer<Iterator>>,
-
470  detail::is_trivially_destructible<typename std::iterator_traits<Iterator>::value_type>
-
471  >::value
-
472  >::type* /* ptr */ = nullptr)
-
473 {
-
474 }
-
475 
-
476 template <typename Iterator>
-
477 BOOST_FORCEINLINE
-
478 void destruct_range(Iterator first, Iterator last)
-
479 {
-
480  destruct_range_impl(first, last);
-
481 }
-
482 
-
483 struct std_destruct_t
-
484 {
-
485  template <typename Iterator>
-
486  void operator()(Iterator first, Iterator last) const
-
487  {
-
488  destruct_range(first,last);
-
489  }
-
490 };
-
491 
-
493 template <typename It>
-
494 BOOST_FORCEINLINE
-
495 void destruct_aux(It first, It last, std::true_type)
-
496 {
-
497  static_for_each(first,last,std_destruct_t());
-
498 }
-
499 
-
501 template <typename It>
-
502 BOOST_FORCEINLINE
-
503 void destruct_aux(It first, It last, std::false_type)
-
504 {
-
505  destruct_range(first,last);
-
506 }
-
507 
-
508 } // namespace detail
-
509 
-
512 template <typename View>
-
513 BOOST_FORCEINLINE
-
514 void destruct_pixels(View const& view)
-
515 {
-
516  if (view.is_1d_traversable())
-
517  {
-
518  detail::destruct_aux(
-
519  view.begin().x(), view.end().x(), is_planar<View>());
-
520  }
-
521  else
-
522  {
-
523  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
-
524  detail::destruct_aux(
-
525  view.row_begin(y), view.row_end(y), is_planar<View>());
-
526  }
-
527 }
-
528 
-
530 // uninitialized_fill_pixels
-
532 
-
536 
-
537 namespace detail {
-
538 
-
541 template <typename It, typename P>
-
542 BOOST_FORCEINLINE
-
543 void uninitialized_fill_aux(It first, It last, P const& p, std::true_type)
-
544 {
-
545  std::size_t channel = 0;
-
546  try
-
547  {
-
548  using pixel_t = typename std::iterator_traits<It>::value_type;
-
549  while (channel < num_channels<pixel_t>::value)
-
550  {
-
551  std::uninitialized_fill(
-
552  dynamic_at_c(first,channel),
-
553  dynamic_at_c(last,channel),
-
554  dynamic_at_c(p,channel));
-
555 
-
556  ++channel;
-
557  }
-
558  }
-
559  catch (...)
-
560  {
-
561  for (std::size_t c = 0; c < channel; ++c)
-
562  destruct_range(dynamic_at_c(first, c), dynamic_at_c(last, c));
-
563  throw;
-
564  }
-
565 }
-
566 
-
569 template <typename It, typename P>
-
570 BOOST_FORCEINLINE
-
571 void uninitialized_fill_aux(It first, It last, P const& p, std::false_type)
-
572 {
-
573  std::uninitialized_fill(first,last,p);
-
574 }
-
575 
-
576 } // namespace detail
-
577 
-
582 template <typename View, typename Value>
-
583 void uninitialized_fill_pixels(const View& view, const Value& val) {
-
584  if (view.is_1d_traversable())
-
585  detail::uninitialized_fill_aux(view.begin().x(), view.end().x(),
-
586  val,is_planar<View>());
-
587  else {
-
588  typename View::y_coord_t y = 0;
-
589  try {
-
590  for (y=0; y<view.height(); ++y)
-
591  detail::uninitialized_fill_aux(view.row_begin(y),view.row_end(y),
-
592  val,is_planar<View>());
-
593  } catch(...) {
-
594  for (typename View::y_coord_t y0=0; y0<y; ++y0)
-
595  detail::destruct_aux(view.row_begin(y0),view.row_end(y0), is_planar<View>());
-
596  throw;
-
597  }
-
598  }
-
599 }
-
600 
-
602 // default_construct_pixels
-
604 
-
608 
-
609 namespace detail {
-
610 template <typename It> BOOST_FORCEINLINE
-
611 void default_construct_range_impl(It first, It last, std::true_type)
-
612 {
-
613  It first1 = first;
-
614  try
-
615  {
-
616  using value_t = typename std::iterator_traits<It>::value_type;
-
617  while (first != last)
-
618  {
-
619  new (first) value_t();
-
620  ++first;
-
621  }
-
622  }
-
623  catch (...)
-
624  {
-
625  destruct_range(first1, first);
-
626  throw;
-
627  }
-
628 }
-
629 
-
630 template <typename It>
-
631 BOOST_FORCEINLINE
-
632 void default_construct_range_impl(It, It, std::false_type) {}
+
386 namespace boost { namespace gil {
+
387 
+
388 namespace detail {
+
389 
+
391 struct std_fill_t {
+
392  template <typename It, typename P>
+
393  void operator()(It first, It last, const P& p_in) {
+
394  std::fill(first,last,p_in);
+
395  }
+
396 };
+
397 
+
399 template <typename It, typename P>
+
400 BOOST_FORCEINLINE
+
401 void fill_aux(It first, It last, P const& p, std::true_type)
+
402 {
+
403  static_for_each(first, last, p, std_fill_t());
+
404 }
+
405 
+
407 template <typename It, typename P>
+
408 BOOST_FORCEINLINE
+
409 void fill_aux(It first, It last, P const& p, std::false_type)
+
410 {
+
411  std::fill(first, last, p);
+
412 }
+
413 
+
414 } // namespace detail
+
415 
+
418 template <typename View, typename Value>
+
419 BOOST_FORCEINLINE
+
420 void fill_pixels(View const& view, Value const& value)
+
421 {
+
422  if (view.is_1d_traversable())
+
423  {
+
424  detail::fill_aux(
+
425  view.begin().x(), view.end().x(), value, is_planar<View>());
+
426  }
+
427  else
+
428  {
+
429  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
+
430  detail::fill_aux(
+
431  view.row_begin(y), view.row_end(y), value, is_planar<View>());
+
432  }
+
433 }
+
434 
+
436 // destruct_pixels
+
438 
+
442 
+
443 namespace detail {
+
444 template <typename Iterator>
+
445 BOOST_FORCEINLINE
+
446 void destruct_range_impl(Iterator first, Iterator last,
+
447  typename std::enable_if
+
448  <
+
449  mp11::mp_and
+
450  <
+
451  std::is_pointer<Iterator>,
+
452  mp11::mp_not
+
453  <
+
454  detail::is_trivially_destructible<typename std::iterator_traits<Iterator>::value_type>
+
455  >
+
456  >::value
+
457  >::type* /*ptr*/ = 0)
+
458 {
+
459  while (first != last)
+
460  {
+
461  first->~value_t();
+
462  ++first;
+
463  }
+
464 }
+
465 
+
466 template <typename Iterator>
+
467 BOOST_FORCEINLINE
+
468 void destruct_range_impl(Iterator /*first*/, Iterator /*last*/,
+
469  typename std::enable_if
+
470  <
+
471  mp11::mp_or
+
472  <
+
473  mp11::mp_not<std::is_pointer<Iterator>>,
+
474  detail::is_trivially_destructible<typename std::iterator_traits<Iterator>::value_type>
+
475  >::value
+
476  >::type* /* ptr */ = nullptr)
+
477 {
+
478 }
+
479 
+
480 template <typename Iterator>
+
481 BOOST_FORCEINLINE
+
482 void destruct_range(Iterator first, Iterator last)
+
483 {
+
484  destruct_range_impl(first, last);
+
485 }
+
486 
+
487 struct std_destruct_t
+
488 {
+
489  template <typename Iterator>
+
490  void operator()(Iterator first, Iterator last) const
+
491  {
+
492  destruct_range(first,last);
+
493  }
+
494 };
+
495 
+
497 template <typename It>
+
498 BOOST_FORCEINLINE
+
499 void destruct_aux(It first, It last, std::true_type)
+
500 {
+
501  static_for_each(first,last,std_destruct_t());
+
502 }
+
503 
+
505 template <typename It>
+
506 BOOST_FORCEINLINE
+
507 void destruct_aux(It first, It last, std::false_type)
+
508 {
+
509  destruct_range(first,last);
+
510 }
+
511 
+
512 } // namespace detail
+
513 
+
516 template <typename View>
+
517 BOOST_FORCEINLINE
+
518 void destruct_pixels(View const& view)
+
519 {
+
520  if (view.is_1d_traversable())
+
521  {
+
522  detail::destruct_aux(
+
523  view.begin().x(), view.end().x(), is_planar<View>());
+
524  }
+
525  else
+
526  {
+
527  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
+
528  detail::destruct_aux(
+
529  view.row_begin(y), view.row_end(y), is_planar<View>());
+
530  }
+
531 }
+
532 
+
534 // uninitialized_fill_pixels
+
536 
+
540 
+
541 namespace detail {
+
542 
+
545 template <typename It, typename P>
+
546 BOOST_FORCEINLINE
+
547 void uninitialized_fill_aux(It first, It last, P const& p, std::true_type)
+
548 {
+
549  std::size_t channel = 0;
+
550  try
+
551  {
+
552  using pixel_t = typename std::iterator_traits<It>::value_type;
+
553  while (channel < num_channels<pixel_t>::value)
+
554  {
+
555  std::uninitialized_fill(
+
556  dynamic_at_c(first,channel),
+
557  dynamic_at_c(last,channel),
+
558  dynamic_at_c(p,channel));
+
559 
+
560  ++channel;
+
561  }
+
562  }
+
563  catch (...)
+
564  {
+
565  for (std::size_t c = 0; c < channel; ++c)
+
566  destruct_range(dynamic_at_c(first, c), dynamic_at_c(last, c));
+
567  throw;
+
568  }
+
569 }
+
570 
+
573 template <typename It, typename P>
+
574 BOOST_FORCEINLINE
+
575 void uninitialized_fill_aux(It first, It last, P const& p, std::false_type)
+
576 {
+
577  std::uninitialized_fill(first,last,p);
+
578 }
+
579 
+
580 } // namespace detail
+
581 
+
586 template <typename View, typename Value>
+
587 void uninitialized_fill_pixels(const View& view, const Value& val) {
+
588  if (view.is_1d_traversable())
+
589  detail::uninitialized_fill_aux(view.begin().x(), view.end().x(),
+
590  val,is_planar<View>());
+
591  else {
+
592  typename View::y_coord_t y = 0;
+
593  try {
+
594  for (y=0; y<view.height(); ++y)
+
595  detail::uninitialized_fill_aux(view.row_begin(y),view.row_end(y),
+
596  val,is_planar<View>());
+
597  } catch(...) {
+
598  for (typename View::y_coord_t y0=0; y0<y; ++y0)
+
599  detail::destruct_aux(view.row_begin(y0),view.row_end(y0), is_planar<View>());
+
600  throw;
+
601  }
+
602  }
+
603 }
+
604 
+
606 // default_construct_pixels
+
608 
+
612 
+
613 namespace detail {
+
614 template <typename It> BOOST_FORCEINLINE
+
615 void default_construct_range_impl(It first, It last, std::true_type)
+
616 {
+
617  It first1 = first;
+
618  try
+
619  {
+
620  using value_t = typename std::iterator_traits<It>::value_type;
+
621  while (first != last)
+
622  {
+
623  new (first) value_t();
+
624  ++first;
+
625  }
+
626  }
+
627  catch (...)
+
628  {
+
629  destruct_range(first1, first);
+
630  throw;
+
631  }
+
632 }
633 
634 template <typename It>
635 BOOST_FORCEINLINE
-
636 void default_construct_range(It first, It last)
-
637 {
-
638  default_construct_range_impl(first, last, typename std::is_pointer<It>::type());
-
639 }
-
640 
-
642 template <typename It>
-
643 BOOST_FORCEINLINE
-
644 void default_construct_aux(It first, It last, std::true_type)
-
645 {
-
646  std::size_t channel = 0;
-
647  try
-
648  {
-
649  using pixel_t = typename std::iterator_traits<It>::value_type;
-
650  while (channel < num_channels<pixel_t>::value)
-
651  {
-
652  default_construct_range(dynamic_at_c(first, channel), dynamic_at_c(last, channel));
-
653  ++channel;
-
654  }
-
655  }
-
656  catch (...)
-
657  {
-
658  for (std::size_t c = 0; c < channel; ++c)
-
659  destruct_range(dynamic_at_c(first, c), dynamic_at_c(last, c));
-
660  throw;
-
661  }
-
662 }
-
663 
-
665 template <typename It>
-
666 BOOST_FORCEINLINE
-
667 void default_construct_aux(It first, It last, std::false_type)
-
668 {
-
669  default_construct_range(first, last);
-
670 }
-
671 
-
672 template <typename View, bool IsPlanar>
-
673 struct has_trivial_pixel_constructor
-
674  : detail::is_trivially_default_constructible<typename View::value_type>
-
675 {};
-
676 
-
677 template <typename View>
-
678 struct has_trivial_pixel_constructor<View, true>
-
679  : detail::is_trivially_default_constructible<typename channel_type<View>::type>
-
680 {};
-
681 
-
682 template<typename View, bool IsTriviallyConstructible>
-
683 BOOST_FORCEINLINE
-
684 void default_construct_pixels_impl(
-
685  View const& view,
-
686  std::enable_if<!IsTriviallyConstructible>* /*ptr*/ = nullptr)
-
687 {
-
688  if (view.is_1d_traversable())
-
689  {
-
690  detail::default_construct_aux(
-
691  view.begin().x(), view.end().x(), is_planar<View>());
-
692  }
-
693  else
-
694  {
-
695  typename View::y_coord_t y = 0;
-
696  try
-
697  {
-
698  for( y = 0; y < view.height(); ++y )
-
699  detail::default_construct_aux(
-
700  view.row_begin(y), view.row_end(y), is_planar<View>());
-
701  }
-
702  catch(...)
-
703  {
-
704  for (typename View::y_coord_t y0 = 0; y0 < y; ++y0 )
-
705  detail::destruct_aux(
-
706  view.row_begin(y0), view.row_end(y0), is_planar<View>());
-
707 
-
708  throw;
-
709  }
-
710  }
-
711 }
-
712 
-
713 } // namespace detail
-
714 
-
719 template <typename View>
- -
721 {
-
722  detail::default_construct_pixels_impl
-
723  <
-
724  View,
-
725  detail::has_trivial_pixel_constructor
-
726  <
-
727  View,
-
728  is_planar<View>::value
-
729  >::value
-
730  >(view);
-
731 }
-
732 
-
734 // uninitialized_copy_pixels
-
736 
-
740 
-
741 namespace detail {
-
742 
-
743 enum class copy_planarity_condition
-
744 {
-
745  planar_to_planar,
-
746  interleaved_to_planar,
-
747  mixed_to_interleaved
-
748 };
-
749 
-
750 using planar_to_planar_type =
-
751  std::integral_constant
-
752  <
-
753  copy_planarity_condition, copy_planarity_condition::planar_to_planar
-
754  >;
-
755 using interleaved_to_planar_type =
-
756  std::integral_constant
-
757  <
-
758  copy_planarity_condition, copy_planarity_condition::interleaved_to_planar
-
759  >;
-
760 using mixed_to_interleaved_type =
-
761  std::integral_constant
-
762  <
-
763  copy_planarity_condition, copy_planarity_condition::mixed_to_interleaved
-
764  >;
-
765 
-
767 template <typename It1, typename It2>
-
768 BOOST_FORCEINLINE
-
769 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2, planar_to_planar_type)
-
770 {
-
771  std::size_t channel=0;
-
772  try {
-
773  using pixel_t = typename std::iterator_traits<It1>::value_type;
-
774  while (channel < num_channels<pixel_t>::value)
-
775  {
-
776  std::uninitialized_copy(
-
777  dynamic_at_c(first1, channel),
-
778  dynamic_at_c(last1, channel),
-
779  dynamic_at_c(first2, channel));
-
780  ++channel;
-
781  }
-
782  }
-
783  catch (...)
-
784  {
-
785  It2 last2 = first2;
-
786  std::advance(last2, std::distance(first1, last1));
-
787  for (std::size_t c = 0; c < channel; ++c)
-
788  destruct_range(dynamic_at_c(first2, c), dynamic_at_c(last2, c));
-
789  throw;
-
790  }
-
791 }
-
792 
-
794 template <typename It1, typename It2>
-
795 BOOST_FORCEINLINE
-
796 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2, mixed_to_interleaved_type)
-
797 {
-
798  std::uninitialized_copy(first1, last1, first2);
-
799 }
-
800 
-
802 template <typename It1, typename It2>
-
803 BOOST_FORCEINLINE
-
804 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2,
-
805 interleaved_to_planar_type)
-
806 {
-
807  default_construct_aux(first2, last2, std::true_type());
-
808 
-
809  typename It2::difference_type n = last2 - first2;
-
810  copier_n<It1,It2>()(first1, n, first2);
-
811 }
-
812 } // namespace detail
-
813 
-
818 template <typename View1, typename View2>
-
819 void uninitialized_copy_pixels(View1 const& view1, View2 const& view2)
-
820 {
-
821  using copy_planarity_condition = detail::copy_planarity_condition;
-
822  using copy_planarity_condition_type =
-
823  std::integral_constant
-
824  <
-
825  copy_planarity_condition,
-
826  !is_planar<View2>::value
-
827  ? copy_planarity_condition::mixed_to_interleaved
-
828  : (is_planar<View1>::value
-
829  ? copy_planarity_condition::planar_to_planar
-
830  : copy_planarity_condition::interleaved_to_planar)
-
831  >;
-
832  BOOST_ASSERT(view1.dimensions() == view2.dimensions());
-
833 
-
834  if (view1.is_1d_traversable() && view2.is_1d_traversable())
-
835  {
-
836  detail::uninitialized_copy_aux(
-
837  view1.begin().x(), view1.end().x(), view2.begin().x(), view2.end().x(),
-
838  copy_planarity_condition_type());
-
839  }
-
840  else
-
841  {
-
842  typename View1::y_coord_t y = 0;
-
843  try
-
844  {
-
845  for (y = 0; y < view1.height(); ++y)
-
846  detail::uninitialized_copy_aux(
-
847  view1.row_begin(y), view1.row_end(y), view2.row_begin(y), view2.row_end(y),
-
848  copy_planarity_condition_type());
-
849  }
-
850  catch(...)
-
851  {
-
852  for (typename View1::y_coord_t y0 = 0; y0 < y; ++y0)
-
853  detail::destruct_aux(view2.row_begin(y0), view2.row_end(y0), is_planar<View2>());
-
854  throw;
-
855  }
-
856  }
-
857 }
-
858 
-
860 // for_each_pixel
-
862 
-
871 
-
873 template <typename View, typename F>
-
874 F for_each_pixel(View const& view, F fun)
-
875 {
-
876  if (view.is_1d_traversable())
-
877  {
-
878  return std::for_each(view.begin().x(), view.end().x(), fun);
-
879  }
-
880  else
+
636 void default_construct_range_impl(It, It, std::false_type) {}
+
637 
+
638 template <typename It>
+
639 BOOST_FORCEINLINE
+
640 void default_construct_range(It first, It last)
+
641 {
+
642  default_construct_range_impl(first, last, typename std::is_pointer<It>::type());
+
643 }
+
644 
+
646 template <typename It>
+
647 BOOST_FORCEINLINE
+
648 void default_construct_aux(It first, It last, std::true_type)
+
649 {
+
650  std::size_t channel = 0;
+
651  try
+
652  {
+
653  using pixel_t = typename std::iterator_traits<It>::value_type;
+
654  while (channel < num_channels<pixel_t>::value)
+
655  {
+
656  default_construct_range(dynamic_at_c(first, channel), dynamic_at_c(last, channel));
+
657  ++channel;
+
658  }
+
659  }
+
660  catch (...)
+
661  {
+
662  for (std::size_t c = 0; c < channel; ++c)
+
663  destruct_range(dynamic_at_c(first, c), dynamic_at_c(last, c));
+
664  throw;
+
665  }
+
666 }
+
667 
+
669 template <typename It>
+
670 BOOST_FORCEINLINE
+
671 void default_construct_aux(It first, It last, std::false_type)
+
672 {
+
673  default_construct_range(first, last);
+
674 }
+
675 
+
676 template <typename View, bool IsPlanar>
+
677 struct has_trivial_pixel_constructor
+
678  : detail::is_trivially_default_constructible<typename View::value_type>
+
679 {};
+
680 
+
681 template <typename View>
+
682 struct has_trivial_pixel_constructor<View, true>
+
683  : detail::is_trivially_default_constructible<typename channel_type<View>::type>
+
684 {};
+
685 
+
686 template<typename View, bool IsTriviallyConstructible>
+
687 BOOST_FORCEINLINE
+
688 void default_construct_pixels_impl(
+
689  View const& view,
+
690  std::enable_if<!IsTriviallyConstructible>* /*ptr*/ = nullptr)
+
691 {
+
692  if (view.is_1d_traversable())
+
693  {
+
694  detail::default_construct_aux(
+
695  view.begin().x(), view.end().x(), is_planar<View>());
+
696  }
+
697  else
+
698  {
+
699  typename View::y_coord_t y = 0;
+
700  try
+
701  {
+
702  for( y = 0; y < view.height(); ++y )
+
703  detail::default_construct_aux(
+
704  view.row_begin(y), view.row_end(y), is_planar<View>());
+
705  }
+
706  catch(...)
+
707  {
+
708  for (typename View::y_coord_t y0 = 0; y0 < y; ++y0 )
+
709  detail::destruct_aux(
+
710  view.row_begin(y0), view.row_end(y0), is_planar<View>());
+
711 
+
712  throw;
+
713  }
+
714  }
+
715 }
+
716 
+
717 } // namespace detail
+
718 
+
723 template <typename View>
+ +
725 {
+
726  detail::default_construct_pixels_impl
+
727  <
+
728  View,
+
729  detail::has_trivial_pixel_constructor
+
730  <
+
731  View,
+
732  is_planar<View>::value
+
733  >::value
+
734  >(view);
+
735 }
+
736 
+
738 // uninitialized_copy_pixels
+
740 
+
744 
+
745 namespace detail {
+
746 
+
747 enum class copy_planarity_condition
+
748 {
+
749  planar_to_planar,
+
750  interleaved_to_planar,
+
751  mixed_to_interleaved
+
752 };
+
753 
+
754 using planar_to_planar_type =
+
755  std::integral_constant
+
756  <
+
757  copy_planarity_condition, copy_planarity_condition::planar_to_planar
+
758  >;
+
759 using interleaved_to_planar_type =
+
760  std::integral_constant
+
761  <
+
762  copy_planarity_condition, copy_planarity_condition::interleaved_to_planar
+
763  >;
+
764 using mixed_to_interleaved_type =
+
765  std::integral_constant
+
766  <
+
767  copy_planarity_condition, copy_planarity_condition::mixed_to_interleaved
+
768  >;
+
769 
+
771 template <typename It1, typename It2>
+
772 BOOST_FORCEINLINE
+
773 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2, planar_to_planar_type)
+
774 {
+
775  std::size_t channel=0;
+
776  try {
+
777  using pixel_t = typename std::iterator_traits<It1>::value_type;
+
778  while (channel < num_channels<pixel_t>::value)
+
779  {
+
780  std::uninitialized_copy(
+
781  dynamic_at_c(first1, channel),
+
782  dynamic_at_c(last1, channel),
+
783  dynamic_at_c(first2, channel));
+
784  ++channel;
+
785  }
+
786  }
+
787  catch (...)
+
788  {
+
789  It2 last2 = first2;
+
790  std::advance(last2, std::distance(first1, last1));
+
791  for (std::size_t c = 0; c < channel; ++c)
+
792  destruct_range(dynamic_at_c(first2, c), dynamic_at_c(last2, c));
+
793  throw;
+
794  }
+
795 }
+
796 
+
798 template <typename It1, typename It2>
+
799 BOOST_FORCEINLINE
+
800 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2, mixed_to_interleaved_type)
+
801 {
+
802  std::uninitialized_copy(first1, last1, first2);
+
803 }
+
804 
+
806 template <typename It1, typename It2>
+
807 BOOST_FORCEINLINE
+
808 void uninitialized_copy_aux(It1 first1, It1 last1, It2 first2, It2 last2,
+
809 interleaved_to_planar_type)
+
810 {
+
811  default_construct_aux(first2, last2, std::true_type());
+
812 
+
813  typename It2::difference_type n = last2 - first2;
+
814  copier_n<It1,It2>()(first1, n, first2);
+
815 }
+
816 } // namespace detail
+
817 
+
822 template <typename View1, typename View2>
+
823 void uninitialized_copy_pixels(View1 const& view1, View2 const& view2)
+
824 {
+
825  using copy_planarity_condition = detail::copy_planarity_condition;
+
826  using copy_planarity_condition_type =
+
827  std::integral_constant
+
828  <
+
829  copy_planarity_condition,
+
830  !is_planar<View2>::value
+
831  ? copy_planarity_condition::mixed_to_interleaved
+
832  : (is_planar<View1>::value
+
833  ? copy_planarity_condition::planar_to_planar
+
834  : copy_planarity_condition::interleaved_to_planar)
+
835  >;
+
836  BOOST_ASSERT(view1.dimensions() == view2.dimensions());
+
837 
+
838  if (view1.is_1d_traversable() && view2.is_1d_traversable())
+
839  {
+
840  detail::uninitialized_copy_aux(
+
841  view1.begin().x(), view1.end().x(), view2.begin().x(), view2.end().x(),
+
842  copy_planarity_condition_type());
+
843  }
+
844  else
+
845  {
+
846  typename View1::y_coord_t y = 0;
+
847  try
+
848  {
+
849  for (y = 0; y < view1.height(); ++y)
+
850  detail::uninitialized_copy_aux(
+
851  view1.row_begin(y), view1.row_end(y), view2.row_begin(y), view2.row_end(y),
+
852  copy_planarity_condition_type());
+
853  }
+
854  catch(...)
+
855  {
+
856  for (typename View1::y_coord_t y0 = 0; y0 < y; ++y0)
+
857  detail::destruct_aux(view2.row_begin(y0), view2.row_end(y0), is_planar<View2>());
+
858  throw;
+
859  }
+
860  }
+
861 }
+
862 
+
864 // for_each_pixel
+
866 
+
875 
+
877 template <typename View, typename F>
+
878 F for_each_pixel(View const& view, F fun)
+
879 {
+
880  if (view.is_1d_traversable())
881  {
-
882  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
-
883  for (auto begin = view.row_begin(y), end = view.row_end(y); begin != end; ++begin)
-
884  fun(*begin);
-
885  return fun;
-
886  }
-
887 }
-
888 
+
882  return std::for_each(view.begin().x(), view.end().x(), fun);
+
883  }
+
884  else
+
885  {
+
886  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
+
887  for (auto begin = view.row_begin(y), end = view.row_end(y); begin != end; ++begin)
+
888  fun(*begin);
+
889  return fun;
+
890  }
+
891 }
892 
-
894 template <typename View, typename F>
-
895 F for_each_pixel_position(View const& view, F fun)
-
896 {
-
897  typename View::xy_locator loc = view.xy_at(0, 0);
-
898  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
-
899  {
-
900  for (std::ptrdiff_t x = 0; x < view.width(); ++x, ++loc.x())
-
901  fun(loc);
-
902  loc.x() -= view.width(); ++loc.y();
-
903  }
-
904  return fun;
-
905 }
-
906 
-
908 // generate_pixels
-
910 
-
914 
-
917 template <typename View, typename F>
-
918 void generate_pixels(View const& view, F fun)
-
919 {
-
920  if (view.is_1d_traversable())
-
921  {
-
922  std::generate(view.begin().x(), view.end().x(), fun);
-
923  }
-
924  else
+
896 
+
898 template <typename View, typename F>
+
899 F for_each_pixel_position(View const& view, F fun)
+
900 {
+
901  typename View::xy_locator loc = view.xy_at(0, 0);
+
902  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
+
903  {
+
904  for (std::ptrdiff_t x = 0; x < view.width(); ++x, ++loc.x())
+
905  fun(loc);
+
906  loc.x() -= view.width(); ++loc.y();
+
907  }
+
908  return fun;
+
909 }
+
910 
+
912 // generate_pixels
+
914 
+
918 
+
921 template <typename View, typename F>
+
922 void generate_pixels(View const& view, F fun)
+
923 {
+
924  if (view.is_1d_traversable())
925  {
-
926  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
-
927  std::generate(view.row_begin(y), view.row_end(y), fun);
-
928  }
-
929 }
-
930 
-
932 // std::equal and gil::equal_pixels for GIL constructs
-
934 
-
938 
-
939 template <typename I1, typename I2>
-
940 BOOST_FORCEINLINE
-
941 bool equal_n(I1 i1, std::ptrdiff_t n, I2 i2);
+
926  std::generate(view.begin().x(), view.end().x(), fun);
+
927  }
+
928  else
+
929  {
+
930  for (std::ptrdiff_t y = 0; y < view.height(); ++y)
+
931  std::generate(view.row_begin(y), view.row_end(y), fun);
+
932  }
+
933 }
+
934 
+
936 // std::equal and gil::equal_pixels for GIL constructs
+
938 
942 
-
943 namespace detail {
-
944 
-
945 template <typename I1, typename I2>
-
946 struct equal_n_fn
-
947 {
-
948  BOOST_FORCEINLINE
-
949  bool operator()(I1 i1, std::ptrdiff_t n, I2 i2) const
-
950  {
-
951  return std::equal(i1, i1 + n, i2);
-
952  }
-
953 };
-
954 
-
957 template<typename T, typename CS>
-
958 struct equal_n_fn<pixel<T, CS> const*, pixel<T, CS> const*>
-
959 {
-
960  BOOST_FORCEINLINE
-
961  bool operator()(pixel<T, CS> const* i1, std::ptrdiff_t n, pixel<T, CS> const* i2) const
-
962  {
-
963  return memcmp(i1, i2, n * sizeof(pixel<T, CS>)) == 0;
-
964  }
-
965 };
-
966 
-
967 template<typename T, typename CS>
-
968 struct equal_n_fn<pixel<T, CS>*, pixel<T, CS>*>
-
969  : equal_n_fn<pixel<T, CS> const*, pixel<T, CS> const*>
-
970 {};
-
971 
-
975 template<typename IC, typename CS>
-
976 struct equal_n_fn<planar_pixel_iterator<IC, CS>, planar_pixel_iterator<IC, CS>>
-
977 {
-
978  BOOST_FORCEINLINE
-
979  bool operator()(planar_pixel_iterator<IC, CS> const i1, std::ptrdiff_t n, planar_pixel_iterator<IC, CS> const i2) const
-
980  {
-
981  // FIXME: ptrdiff_t vs size_t
-
982  constexpr std::ptrdiff_t byte_size = n * sizeof(typename std::iterator_traits<IC>::value_type);
-
983  for (std::ptrdiff_t i = 0; i < mp11::mp_size<CS>::value; ++i)
-
984  {
-
985  if (memcmp(dynamic_at_c(i1, i), dynamic_at_c(i2, i), byte_size) != 0)
-
986  return false;
-
987  }
-
988  return true;
-
989  }
-
990 };
-
991 
-
995 template <typename Loc, typename It>
-
996 struct equal_n_fn<boost::gil::iterator_from_2d<Loc>, It>
-
997 {
-
998  BOOST_FORCEINLINE
-
999  bool operator()(boost::gil::iterator_from_2d<Loc> i1, std::ptrdiff_t n, It i2) const
-
1000  {
-
1001  gil_function_requires<boost::gil::PixelLocatorConcept<Loc>>();
-
1002  gil_function_requires<boost::gil::PixelIteratorConcept<It>>();
-
1003  while (n > 0)
-
1004  {
-
1005  std::ptrdiff_t const num = std::min<std::ptrdiff_t>(n, i1.width() - i1.x_pos());
-
1006  if (!equal_n(i1.x(), num, i2))
-
1007  return false;
-
1008  i1 += num;
-
1009  i2 += num;
-
1010  n -= num;
-
1011  }
-
1012  return true;
-
1013  }
-
1014 };
-
1015 
-
1019 template <typename It, typename Loc>
-
1020 struct equal_n_fn<It, boost::gil::iterator_from_2d<Loc>>
-
1021 {
-
1022  BOOST_FORCEINLINE
-
1023  bool operator()(It i1, std::ptrdiff_t n, boost::gil::iterator_from_2d<Loc> i2) const
-
1024  {
-
1025  gil_function_requires<boost::gil::PixelIteratorConcept<It>>();
-
1026  gil_function_requires<boost::gil::PixelLocatorConcept<Loc>>();
-
1027  while (n > 0)
-
1028  {
-
1029  std::ptrdiff_t const num = std::min<std::ptrdiff_t>(n, i2.width() - i2.x_pos());
-
1030  if (!equal_n(i1, num, i2.x()))
-
1031  return false;
-
1032  i1 += num;
-
1033  i2 += num;
-
1034  n -= num;
-
1035  }
-
1036  return true;
-
1037  }
-
1038 };
-
1039 
-
1041 template <typename Loc1, typename Loc2>
-
1042 struct equal_n_fn<boost::gil::iterator_from_2d<Loc1>,boost::gil::iterator_from_2d<Loc2>> {
-
1043  BOOST_FORCEINLINE bool operator()(boost::gil::iterator_from_2d<Loc1> i1, std::ptrdiff_t n, boost::gil::iterator_from_2d<Loc2> i2) const {
-
1044  gil_function_requires<boost::gil::PixelLocatorConcept<Loc1>>();
-
1045  gil_function_requires<boost::gil::PixelLocatorConcept<Loc2>>();
-
1046  if (i1.x_pos()!=i2.x_pos() || i1.width()!=i2.width()) {
-
1047  while(n-->0) {
-
1048  if (*i1++!=*i2++) return false;
-
1049  }
-
1050  }
-
1051  while (n>0) {
-
1052  std::ptrdiff_t num=std::min<const std::ptrdiff_t>(n,i2.width()-i2.x_pos());
-
1053  if (!equal_n(i1.x(), num, i2.x()))
-
1054  return false;
-
1055  i1+=num;
-
1056  i2+=num;
-
1057  n-=num;
-
1058  }
-
1059  return true;
-
1060  }
-
1061 };
-
1062 } // namespace detail
-
1063 
-
1064 template <typename I1, typename I2> BOOST_FORCEINLINE
-
1065 bool equal_n(I1 i1, std::ptrdiff_t n, I2 i2) {
-
1066  return detail::equal_n_fn<I1,I2>()(i1,n,i2);
-
1067 }
-
1068 } } // namespace boost::gil
-
1069 
-
1070 namespace std {
-
1082 template <typename Loc1, typename Loc2> BOOST_FORCEINLINE
- -
1084  boost::gil::gil_function_requires<boost::gil::PixelLocatorConcept<Loc1>>();
-
1085  boost::gil::gil_function_requires<boost::gil::PixelLocatorConcept<Loc2>>();
-
1086  std::ptrdiff_t n=last-first;
-
1087  if (first.is_1d_traversable()) {
-
1088  if (first2.is_1d_traversable())
-
1089  return boost::gil::detail::equal_n_fn<typename Loc1::x_iterator,typename Loc2::x_iterator>()(first.x(),n, first2.x());
-
1090  else
-
1091  return boost::gil::detail::equal_n_fn<typename Loc1::x_iterator,boost::gil::iterator_from_2d<Loc2>>()(first.x(),n, first2);
-
1092  } else {
-
1093  if (first2.is_1d_traversable())
-
1094  return boost::gil::detail::equal_n_fn<boost::gil::iterator_from_2d<Loc1>,typename Loc2::x_iterator>()(first,n, first2.x());
-
1095  else
-
1096  return boost::gil::detail::equal_n_fn<boost::gil::iterator_from_2d<Loc1>,boost::gil::iterator_from_2d<Loc2>>()(first,n,first2);
-
1097  }
-
1098 }
-
1099 } // namespace std
-
1100 
-
1101 namespace boost { namespace gil {
-
1104 template <typename View1, typename View2> BOOST_FORCEINLINE
-
1105 bool equal_pixels(const View1& v1, const View2& v2) {
-
1106  BOOST_ASSERT(v1.dimensions() == v2.dimensions());
-
1107  return std::equal(v1.begin(),v1.end(),v2.begin()); // std::equal has overloads with GIL iterators for optimal performance
-
1108 }
-
1109 
-
1115 
+
943 template <typename I1, typename I2>
+
944 BOOST_FORCEINLINE
+
945 bool equal_n(I1 i1, std::ptrdiff_t n, I2 i2);
+
946 
+
947 namespace detail {
+
948 
+
949 template <typename I1, typename I2>
+
950 struct equal_n_fn
+
951 {
+
952  BOOST_FORCEINLINE
+
953  bool operator()(I1 i1, std::ptrdiff_t n, I2 i2) const
+
954  {
+
955  return std::equal(i1, i1 + n, i2);
+
956  }
+
957 };
+
958 
+
961 template<typename T, typename CS>
+
962 struct equal_n_fn<pixel<T, CS> const*, pixel<T, CS> const*>
+
963 {
+
964  BOOST_FORCEINLINE
+
965  bool operator()(pixel<T, CS> const* i1, std::ptrdiff_t n, pixel<T, CS> const* i2) const
+
966  {
+
967  return memcmp(i1, i2, n * sizeof(pixel<T, CS>)) == 0;
+
968  }
+
969 };
+
970 
+
971 template<typename T, typename CS>
+
972 struct equal_n_fn<pixel<T, CS>*, pixel<T, CS>*>
+
973  : equal_n_fn<pixel<T, CS> const*, pixel<T, CS> const*>
+
974 {};
+
975 
+
979 template<typename IC, typename CS>
+
980 struct equal_n_fn<planar_pixel_iterator<IC, CS>, planar_pixel_iterator<IC, CS>>
+
981 {
+
982  BOOST_FORCEINLINE
+
983  bool operator()(planar_pixel_iterator<IC, CS> const i1, std::ptrdiff_t n, planar_pixel_iterator<IC, CS> const i2) const
+
984  {
+
985  // FIXME: ptrdiff_t vs size_t
+
986  constexpr std::ptrdiff_t byte_size = n * sizeof(typename std::iterator_traits<IC>::value_type);
+
987  for (std::ptrdiff_t i = 0; i < mp11::mp_size<CS>::value; ++i)
+
988  {
+
989  if (memcmp(dynamic_at_c(i1, i), dynamic_at_c(i2, i), byte_size) != 0)
+
990  return false;
+
991  }
+
992  return true;
+
993  }
+
994 };
+
995 
+
999 template <typename Loc, typename It>
+
1000 struct equal_n_fn<boost::gil::iterator_from_2d<Loc>, It>
+
1001 {
+
1002  BOOST_FORCEINLINE
+
1003  bool operator()(boost::gil::iterator_from_2d<Loc> i1, std::ptrdiff_t n, It i2) const
+
1004  {
+
1005  gil_function_requires<boost::gil::PixelLocatorConcept<Loc>>();
+
1006  gil_function_requires<boost::gil::PixelIteratorConcept<It>>();
+
1007  while (n > 0)
+
1008  {
+
1009  std::ptrdiff_t const num = std::min<std::ptrdiff_t>(n, i1.width() - i1.x_pos());
+
1010  if (!equal_n(i1.x(), num, i2))
+
1011  return false;
+
1012  i1 += num;
+
1013  i2 += num;
+
1014  n -= num;
+
1015  }
+
1016  return true;
+
1017  }
+
1018 };
+
1019 
+
1023 template <typename It, typename Loc>
+
1024 struct equal_n_fn<It, boost::gil::iterator_from_2d<Loc>>
+
1025 {
+
1026  BOOST_FORCEINLINE
+
1027  bool operator()(It i1, std::ptrdiff_t n, boost::gil::iterator_from_2d<Loc> i2) const
+
1028  {
+
1029  gil_function_requires<boost::gil::PixelIteratorConcept<It>>();
+
1030  gil_function_requires<boost::gil::PixelLocatorConcept<Loc>>();
+
1031  while (n > 0)
+
1032  {
+
1033  std::ptrdiff_t const num = std::min<std::ptrdiff_t>(n, i2.width() - i2.x_pos());
+
1034  if (!equal_n(i1, num, i2.x()))
+
1035  return false;
+
1036  i1 += num;
+
1037  i2 += num;
+
1038  n -= num;
+
1039  }
+
1040  return true;
+
1041  }
+
1042 };
+
1043 
+
1045 template <typename Loc1, typename Loc2>
+ +
1047  BOOST_FORCEINLINE bool operator()(boost::gil::iterator_from_2d<Loc1> i1, std::ptrdiff_t n, boost::gil::iterator_from_2d<Loc2> i2) const {
+
1048  gil_function_requires<boost::gil::PixelLocatorConcept<Loc1>>();
+
1049  gil_function_requires<boost::gil::PixelLocatorConcept<Loc2>>();
+
1050  if (i1.x_pos()!=i2.x_pos() || i1.width()!=i2.width()) {
+
1051  while(n-->0) {
+
1052  if (*i1++!=*i2++) return false;
+
1053  }
+
1054  }
+
1055  while (n>0) {
+
1056  std::ptrdiff_t num=std::min<const std::ptrdiff_t>(n,i2.width()-i2.x_pos());
+
1057  if (!equal_n(i1.x(), num, i2.x()))
+
1058  return false;
+
1059  i1+=num;
+
1060  i2+=num;
+
1061  n-=num;
+
1062  }
+
1063  return true;
+
1064  }
+
1065 };
+
1066 } // namespace detail
+
1067 
+
1068 template <typename I1, typename I2> BOOST_FORCEINLINE
+
1069 bool equal_n(I1 i1, std::ptrdiff_t n, I2 i2) {
+
1070  return detail::equal_n_fn<I1,I2>()(i1,n,i2);
+
1071 }
+
1072 } } // namespace boost::gil
+
1073 
+
1074 namespace std {
+
1086 template <typename Loc1, typename Loc2> BOOST_FORCEINLINE
+ +
1088  boost::gil::gil_function_requires<boost::gil::PixelLocatorConcept<Loc1>>();
+
1089  boost::gil::gil_function_requires<boost::gil::PixelLocatorConcept<Loc2>>();
+
1090  std::ptrdiff_t n=last-first;
+
1091  if (first.is_1d_traversable()) {
+
1092  if (first2.is_1d_traversable())
+
1093  return boost::gil::detail::equal_n_fn<typename Loc1::x_iterator,typename Loc2::x_iterator>()(first.x(),n, first2.x());
+
1094  else
+
1095  return boost::gil::detail::equal_n_fn<typename Loc1::x_iterator,boost::gil::iterator_from_2d<Loc2>>()(first.x(),n, first2);
+
1096  } else {
+
1097  if (first2.is_1d_traversable())
+
1098  return boost::gil::detail::equal_n_fn<boost::gil::iterator_from_2d<Loc1>,typename Loc2::x_iterator>()(first,n, first2.x());
+
1099  else
+
1100  return boost::gil::detail::equal_n_fn<boost::gil::iterator_from_2d<Loc1>,boost::gil::iterator_from_2d<Loc2>>()(first,n,first2);
+
1101  }
+
1102 }
+
1103 } // namespace std
+
1104 
+
1105 namespace boost { namespace gil {
+
1108 template <typename View1, typename View2> BOOST_FORCEINLINE
+
1109 bool equal_pixels(const View1& v1, const View2& v2) {
+
1110  BOOST_ASSERT(v1.dimensions() == v2.dimensions());
+
1111  return std::equal(v1.begin(),v1.end(),v2.begin()); // std::equal has overloads with GIL iterators for optimal performance
+
1112 }
+
1113 
1119 
-
1122 template <typename View1, typename View2, typename F> BOOST_FORCEINLINE
-
1123 F transform_pixels(const View1& src,const View2& dst, F fun) {
-
1124  BOOST_ASSERT(src.dimensions() == dst.dimensions());
-
1125  for (std::ptrdiff_t y=0; y<src.height(); ++y) {
-
1126  typename View1::x_iterator srcIt=src.row_begin(y);
-
1127  typename View2::x_iterator dstIt=dst.row_begin(y);
-
1128  for (std::ptrdiff_t x=0; x<src.width(); ++x)
-
1129  dstIt[x]=fun(srcIt[x]);
-
1130  }
-
1131  return fun;
-
1132 }
-
1133 
-
1136 template <typename View1, typename View2, typename View3, typename F> BOOST_FORCEINLINE
-
1137 F transform_pixels(const View1& src1, const View2& src2,const View3& dst, F fun) {
-
1138  for (std::ptrdiff_t y=0; y<dst.height(); ++y) {
-
1139  typename View1::x_iterator srcIt1=src1.row_begin(y);
-
1140  typename View2::x_iterator srcIt2=src2.row_begin(y);
-
1141  typename View3::x_iterator dstIt=dst.row_begin(y);
-
1142  for (std::ptrdiff_t x=0; x<dst.width(); ++x)
-
1143  dstIt[x]=fun(srcIt1[x],srcIt2[x]);
-
1144  }
-
1145  return fun;
-
1146 }
-
1147 
+
1123 
+
1126 template <typename View1, typename View2, typename F> BOOST_FORCEINLINE
+
1127 F transform_pixels(const View1& src,const View2& dst, F fun) {
+
1128  BOOST_ASSERT(src.dimensions() == dst.dimensions());
+
1129  for (std::ptrdiff_t y=0; y<src.height(); ++y) {
+
1130  typename View1::x_iterator srcIt=src.row_begin(y);
+
1131  typename View2::x_iterator dstIt=dst.row_begin(y);
+
1132  for (std::ptrdiff_t x=0; x<src.width(); ++x)
+
1133  dstIt[x]=fun(srcIt[x]);
+
1134  }
+
1135  return fun;
+
1136 }
+
1137 
+
1140 template <typename View1, typename View2, typename View3, typename F> BOOST_FORCEINLINE
+
1141 F transform_pixels(const View1& src1, const View2& src2,const View3& dst, F fun) {
+
1142  for (std::ptrdiff_t y=0; y<dst.height(); ++y) {
+
1143  typename View1::x_iterator srcIt1=src1.row_begin(y);
+
1144  typename View2::x_iterator srcIt2=src2.row_begin(y);
+
1145  typename View3::x_iterator dstIt=dst.row_begin(y);
+
1146  for (std::ptrdiff_t x=0; x<dst.width(); ++x)
+
1147  dstIt[x]=fun(srcIt1[x],srcIt2[x]);
+
1148  }
+
1149  return fun;
+
1150 }
1151 
-
1154 template <typename View1, typename View2, typename F> BOOST_FORCEINLINE
-
1155 F transform_pixel_positions(const View1& src,const View2& dst, F fun) {
-
1156  BOOST_ASSERT(src.dimensions() == dst.dimensions());
-
1157  typename View1::xy_locator loc=src.xy_at(0,0);
-
1158  for (std::ptrdiff_t y=0; y<src.height(); ++y) {
-
1159  typename View2::x_iterator dstIt=dst.row_begin(y);
-
1160  for (std::ptrdiff_t x=0; x<src.width(); ++x, ++loc.x())
-
1161  dstIt[x]=fun(loc);
-
1162  loc.x()-=src.width(); ++loc.y();
-
1163  }
-
1164  return fun;
-
1165 }
-
1166 
-
1169 template <typename View1, typename View2, typename View3, typename F> BOOST_FORCEINLINE
-
1170 F transform_pixel_positions(const View1& src1,const View2& src2,const View3& dst, F fun) {
-
1171  BOOST_ASSERT(src1.dimensions() == dst.dimensions());
-
1172  BOOST_ASSERT(src2.dimensions() == dst.dimensions());
-
1173  typename View1::xy_locator loc1=src1.xy_at(0,0);
-
1174  typename View2::xy_locator loc2=src2.xy_at(0,0);
-
1175  for (std::ptrdiff_t y=0; y<src1.height(); ++y) {
-
1176  typename View3::x_iterator dstIt=dst.row_begin(y);
-
1177  for (std::ptrdiff_t x=0; x<src1.width(); ++x, ++loc1.x(), ++loc2.x())
-
1178  dstIt[x]=fun(loc1,loc2);
-
1179  loc1.x()-=src1.width(); ++loc1.y();
-
1180  loc2.x()-=src2.width(); ++loc2.y();
-
1181  }
-
1182  return fun;
-
1183 }
-
1184 
-
1185 
-
1186 // Code below this line is moved here from <boost/gil/extension/numeric/algorithm.hpp>
-
1187 
-
1192 template <typename T>
-
1193 struct pixel_proxy : std::remove_reference<typename T::reference> {};
-
1194 
-
1196 template <typename Iterator1, typename Iterator2, typename BinaryFunction>
-
1197 BinaryFunction for_each(Iterator1 first1, Iterator1 last1, Iterator2 first2, BinaryFunction f)
-
1198 {
-
1199  while (first1 != last1)
-
1200  f(*first1++, *first2++);
-
1201  return f;
-
1202 }
-
1203 
-
1204 template <typename SrcIterator, typename DstIterator>
-
1205 inline
-
1206 auto assign_pixels(SrcIterator src, SrcIterator src_end, DstIterator dst) -> DstIterator
-
1207 {
-
1208  for_each(src, src_end, dst,
-
1209  pixel_assigns_t
-
1210  <
-
1211  typename pixel_proxy<typename std::iterator_traits<SrcIterator>::value_type>::type,
-
1212  typename pixel_proxy<typename std::iterator_traits<DstIterator>::value_type>::type
-
1213  >());
-
1214  return dst + (src_end - src);
-
1215 }
-
1216 
-
1217 namespace detail {
-
1218 
-
1219 template <std::size_t Size>
-
1220 struct inner_product_k_t
-
1221 {
-
1222  template
-
1223  <
-
1224  class InputIterator1,
-
1225  class InputIterator2,
-
1226  class T,
-
1227  class BinaryOperation1,
-
1228  class BinaryOperation2
-
1229  >
-
1230  static T apply(
-
1231  InputIterator1 first1,
-
1232  InputIterator2 first2, T init,
-
1233  BinaryOperation1 binary_op1,
-
1234  BinaryOperation2 binary_op2)
-
1235  {
-
1236  init = binary_op1(init, binary_op2(*first1, *first2));
-
1237  return inner_product_k_t<Size - 1>::template apply(
-
1238  first1 + 1, first2 + 1, init, binary_op1, binary_op2);
-
1239  }
-
1240 };
-
1241 
-
1242 template <>
-
1243 struct inner_product_k_t<0>
-
1244 {
-
1245  template
-
1246  <
-
1247  class InputIterator1,
-
1248  class InputIterator2,
-
1249  class T,
-
1250  class BinaryOperation1,
-
1251  class BinaryOperation2
-
1252  >
-
1253  static T apply(
-
1254  InputIterator1 first1,
-
1255  InputIterator2 first2,
-
1256  T init,
-
1257  BinaryOperation1 binary_op1,
-
1258  BinaryOperation2 binary_op2)
-
1259  {
-
1260  return init;
-
1261  }
-
1262 };
-
1263 
-
1264 } // namespace detail
-
1265 
-
1267 template
-
1268 <
-
1269  std::size_t Size,
-
1270  class InputIterator1,
-
1271  class InputIterator2,
-
1272  class T,
-
1273  class BinaryOperation1,
-
1274  class BinaryOperation2
-
1275 >
-
1276 BOOST_FORCEINLINE
-
1277 T inner_product_k(
-
1278  InputIterator1 first1,
-
1279  InputIterator2 first2,
-
1280  T init,
-
1281  BinaryOperation1 binary_op1,
-
1282  BinaryOperation2 binary_op2)
-
1283 {
-
1284  return detail::inner_product_k_t<Size>::template apply(
-
1285  first1, first2, init, binary_op1, binary_op2);
-
1286 }
-
1287 
-
1289 template
-
1290 <
-
1291  typename PixelAccum,
-
1292  typename SrcIterator,
-
1293  typename KernelIterator,
-
1294  typename Size,
-
1295  typename DstIterator
-
1296 >
-
1297 inline
-
1298 auto correlate_pixels_n(
-
1299  SrcIterator src_begin,
-
1300  SrcIterator src_end,
-
1301  KernelIterator kernel_begin,
-
1302  Size kernel_size,
-
1303  DstIterator dst_begin)
-
1304  -> DstIterator
-
1305 {
-
1306  using src_pixel_ref_t = typename pixel_proxy
-
1307  <
-
1308  typename std::iterator_traits<SrcIterator>::value_type
-
1309  >::type;
-
1310  using dst_pixel_ref_t = typename pixel_proxy
+
1155 
+
1158 template <typename View1, typename View2, typename F> BOOST_FORCEINLINE
+
1159 F transform_pixel_positions(const View1& src,const View2& dst, F fun) {
+
1160  BOOST_ASSERT(src.dimensions() == dst.dimensions());
+
1161  typename View1::xy_locator loc=src.xy_at(0,0);
+
1162  for (std::ptrdiff_t y=0; y<src.height(); ++y) {
+
1163  typename View2::x_iterator dstIt=dst.row_begin(y);
+
1164  for (std::ptrdiff_t x=0; x<src.width(); ++x, ++loc.x())
+
1165  dstIt[x]=fun(loc);
+
1166  loc.x()-=src.width(); ++loc.y();
+
1167  }
+
1168  return fun;
+
1169 }
+
1170 
+
1173 template <typename View1, typename View2, typename View3, typename F> BOOST_FORCEINLINE
+
1174 F transform_pixel_positions(const View1& src1,const View2& src2,const View3& dst, F fun) {
+
1175  BOOST_ASSERT(src1.dimensions() == dst.dimensions());
+
1176  BOOST_ASSERT(src2.dimensions() == dst.dimensions());
+
1177  typename View1::xy_locator loc1=src1.xy_at(0,0);
+
1178  typename View2::xy_locator loc2=src2.xy_at(0,0);
+
1179  for (std::ptrdiff_t y=0; y<src1.height(); ++y) {
+
1180  typename View3::x_iterator dstIt=dst.row_begin(y);
+
1181  for (std::ptrdiff_t x=0; x<src1.width(); ++x, ++loc1.x(), ++loc2.x())
+
1182  dstIt[x]=fun(loc1,loc2);
+
1183  loc1.x()-=src1.width(); ++loc1.y();
+
1184  loc2.x()-=src2.width(); ++loc2.y();
+
1185  }
+
1186  return fun;
+
1187 }
+
1188 
+
1189 
+
1190 // Code below this line is moved here from <boost/gil/extension/numeric/algorithm.hpp>
+
1191 
+
1196 template <typename T>
+
1197 struct pixel_proxy : std::remove_reference<typename T::reference> {};
+
1198 
+
1200 template <typename Iterator1, typename Iterator2, typename BinaryFunction>
+
1201 BinaryFunction for_each(Iterator1 first1, Iterator1 last1, Iterator2 first2, BinaryFunction f)
+
1202 {
+
1203  while (first1 != last1)
+
1204  f(*first1++, *first2++);
+
1205  return f;
+
1206 }
+
1207 
+
1208 template <typename SrcIterator, typename DstIterator>
+
1209 inline
+
1210 auto assign_pixels(SrcIterator src, SrcIterator src_end, DstIterator dst) -> DstIterator
+
1211 {
+
1212  for_each(src, src_end, dst,
+
1213  pixel_assigns_t
+
1214  <
+
1215  typename pixel_proxy<typename std::iterator_traits<SrcIterator>::value_type>::type,
+
1216  typename pixel_proxy<typename std::iterator_traits<DstIterator>::value_type>::type
+
1217  >());
+
1218  return dst + (src_end - src);
+
1219 }
+
1220 
+
1221 namespace detail {
+
1222 
+
1223 template <std::size_t Size>
+
1224 struct inner_product_k_t
+
1225 {
+
1226  template
+
1227  <
+
1228  class InputIterator1,
+
1229  class InputIterator2,
+
1230  class T,
+
1231  class BinaryOperation1,
+
1232  class BinaryOperation2
+
1233  >
+
1234  static T apply(
+
1235  InputIterator1 first1,
+
1236  InputIterator2 first2, T init,
+
1237  BinaryOperation1 binary_op1,
+
1238  BinaryOperation2 binary_op2)
+
1239  {
+
1240  init = binary_op1(init, binary_op2(*first1, *first2));
+
1241  return inner_product_k_t<Size - 1>::template apply(
+
1242  first1 + 1, first2 + 1, init, binary_op1, binary_op2);
+
1243  }
+
1244 };
+
1245 
+
1246 template <>
+
1247 struct inner_product_k_t<0>
+
1248 {
+
1249  template
+
1250  <
+
1251  class InputIterator1,
+
1252  class InputIterator2,
+
1253  class T,
+
1254  class BinaryOperation1,
+
1255  class BinaryOperation2
+
1256  >
+
1257  static T apply(
+
1258  InputIterator1 first1,
+
1259  InputIterator2 first2,
+
1260  T init,
+
1261  BinaryOperation1 binary_op1,
+
1262  BinaryOperation2 binary_op2)
+
1263  {
+
1264  return init;
+
1265  }
+
1266 };
+
1267 
+
1268 } // namespace detail
+
1269 
+
1271 template
+
1272 <
+
1273  std::size_t Size,
+
1274  class InputIterator1,
+
1275  class InputIterator2,
+
1276  class T,
+
1277  class BinaryOperation1,
+
1278  class BinaryOperation2
+
1279 >
+
1280 BOOST_FORCEINLINE
+
1281 T inner_product_k(
+
1282  InputIterator1 first1,
+
1283  InputIterator2 first2,
+
1284  T init,
+
1285  BinaryOperation1 binary_op1,
+
1286  BinaryOperation2 binary_op2)
+
1287 {
+
1288  return detail::inner_product_k_t<Size>::template apply(
+
1289  first1, first2, init, binary_op1, binary_op2);
+
1290 }
+
1291 
+
1293 template
+
1294 <
+
1295  typename PixelAccum,
+
1296  typename SrcIterator,
+
1297  typename KernelIterator,
+
1298  typename Size,
+
1299  typename DstIterator
+
1300 >
+
1301 inline
+
1302 auto correlate_pixels_n(
+
1303  SrcIterator src_begin,
+
1304  SrcIterator src_end,
+
1305  KernelIterator kernel_begin,
+
1306  Size kernel_size,
+
1307  DstIterator dst_begin)
+
1308  -> DstIterator
+
1309 {
+
1310  using src_pixel_ref_t = typename pixel_proxy
1311  <
-
1312  typename std::iterator_traits<DstIterator>::value_type
+
1312  typename std::iterator_traits<SrcIterator>::value_type
1313  >::type;
-
1314  using kernel_value_t = typename std::iterator_traits<KernelIterator>::value_type;
-
1315 
-
1316  PixelAccum accum_zero;
-
1317  pixel_zeros_t<PixelAccum>()(accum_zero);
-
1318  while (src_begin != src_end)
-
1319  {
-
1320  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
-
1321  std::inner_product(
-
1322  src_begin,
-
1323  src_begin + kernel_size,
-
1324  kernel_begin,
-
1325  accum_zero,
-
1326  pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
-
1327  pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_value_t, PixelAccum>()),
-
1328  *dst_begin);
-
1329 
-
1330  ++src_begin;
-
1331  ++dst_begin;
-
1332  }
-
1333  return dst_begin;
-
1334 }
-
1335 
-
1337 template
-
1338 <
-
1339  std::size_t Size,
-
1340  typename PixelAccum,
-
1341  typename SrcIterator,
-
1342  typename KernelIterator,
-
1343  typename DstIterator
-
1344 >
-
1345 inline
-
1346 auto correlate_pixels_k(
-
1347  SrcIterator src_begin,
-
1348  SrcIterator src_end,
-
1349  KernelIterator kernel_begin,
-
1350  DstIterator dst_begin)
-
1351  -> DstIterator
-
1352 {
-
1353  using src_pixel_ref_t = typename pixel_proxy
-
1354  <
-
1355  typename std::iterator_traits<SrcIterator>::value_type
-
1356  >::type;
-
1357  using dst_pixel_ref_t = typename pixel_proxy
+
1314  using dst_pixel_ref_t = typename pixel_proxy
+
1315  <
+
1316  typename std::iterator_traits<DstIterator>::value_type
+
1317  >::type;
+
1318  using kernel_value_t = typename std::iterator_traits<KernelIterator>::value_type;
+
1319 
+
1320  PixelAccum accum_zero;
+
1321  pixel_zeros_t<PixelAccum>()(accum_zero);
+
1322  while (src_begin != src_end)
+
1323  {
+
1324  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
+
1325  std::inner_product(
+
1326  src_begin,
+
1327  src_begin + kernel_size,
+
1328  kernel_begin,
+
1329  accum_zero,
+
1330  pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
+
1331  pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_value_t, PixelAccum>()),
+
1332  *dst_begin);
+
1333 
+
1334  ++src_begin;
+
1335  ++dst_begin;
+
1336  }
+
1337  return dst_begin;
+
1338 }
+
1339 
+
1341 template
+
1342 <
+
1343  std::size_t Size,
+
1344  typename PixelAccum,
+
1345  typename SrcIterator,
+
1346  typename KernelIterator,
+
1347  typename DstIterator
+
1348 >
+
1349 inline
+
1350 auto correlate_pixels_k(
+
1351  SrcIterator src_begin,
+
1352  SrcIterator src_end,
+
1353  KernelIterator kernel_begin,
+
1354  DstIterator dst_begin)
+
1355  -> DstIterator
+
1356 {
+
1357  using src_pixel_ref_t = typename pixel_proxy
1358  <
-
1359  typename std::iterator_traits<DstIterator>::value_type
+
1359  typename std::iterator_traits<SrcIterator>::value_type
1360  >::type;
-
1361  using kernel_type = typename std::iterator_traits<KernelIterator>::value_type;
-
1362 
-
1363  PixelAccum accum_zero;
-
1364  pixel_zeros_t<PixelAccum>()(accum_zero);
-
1365  while (src_begin != src_end)
-
1366  {
-
1367  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
-
1368  inner_product_k<Size>(
-
1369  src_begin,
-
1370  kernel_begin,
-
1371  accum_zero,
-
1372  pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
-
1373  pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_type, PixelAccum>()),
-
1374  *dst_begin);
-
1375 
-
1376  ++src_begin;
-
1377  ++dst_begin;
-
1378  }
-
1379  return dst_begin;
-
1380 }
-
1381 
-
1386 template <typename PixelAccum, typename SrcView, typename Scalar, typename DstView>
-
1387 inline
-
1388 void view_multiplies_scalar(SrcView const& src_view, Scalar const& scalar, DstView const& dst_view)
-
1389 {
-
1390  static_assert(std::is_scalar<Scalar>::value, "Scalar is not scalar");
-
1391  BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions());
-
1392  using src_pixel_ref_t = typename pixel_proxy<typename SrcView::value_type>::type;
-
1393  using dst_pixel_ref_t = typename pixel_proxy<typename DstView::value_type>::type;
-
1394  using y_coord_t = typename SrcView::y_coord_t;
-
1395 
-
1396  y_coord_t const height = src_view.height();
-
1397  for (y_coord_t y = 0; y < height; ++y)
-
1398  {
-
1399  typename SrcView::x_iterator it_src = src_view.row_begin(y);
-
1400  typename DstView::x_iterator it_dst = dst_view.row_begin(y);
-
1401  typename SrcView::x_iterator it_src_end = src_view.row_end(y);
-
1402  while (it_src != it_src_end)
-
1403  {
-
1404  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
-
1405  pixel_multiplies_scalar_t<src_pixel_ref_t, Scalar, PixelAccum>()(*it_src, scalar),
-
1406  *it_dst);
-
1407 
-
1408  ++it_src;
-
1409  ++it_dst;
-
1410  }
-
1411  }
-
1412 }
-
1413 
-
1414 
-
1417 enum class boundary_option
-
1418 {
-
1419  output_ignore,
-
1420  output_zero,
-
1421  extend_padded,
-
1422  extend_zero,
-
1423  extend_constant
-
1424 };
-
1425 
-
1426 namespace detail
-
1427 {
-
1428 
-
1429 template <typename SrcView, typename RltView>
-
1430 void extend_row_impl(
-
1431  SrcView const& src_view,
-
1432  RltView result_view,
-
1433  std::size_t extend_count,
-
1434  boundary_option option)
-
1435 {
-
1436  std::ptrdiff_t extend_count_ = static_cast<std::ptrdiff_t>(extend_count);
-
1437 
-
1438  if (option == boundary_option::extend_constant)
-
1439  {
-
1440  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
-
1441  {
-
1442  if(i >= extend_count_ && i < extend_count_ + src_view.height())
-
1443  {
-
1444  assign_pixels(
-
1445  src_view.row_begin(i - extend_count_),
-
1446  src_view.row_end(i - extend_count_),
-
1447  result_view.row_begin(i)
-
1448  );
-
1449  }
-
1450  else if(i < extend_count_)
-
1451  {
-
1452  assign_pixels(src_view.row_begin(0), src_view.row_end(0), result_view.row_begin(i));
+
1361  using dst_pixel_ref_t = typename pixel_proxy
+
1362  <
+
1363  typename std::iterator_traits<DstIterator>::value_type
+
1364  >::type;
+
1365  using kernel_type = typename std::iterator_traits<KernelIterator>::value_type;
+
1366 
+
1367  PixelAccum accum_zero;
+
1368  pixel_zeros_t<PixelAccum>()(accum_zero);
+
1369  while (src_begin != src_end)
+
1370  {
+
1371  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
+
1372  inner_product_k<Size>(
+
1373  src_begin,
+
1374  kernel_begin,
+
1375  accum_zero,
+
1376  pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
+
1377  pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_type, PixelAccum>()),
+
1378  *dst_begin);
+
1379 
+
1380  ++src_begin;
+
1381  ++dst_begin;
+
1382  }
+
1383  return dst_begin;
+
1384 }
+
1385 
+
1390 template <typename PixelAccum, typename SrcView, typename Scalar, typename DstView>
+
1391 inline
+
1392 void view_multiplies_scalar(SrcView const& src_view, Scalar const& scalar, DstView const& dst_view)
+
1393 {
+
1394  static_assert(std::is_scalar<Scalar>::value, "Scalar is not scalar");
+
1395  BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions());
+
1396  using src_pixel_ref_t = typename pixel_proxy<typename SrcView::value_type>::type;
+
1397  using dst_pixel_ref_t = typename pixel_proxy<typename DstView::value_type>::type;
+
1398  using y_coord_t = typename SrcView::y_coord_t;
+
1399 
+
1400  y_coord_t const height = src_view.height();
+
1401  for (y_coord_t y = 0; y < height; ++y)
+
1402  {
+
1403  typename SrcView::x_iterator it_src = src_view.row_begin(y);
+
1404  typename DstView::x_iterator it_dst = dst_view.row_begin(y);
+
1405  typename SrcView::x_iterator it_src_end = src_view.row_end(y);
+
1406  while (it_src != it_src_end)
+
1407  {
+
1408  pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
+
1409  pixel_multiplies_scalar_t<src_pixel_ref_t, Scalar, PixelAccum>()(*it_src, scalar),
+
1410  *it_dst);
+
1411 
+
1412  ++it_src;
+
1413  ++it_dst;
+
1414  }
+
1415  }
+
1416 }
+
1417 
+
1418 
+
1421 enum class boundary_option
+
1422 {
+
1423  output_ignore,
+
1424  output_zero,
+
1425  extend_padded,
+
1426  extend_zero,
+
1427  extend_constant
+
1428 };
+
1429 
+
1430 namespace detail
+
1431 {
+
1432 
+
1433 template <typename SrcView, typename RltView>
+
1434 void extend_row_impl(
+
1435  SrcView const& src_view,
+
1436  RltView result_view,
+
1437  std::size_t extend_count,
+
1438  boundary_option option)
+
1439 {
+
1440  std::ptrdiff_t extend_count_ = static_cast<std::ptrdiff_t>(extend_count);
+
1441 
+
1442  if (option == boundary_option::extend_constant)
+
1443  {
+
1444  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
+
1445  {
+
1446  if(i >= extend_count_ && i < extend_count_ + src_view.height())
+
1447  {
+
1448  assign_pixels(
+
1449  src_view.row_begin(i - extend_count_),
+
1450  src_view.row_end(i - extend_count_),
+
1451  result_view.row_begin(i)
+
1452  );
1453  }
-
1454  else
+
1454  else if(i < extend_count_)
1455  {
-
1456  assign_pixels(
-
1457  src_view.row_begin(src_view.height() - 1),
-
1458  src_view.row_end(src_view.height() - 1),
-
1459  result_view.row_begin(i)
-
1460  );
-
1461  }
-
1462 
-
1463  }
-
1464  }
-
1465  else if (option == boundary_option::extend_zero)
-
1466  {
-
1467  typename SrcView::value_type acc_zero;
-
1468  pixel_zeros_t<typename SrcView::value_type>()(acc_zero);
-
1469 
-
1470  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
-
1471  {
-
1472  if (i >= extend_count_ && i < extend_count_ + src_view.height())
-
1473  {
-
1474  assign_pixels(
-
1475  src_view.row_begin(i - extend_count_),
-
1476  src_view.row_end(i - extend_count_),
-
1477  result_view.row_begin(i)
-
1478  );
-
1479  }
-
1480  else
-
1481  {
-
1482  std::fill_n(result_view.row_begin(i), result_view.width(), acc_zero);
+
1456  assign_pixels(src_view.row_begin(0), src_view.row_end(0), result_view.row_begin(i));
+
1457  }
+
1458  else
+
1459  {
+
1460  assign_pixels(
+
1461  src_view.row_begin(src_view.height() - 1),
+
1462  src_view.row_end(src_view.height() - 1),
+
1463  result_view.row_begin(i)
+
1464  );
+
1465  }
+
1466 
+
1467  }
+
1468  }
+
1469  else if (option == boundary_option::extend_zero)
+
1470  {
+
1471  typename SrcView::value_type acc_zero;
+
1472  pixel_zeros_t<typename SrcView::value_type>()(acc_zero);
+
1473 
+
1474  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
+
1475  {
+
1476  if (i >= extend_count_ && i < extend_count_ + src_view.height())
+
1477  {
+
1478  assign_pixels(
+
1479  src_view.row_begin(i - extend_count_),
+
1480  src_view.row_end(i - extend_count_),
+
1481  result_view.row_begin(i)
+
1482  );
1483  }
-
1484  }
-
1485  }
-
1486  else if (option == boundary_option::extend_padded)
-
1487  {
-
1488  auto original_view = subimage_view(
-
1489  src_view,
-
1490  0,
-
1491  -extend_count,
-
1492  src_view.width(),
-
1493  src_view.height() + (2 * extend_count)
-
1494  );
-
1495  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
-
1496  {
-
1497  assign_pixels(
-
1498  original_view.row_begin(i),
-
1499  original_view.row_end(i),
-
1500  result_view.row_begin(i)
-
1501  );
-
1502  }
-
1503  }
-
1504  else
-
1505  {
-
1506  BOOST_ASSERT_MSG(false, "Invalid boundary option");
+
1484  else
+
1485  {
+
1486  std::fill_n(result_view.row_begin(i), result_view.width(), acc_zero);
+
1487  }
+
1488  }
+
1489  }
+
1490  else if (option == boundary_option::extend_padded)
+
1491  {
+
1492  auto original_view = subimage_view(
+
1493  src_view,
+
1494  0,
+
1495  -extend_count,
+
1496  src_view.width(),
+
1497  src_view.height() + (2 * extend_count)
+
1498  );
+
1499  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
+
1500  {
+
1501  assign_pixels(
+
1502  original_view.row_begin(i),
+
1503  original_view.row_end(i),
+
1504  result_view.row_begin(i)
+
1505  );
+
1506  }
1507  }
-
1508 }
-
1509 
-
1510 } //namespace detail
-
1511 
-
1512 
-
1519 template <typename SrcView>
-
1520 auto extend_row(
-
1521  SrcView const& src_view,
-
1522  std::size_t extend_count,
-
1523  boundary_option option
-
1524 ) -> typename gil::image<typename SrcView::value_type>
-
1525 {
-
1526  typename gil::image<typename SrcView::value_type>
-
1527  result_img(src_view.width(), src_view.height() + (2 * extend_count));
-
1528 
-
1529  auto result_view = view(result_img);
-
1530  detail::extend_row_impl(src_view, result_view, extend_count, option);
-
1531  return result_img;
-
1532 }
-
1533 
-
1534 
-
1541 template <typename SrcView>
-
1542 auto extend_col(
-
1543  SrcView const& src_view,
-
1544  std::size_t extend_count,
-
1545  boundary_option option
-
1546 ) -> typename gil::image<typename SrcView::value_type>
-
1547 {
-
1548  auto src_view_rotate = rotated90cw_view(src_view);
-
1549 
-
1550  typename gil::image<typename SrcView::value_type>
-
1551  result_img(src_view.width() + (2 * extend_count), src_view.height());
-
1552 
-
1553  auto result_view = rotated90cw_view(view(result_img));
-
1554  detail::extend_row_impl(src_view_rotate, result_view, extend_count, option);
-
1555  return result_img;
-
1556 }
-
1557 
-
1564 template <typename SrcView>
-
1565 auto extend_boundary(
-
1566  SrcView const& src_view,
-
1567  std::size_t extend_count,
-
1568  boundary_option option
-
1569 ) -> typename gil::image<typename SrcView::value_type>
-
1570 {
-
1571  if (option == boundary_option::extend_padded)
-
1572  {
-
1573  typename gil::image<typename SrcView::value_type>
-
1574  result_img(src_view.width()+(2 * extend_count), src_view.height()+(2 * extend_count));
-
1575  typename gil::image<typename SrcView::value_type>::view_t result_view = view(result_img);
-
1576 
-
1577  auto original_view = subimage_view(
-
1578  src_view,
-
1579  -extend_count,
-
1580  -extend_count,
-
1581  src_view.width() + (2 * extend_count),
-
1582  src_view.height() + (2 * extend_count)
-
1583  );
-
1584 
-
1585  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
-
1586  {
-
1587  assign_pixels(
-
1588  original_view.row_begin(i),
-
1589  original_view.row_end(i),
-
1590  result_view.row_begin(i)
-
1591  );
-
1592  }
-
1593 
-
1594  return result_img;
-
1595  }
-
1596 
-
1597  auto auxilary_img = extend_col(src_view, extend_count, option);
-
1598  return extend_row(view(auxilary_img), extend_count, option);
-
1599 }
+
1508  else
+
1509  {
+
1510  BOOST_ASSERT_MSG(false, "Invalid boundary option");
+
1511  }
+
1512 }
+
1513 
+
1514 } //namespace detail
+
1515 
+
1516 
+
1523 template <typename SrcView>
+
1524 auto extend_row(
+
1525  SrcView const& src_view,
+
1526  std::size_t extend_count,
+
1527  boundary_option option
+
1528 ) -> typename gil::image<typename SrcView::value_type>
+
1529 {
+
1530  typename gil::image<typename SrcView::value_type>
+
1531  result_img(src_view.width(), src_view.height() + (2 * extend_count));
+
1532 
+
1533  auto result_view = view(result_img);
+
1534  detail::extend_row_impl(src_view, result_view, extend_count, option);
+
1535  return result_img;
+
1536 }
+
1537 
+
1538 
+
1545 template <typename SrcView>
+
1546 auto extend_col(
+
1547  SrcView const& src_view,
+
1548  std::size_t extend_count,
+
1549  boundary_option option
+
1550 ) -> typename gil::image<typename SrcView::value_type>
+
1551 {
+
1552  auto src_view_rotate = rotated90cw_view(src_view);
+
1553 
+
1554  typename gil::image<typename SrcView::value_type>
+
1555  result_img(src_view.width() + (2 * extend_count), src_view.height());
+
1556 
+
1557  auto result_view = rotated90cw_view(view(result_img));
+
1558  detail::extend_row_impl(src_view_rotate, result_view, extend_count, option);
+
1559  return result_img;
+
1560 }
+
1561 
+
1568 template <typename SrcView>
+
1569 auto extend_boundary(
+
1570  SrcView const& src_view,
+
1571  std::size_t extend_count,
+
1572  boundary_option option
+
1573 ) -> typename gil::image<typename SrcView::value_type>
+
1574 {
+
1575  if (option == boundary_option::extend_padded)
+
1576  {
+
1577  typename gil::image<typename SrcView::value_type>
+
1578  result_img(src_view.width()+(2 * extend_count), src_view.height()+(2 * extend_count));
+
1579  typename gil::image<typename SrcView::value_type>::view_t result_view = view(result_img);
+
1580 
+
1581  auto original_view = subimage_view(
+
1582  src_view,
+
1583  -extend_count,
+
1584  -extend_count,
+
1585  src_view.width() + (2 * extend_count),
+
1586  src_view.height() + (2 * extend_count)
+
1587  );
+
1588 
+
1589  for (std::ptrdiff_t i = 0; i < result_view.height(); i++)
+
1590  {
+
1591  assign_pixels(
+
1592  original_view.row_begin(i),
+
1593  original_view.row_end(i),
+
1594  result_view.row_begin(i)
+
1595  );
+
1596  }
+
1597 
+
1598  return result_img;
+
1599  }
1600 
-
1601 } } // namespace boost::gil
-
1602 
-
1603 #endif
+
1601  auto auxilary_img = extend_col(src_view, extend_count, option);
+
1602  return extend_row(view(auxilary_img), extend_count, option);
+
1603 }
+
1604 
+
1605 } } // namespace boost::gil
+
1606 
+
1607 #endif
+
BOOST_FORCEINLINE auto copy(boost::gil::planar_pixel_iterator< IC1, CS > first, boost::gil::planar_pixel_iterator< IC1, CS > last, boost::gil::planar_pixel_iterator< IC2, CS > dst) -> boost::gil::planar_pixel_iterator< IC2, CS >
Copy when both src and dst are planar pointers is copy for each channel.
Definition: algorithm.hpp:178
+
BOOST_FORCEINLINE auto copy1(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, boost::gil::iterator_from_2d< OL > dst) -> boost::gil::iterator_from_2d< OL >
std::copy(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:281
MEMORY-BASED STEP ITERATOR.
Definition: algorithm.hpp:42
-
Definition: algorithm.hpp:189
-
BOOST_FORCEINLINE void copy_and_convert_pixels(const View1 &src, const View2 &dst)
Definition: algorithm.hpp:341
-
BOOST_FORCEINLINE void fill_pixels(View const &view, Value const &value)
std::fill for image views
Definition: algorithm.hpp:416
-
Reference proxy associated with a type that has a "reference" member type alias.
Definition: algorithm.hpp:1193
-
BOOST_FORCEINLINE bool equal_pixels(const View1 &v1, const View2 &v2)
std::equal for image views
Definition: algorithm.hpp:1105
+
Definition: algorithm.hpp:191
+
BOOST_FORCEINLINE void copy_and_convert_pixels(const View1 &src, const View2 &dst)
Definition: algorithm.hpp:345
+
BOOST_FORCEINLINE void fill_pixels(View const &view, Value const &value)
std::fill for image views
Definition: algorithm.hpp:420
+
Reference proxy associated with a type that has a "reference" member type alias.
Definition: algorithm.hpp:1197
+
BOOST_FORCEINLINE bool equal_pixels(const View1 &v1, const View2 &v2)
std::equal for image views
Definition: algorithm.hpp:1109
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept,...
Definition: metafunctions.hpp:24
A generic binary operation on views.
Definition: algorithm.hpp:87
-
void generate_pixels(View const &view, F fun)
std::generate for image views
Definition: algorithm.hpp:918
-
void uninitialized_copy_pixels(View1 const &view1, View2 const &view2)
std::uninitialized_copy for image views. Does not support planar heterogeneous views....
Definition: algorithm.hpp:819
+
void generate_pixels(View const &view, F fun)
std::generate for image views
Definition: algorithm.hpp:922
+
void uninitialized_copy_pixels(View1 const &view1, View2 const &view2)
std::uninitialized_copy for image views. Does not support planar heterogeneous views....
Definition: algorithm.hpp:823
Provides 1D random-access navigation to the pixels of the image. Models: PixelIteratorConcept,...
Definition: iterator_from_2d.hpp:42
-
void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
std::fill(I,I,V) with I being a iterator_from_2d
Definition: algorithm.hpp:365
-
BOOST_FORCEINLINE F transform_pixels(const View1 &src1, const View2 &src2, const View3 &dst, F fun)
transform_pixels with two sources
Definition: algorithm.hpp:1137
+
auto rotated90cw_view(View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
Definition: image_view_factory.hpp:244
+
void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
std::fill(I,I,V) with I being a iterator_from_2d
Definition: algorithm.hpp:369
+
BOOST_FORCEINLINE F transform_pixels(const View1 &src1, const View2 &src2, const View3 &dst, F fun)
transform_pixels with two sources
Definition: algorithm.hpp:1141
Returns whether two views are compatible.
Definition: concepts/image_view.hpp:522
-
BOOST_FORCEINLINE F transform_pixel_positions(const View1 &src1, const View2 &src2, const View3 &dst, F fun)
transform_pixel_positions with two sources
Definition: algorithm.hpp:1170
-
BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
std::copy for image views
Definition: algorithm.hpp:288
-
BOOST_FORCEINLINE boost::gil::iterator_from_2d< OL > copy1(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, boost::gil::iterator_from_2d< OL > dst)
std::copy(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:279
-
const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
Returns the non-constant-pixel view of an image.
Definition: image.hpp:549
-
BOOST_FORCEINLINE void destruct_pixels(View const &view)
Invokes the in-place destructor on every pixel of the view.
Definition: algorithm.hpp:514
-
F for_each_pixel_position(View const &view, F fun)
Definition: algorithm.hpp:895
-
void uninitialized_fill_pixels(const View &view, const Value &val)
std::uninitialized_fill for image views. Does not support planar heterogeneous views....
Definition: algorithm.hpp:583
-
void default_construct_pixels(View const &view)
Invokes the in-place default constructor on every pixel of the (uninitialized) view....
Definition: algorithm.hpp:720
-
BOOST_FORCEINLINE boost::gil::planar_pixel_iterator< IC2, CS > copy(boost::gil::planar_pixel_iterator< IC1, CS > first, boost::gil::planar_pixel_iterator< IC1, CS > last, boost::gil::planar_pixel_iterator< IC2, CS > dst)
Copy when both src and dst are planar pointers is copy for each channel.
Definition: algorithm.hpp:177
-
dynamic_xy_step_transposed_type< View >::type rotated90cw_view(const View &src)
Definition: image_view_factory.hpp:221
-
struct to do std::fill
Definition: algorithm.hpp:387
-
F for_each_pixel(View const &view, F fun)
Definition: algorithm.hpp:874
-
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1083
+
BOOST_FORCEINLINE F transform_pixel_positions(const View1 &src1, const View2 &src2, const View3 &dst, F fun)
transform_pixel_positions with two sources
Definition: algorithm.hpp:1174
+
BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
std::copy for image views
Definition: algorithm.hpp:292
+
BOOST_FORCEINLINE void destruct_pixels(View const &view)
Invokes the in-place destructor on every pixel of the view.
Definition: algorithm.hpp:518
+
F for_each_pixel_position(View const &view, F fun)
Definition: algorithm.hpp:899
+
void uninitialized_fill_pixels(const View &view, const Value &val)
std::uninitialized_fill for image views. Does not support planar heterogeneous views....
Definition: algorithm.hpp:587
+
void default_construct_pixels(View const &view)
Invokes the in-place default constructor on every pixel of the (uninitialized) view....
Definition: algorithm.hpp:724
+
struct to do std::fill
Definition: algorithm.hpp:391
+
F for_each_pixel(View const &view, F fun)
Definition: algorithm.hpp:878
+
auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
Returns the non-constant-pixel view of an image.
Definition: image.hpp:565
+
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1087
Memory-based pixel locator. Models: PixelLocatorConcept,HasDynamicXStepTypeConcept,...
Definition: algorithm.hpp:44
An iterator over planar pixels. Models HomogeneousColorBaseConcept, PixelIteratorConcept,...
Definition: algorithm.hpp:40
-
View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
Definition: image_view_factory.hpp:254
+
View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
Definition: image_view_factory.hpp:283
diff --git a/html/reference/annotated.html b/html/reference/annotated.html index fa5c37f32..4c3c11b27 100644 --- a/html/reference/annotated.html +++ b/html/reference/annotated.html @@ -45,7 +45,7 @@ $(function() {
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 12345]
- + diff --git a/html/reference/any__image_8hpp_source.html b/html/reference/any__image_8hpp_source.html index d5cad685c..717c7b7b5 100644 --- a/html/reference/any__image_8hpp_source.html +++ b/html/reference/any__image_8hpp_source.html @@ -71,7 +71,7 @@ $(function() {
22 #pragma warning(disable:4512) //assignment operator could not be generated
23 #endif
24 
-
25 namespace boost { namespace gil {
+
25 namespace boost { namespace gil {
26 
27 namespace detail {
28 
@@ -157,7 +157,7 @@ $(function() {
118  return *this;
119  }
120 
-
121  void recreate(const point_t& dims, unsigned alignment=1)
+
121  void recreate(point_t const& dims, unsigned alignment=1)
122  {
123  variant2::visit(detail::recreate_image_fnobj(dims, alignment), *this);
124  }
@@ -208,6 +208,7 @@ $(function() {
178 #endif
BOOST_FORCEINLINE auto const_view(any_image< Images... > const &img) -> typename any_image< Images... >::const_view_t
Returns the constant-pixel view of any image. The returned view is any view.
Definition: any_image.hpp:165
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Returns the number of channels of a pixel-based GIL construct.
Definition: locator.hpp:38
Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
Definition: any_image_view.hpp:75
diff --git a/html/reference/any__image__view_8hpp_source.html b/html/reference/any__image__view_8hpp_source.html index 30ec1b2b2..1ebbffb90 100644 --- a/html/reference/any__image__view_8hpp_source.html +++ b/html/reference/any__image__view_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
17 
18 #include <boost/variant2/variant.hpp>
19 
-
20 namespace boost { namespace gil {
+
20 namespace boost { namespace gil {
21 
22 template <typename View>
23 struct dynamic_xy_step_transposed_type;
@@ -120,23 +120,23 @@ $(function() {
85 
86  using parent_t::parent_t;
87 
-
88  any_image_view& operator=(any_image_view const& view)
+
88  any_image_view& operator=(any_image_view const& view)
89  {
-
90  parent_t::operator=((parent_t const&)view);
+
90  parent_t::operator=((parent_t const&)view);
91  return *this;
92  }
93 
94  template <typename View>
-
95  any_image_view& operator=(View const& view)
+
95  any_image_view& operator=(View const& view)
96  {
-
97  parent_t::operator=(view);
+
97  parent_t::operator=(view);
98  return *this;
99  }
100 
101  template <typename ...OtherViews>
- +
103  {
-
104  parent_t::operator=((variant2::variant<OtherViews...> const&)view);
+
104  parent_t::operator=((variant2::variant<OtherViews...> const&)view);
105  return *this;
106  }
107 
@@ -215,12 +215,13 @@ $(function() {
184 
185 #endif
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Base template for types that model HasDynamicXStepTypeConcept.
Definition: dynamic_step.hpp:17
-
const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
Returns the non-constant-pixel view of an image.
Definition: image.hpp:549
Returns an integral constant type specifying the number of elements in a color base.
Definition: color_base_algorithm.hpp:42
Returns the number of channels of a pixel-based GIL construct.
Definition: locator.hpp:38
Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
Definition: any_image_view.hpp:75
+
auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
Returns the non-constant-pixel view of an image.
Definition: image.hpp:565
Base template for types that model HasDynamicYStepTypeConcept.
Definition: dynamic_step.hpp:21
diff --git a/html/reference/apply__operation_8hpp_source.html b/html/reference/apply__operation_8hpp_source.html index 857d0bcfd..dc983c24f 100644 --- a/html/reference/apply__operation_8hpp_source.html +++ b/html/reference/apply__operation_8hpp_source.html @@ -59,7 +59,7 @@ $(function() {
10 
11 #include <boost/variant2/variant.hpp>
12 
-
13 namespace boost { namespace gil {
+
13 namespace boost { namespace gil {
14 
17 template <typename Variant1, typename Visitor>
18 [[deprecated("Use variant2::visit instead.")]]
@@ -87,6 +87,7 @@ $(function() {
42 
43 #endif
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
BOOST_FORCEINLINE auto apply_operation(Variant1 &&arg1, Variant2 &&arg2, Visitor &&op)
Applies the visitor op to the variants.
Definition: apply_operation.hpp:33
diff --git a/html/reference/base_8hpp_source.html b/html/reference/base_8hpp_source.html index ba88b9464..187e500eb 100644 --- a/html/reference/base_8hpp_source.html +++ b/html/reference/base_8hpp_source.html @@ -71,7 +71,7 @@ $(function() {
22 #include <type_traits>
23 #include <vector>
24 
-
25 namespace boost { namespace gil {
+
25 namespace boost { namespace gil {
26 
27 struct format_tag {};
28 
@@ -93,8 +93,8 @@ $(function() {
44  , _dim ( 0, 0 )
45  {}
46 
-
47  image_read_settings_base( const point_t& top_left
-
48  , const point_t& dim
+
47  image_read_settings_base( point_t const& top_left
+
48  , point_t const& dim
49  )
50  : _top_left( top_left )
51  , _dim ( dim )
@@ -103,8 +103,8 @@ $(function() {
54 
55 public:
56 
-
57  void set( const point_t& top_left
-
58  , const point_t& dim
+
57  void set( point_t const& top_left
+
58  , point_t const& dim
59  )
60  {
61  _top_left = top_left;
@@ -152,6 +152,7 @@ $(function() {
108 
109 #endif
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Definition: base.hpp:78
diff --git a/html/reference/basic_8hpp_source.html b/html/reference/basic_8hpp_source.html index 48a2536b1..7a01429e0 100644 --- a/html/reference/basic_8hpp_source.html +++ b/html/reference/basic_8hpp_source.html @@ -77,7 +77,7 @@ $(function() {
28 #include <type_traits>
29 #include <utility> // std::swap
30 
-
31 namespace boost { namespace gil {
+
31 namespace boost { namespace gil {
32 
42 template <typename T>
@@ -171,7 +171,8 @@ $(function() {
Concept of swap operation requirement.
Definition: basic.hpp:118
Concept for type regularity requirement.
Definition: basic.hpp:141
-
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:529
+
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:583
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Concept of default construction requirement.
Definition: basic.hpp:43
Concept of copy assignment requirement.
Definition: basic.hpp:81
Concept of == and != comparability requirement.
Definition: basic.hpp:100
diff --git a/html/reference/bit__aligned__pixel__iterator_8hpp_source.html b/html/reference/bit__aligned__pixel__iterator_8hpp_source.html index 4ca54b5b1..44bf1f154 100644 --- a/html/reference/bit__aligned__pixel__iterator_8hpp_source.html +++ b/html/reference/bit__aligned__pixel__iterator_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
17 #include <functional>
18 #include <type_traits>
19 
-
20 namespace boost { namespace gil {
+
20 namespace boost { namespace gil {
21 
24 
28 
@@ -99,22 +99,22 @@ $(function() {
61  bit_aligned_pixel_iterator(reference* ref) : _bit_range(ref->bit_range()) {}
62  explicit bit_aligned_pixel_iterator(typename bit_range_t::byte_t* data, int bit_offset=0) : _bit_range(data,bit_offset) {}
63 
-
66  reference operator[](difference_type d) const { bit_aligned_pixel_iterator it=*this; it.advance(d); return *it; }
+
66  auto operator[](difference_type d) const -> reference { bit_aligned_pixel_iterator it=*this; it.advance(d); return *it; }
67 
-
68  reference operator->() const { return **this; }
-
69  const bit_range_t& bit_range() const { return _bit_range; }
-
70  bit_range_t& bit_range() { return _bit_range; }
+
68  auto operator->() const -> reference { return **this; }
+
69  auto bit_range() const -> bit_range_t const& { return _bit_range; }
+
70  auto bit_range() -> bit_range_t& { return _bit_range; }
71 private:
72  bit_range_t _bit_range;
73  static constexpr int bit_size = NonAlignedPixelReference::bit_size;
74 
75  friend class boost::iterator_core_access;
-
76  reference dereference() const { return NonAlignedPixelReference(_bit_range); }
+
76  auto dereference() const -> reference { return NonAlignedPixelReference(_bit_range); }
77  void increment() { ++_bit_range; }
78  void decrement() { --_bit_range; }
79  void advance(difference_type d) { _bit_range.bit_advance(d*bit_size); }
80 
-
81  difference_type distance_to(const bit_aligned_pixel_iterator& it) const { return _bit_range.bit_distance_to(it._bit_range) / bit_size; }
+
81  auto distance_to(bit_aligned_pixel_iterator const& it) const -> difference_type { return _bit_range.bit_distance_to(it._bit_range) / bit_size; }
82  bool equal(const bit_aligned_pixel_iterator& it) const { return _bit_range==it._bit_range; }
83 };
84 
@@ -154,76 +154,83 @@ $(function() {
122 {};
123 
124 template <typename NonAlignedPixelReference>
-
125 inline std::ptrdiff_t memunit_step(const bit_aligned_pixel_iterator<NonAlignedPixelReference>&) {
-
126  return NonAlignedPixelReference::bit_size;
-
127 }
-
128 
-
129 template <typename NonAlignedPixelReference>
-
130 inline std::ptrdiff_t memunit_distance(const bit_aligned_pixel_iterator<NonAlignedPixelReference>& p1, const bit_aligned_pixel_iterator<NonAlignedPixelReference>& p2) {
-
131  return (p2.bit_range().current_byte() - p1.bit_range().current_byte())*8 + p2.bit_range().bit_offset() - p1.bit_range().bit_offset();
-
132 }
-
133 
-
134 template <typename NonAlignedPixelReference>
-
135 inline void memunit_advance(bit_aligned_pixel_iterator<NonAlignedPixelReference>& p, std::ptrdiff_t diff) {
-
136  p.bit_range().bit_advance(diff);
-
137 }
-
138 
-
139 template <typename NonAlignedPixelReference>
-
140 inline bit_aligned_pixel_iterator<NonAlignedPixelReference> memunit_advanced(const bit_aligned_pixel_iterator<NonAlignedPixelReference>& p, std::ptrdiff_t diff) {
-
141  bit_aligned_pixel_iterator<NonAlignedPixelReference> ret=p;
-
142  memunit_advance(ret, diff);
-
143  return ret;
-
144 }
-
145 
-
146 template <typename NonAlignedPixelReference> inline
-
147 NonAlignedPixelReference memunit_advanced_ref(bit_aligned_pixel_iterator<NonAlignedPixelReference> it, std::ptrdiff_t diff) {
-
148  return *memunit_advanced(it,diff);
-
149 }
-
151 // HasDynamicXStepTypeConcept
-
153 
-
154 template <typename NonAlignedPixelReference>
-
155 struct dynamic_x_step_type<bit_aligned_pixel_iterator<NonAlignedPixelReference> > {
-
156  using type = memory_based_step_iterator<bit_aligned_pixel_iterator<NonAlignedPixelReference> >;
-
157 };
-
158 
-
160 // iterator_type_from_pixel
-
162 
-
163 template <typename B, typename C, typename L, bool M>
-
164 struct iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,false,false,false>
-
165 {
-
166  using type = bit_aligned_pixel_iterator<bit_aligned_pixel_reference<B,C,L,false>> ;
-
167 };
-
168 
-
169 template <typename B, typename C, typename L, bool M>
-
170 struct iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,false,false,true>
-
171 {
-
172  using type = bit_aligned_pixel_iterator<bit_aligned_pixel_reference<B,C,L,true>>;
-
173 };
-
174 
-
175 template <typename B, typename C, typename L, bool M, bool IsPlanar, bool IsStep, bool IsMutable>
-
176 struct iterator_type_from_pixel<bit_aligned_pixel_reference<B,C,L,M>,IsPlanar,IsStep,IsMutable>
-
177  : public iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,IsPlanar,IsStep,IsMutable> {};
-
178 
-
179 } } // namespace boost::gil
-
180 
-
181 namespace std {
-
182 
-
183 // It is important to provide an overload of uninitialized_copy for bit_aligned_pixel_iterator. The default STL implementation calls placement new,
-
184 // which is not defined for bit_aligned_pixel_iterator.
-
185 template <typename NonAlignedPixelReference>
- - - -
189  return std::copy(first,last,dst);
-
190 }
-
191 
-
192 } // namespace std
-
193 #endif
+
125 inline auto memunit_step(const bit_aligned_pixel_iterator<NonAlignedPixelReference>&) -> std::ptrdiff_t
+
126 {
+
127  return NonAlignedPixelReference::bit_size;
+
128 }
+
129 
+
130 template <typename NonAlignedPixelReference>
+
131 inline auto memunit_distance(bit_aligned_pixel_iterator<NonAlignedPixelReference> const& p1, bit_aligned_pixel_iterator<NonAlignedPixelReference> const& p2) -> std::ptrdiff_t
+
132 {
+
133  return (p2.bit_range().current_byte() - p1.bit_range().current_byte())*8 + p2.bit_range().bit_offset() - p1.bit_range().bit_offset();
+
134 }
+
135 
+
136 template <typename NonAlignedPixelReference>
+
137 inline void memunit_advance(bit_aligned_pixel_iterator<NonAlignedPixelReference>& p, std::ptrdiff_t diff) {
+
138  p.bit_range().bit_advance(diff);
+
139 }
+
140 
+
141 template <typename NonAlignedPixelReference>
+
142 inline auto memunit_advanced(bit_aligned_pixel_iterator<NonAlignedPixelReference> const& p, std::ptrdiff_t diff) -> bit_aligned_pixel_iterator<NonAlignedPixelReference> {
+
143  bit_aligned_pixel_iterator<NonAlignedPixelReference> ret=p;
+
144  memunit_advance(ret, diff);
+
145  return ret;
+
146 }
+
147 
+
148 template <typename NonAlignedPixelReference> inline
+
149 auto memunit_advanced_ref(bit_aligned_pixel_iterator<NonAlignedPixelReference> it, std::ptrdiff_t diff) -> NonAlignedPixelReference
+
150 {
+
151  return *memunit_advanced(it,diff);
+
152 }
+
154 // HasDynamicXStepTypeConcept
+
156 
+
157 template <typename NonAlignedPixelReference>
+
158 struct dynamic_x_step_type<bit_aligned_pixel_iterator<NonAlignedPixelReference> > {
+
159  using type = memory_based_step_iterator<bit_aligned_pixel_iterator<NonAlignedPixelReference> >;
+
160 };
+
161 
+
163 // iterator_type_from_pixel
+
165 
+
166 template <typename B, typename C, typename L, bool M>
+
167 struct iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,false,false,false>
+
168 {
+
169  using type = bit_aligned_pixel_iterator<bit_aligned_pixel_reference<B,C,L,false>> ;
+
170 };
+
171 
+
172 template <typename B, typename C, typename L, bool M>
+
173 struct iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,false,false,true>
+
174 {
+
175  using type = bit_aligned_pixel_iterator<bit_aligned_pixel_reference<B,C,L,true>>;
+
176 };
+
177 
+
178 template <typename B, typename C, typename L, bool M, bool IsPlanar, bool IsStep, bool IsMutable>
+
179 struct iterator_type_from_pixel<bit_aligned_pixel_reference<B,C,L,M>,IsPlanar,IsStep,IsMutable>
+
180  : public iterator_type_from_pixel<const bit_aligned_pixel_reference<B,C,L,M>,IsPlanar,IsStep,IsMutable> {};
+
181 
+
182 } } // namespace boost::gil
+
183 
+
184 namespace std {
+
185 
+
186 // It is important to provide an overload of uninitialized_copy for bit_aligned_pixel_iterator. The default STL implementation calls placement new,
+
187 // which is not defined for bit_aligned_pixel_iterator.
+
188 template <typename NonAlignedPixelReference>
+ + + + +
193 {
+
194  return std::copy(first,last,dst);
+
195 }
+
196 
+
197 } // namespace std
+
198 
+
199 #endif
BOOST_FORCEINLINE auto copy(boost::gil::pixel< T, CS > *first, boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > *
Copy when both src and dst are interleaved and of the same type can be just memmove.
Definition: algorithm.hpp:145
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
+
auto operator[](difference_type d) const -> reference
Definition: bit_aligned_pixel_iterator.hpp:66
An iterator over non-byte-aligned pixels. Models PixelIteratorConcept, PixelBasedConcept,...
Definition: bit_aligned_pixel_iterator.hpp:37
-
reference operator[](difference_type d) const
Definition: bit_aligned_pixel_iterator.hpp:66
-
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1083
+
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1087
diff --git a/html/reference/bit__aligned__pixel__reference_8hpp_source.html b/html/reference/bit__aligned__pixel__reference_8hpp_source.html index f16853572..45c82c74b 100644 --- a/html/reference/bit__aligned__pixel__reference_8hpp_source.html +++ b/html/reference/bit__aligned__pixel__reference_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
19 #include <functional>
20 #include <type_traits>
21 
-
22 namespace boost { namespace gil {
+
22 namespace boost { namespace gil {
23 
26 
28 // bit_range
@@ -94,18 +94,18 @@ $(function() {
49  BOOST_ASSERT(bit_offset >= 0 && bit_offset < 8);
50  }
51 
-
52  bit_range(const bit_range& br) : _current_byte(br._current_byte), _bit_offset(br._bit_offset) {}
+
52  bit_range(bit_range const& br) : _current_byte(br._current_byte), _bit_offset(br._bit_offset) {}
53  template <bool M> bit_range(const bit_range<RangeSize,M>& br) : _current_byte(br._current_byte), _bit_offset(br._bit_offset) {}
54 
-
55  bit_range& operator=(const bit_range& br) { _current_byte = br._current_byte; _bit_offset=br._bit_offset; return *this; }
-
56  bool operator==(const bit_range& br) const { return _current_byte==br._current_byte && _bit_offset==br._bit_offset; }
+
55  auto operator=(bit_range const& br) -> bit_range& { _current_byte = br._current_byte; _bit_offset=br._bit_offset; return *this; }
+
56  bool operator==(bit_range const& br) const { return _current_byte==br._current_byte && _bit_offset==br._bit_offset; }
57 
-
58  bit_range& operator++() {
+
58  auto operator++() -> bit_range& {
59  _current_byte += (_bit_offset+RangeSize) / 8;
60  _bit_offset = (_bit_offset+RangeSize) % 8;
61  return *this;
62  }
-
63  bit_range& operator--() { bit_advance(-RangeSize); return *this; }
+
63  auto operator--() -> bit_range& { bit_advance(-RangeSize); return *this; }
64 
65  void bit_advance(difference_type num_bits) {
66  int new_offset = int(_bit_offset+num_bits);
@@ -116,288 +116,294 @@ $(function() {
71  --_current_byte;
72  }
73  }
-
74  difference_type bit_distance_to(const bit_range& b) const {
-
75  return (b.current_byte() - current_byte())*8 + b.bit_offset()-bit_offset();
-
76  }
-
77  byte_t* current_byte() const { return _current_byte; }
-
78  int bit_offset() const { return _bit_offset; }
-
79 };
-
80 
-
114 template <typename BitField, typename ChannelBitSizes, typename Layout, bool IsMutable>
-
115 struct bit_aligned_pixel_reference
-
116 {
-
117  static constexpr int bit_size =
-
118  mp11::mp_fold
-
119  <
-
120  ChannelBitSizes,
-
121  std::integral_constant<int, 0>,
-
122  mp11::mp_plus
-
123  >::value;
-
124 
-
125  using bit_range_t = boost::gil::bit_range<bit_size,IsMutable>;
-
126  using bitfield_t = BitField;
-
127  using data_ptr_t = mp11::mp_if_c<IsMutable, unsigned char*, const unsigned char*>;
-
128 
-
129  using layout_t = Layout;
+
74 
+
75  auto bit_distance_to(bit_range const& b) const -> difference_type
+
76  {
+
77  return (b.current_byte() - current_byte())*8 + b.bit_offset()-bit_offset();
+
78  }
+
79  auto current_byte() const -> byte_t* { return _current_byte; }
+
80  auto bit_offset() const -> int { return _bit_offset; }
+
81 };
+
82 
+
116 template <typename BitField, typename ChannelBitSizes, typename Layout, bool IsMutable>
+
117 struct bit_aligned_pixel_reference
+
118 {
+
119  static constexpr int bit_size =
+
120  mp11::mp_fold
+
121  <
+
122  ChannelBitSizes,
+
123  std::integral_constant<int, 0>,
+
124  mp11::mp_plus
+
125  >::value;
+
126 
+
127  using bit_range_t = boost::gil::bit_range<bit_size,IsMutable>;
+
128  using bitfield_t = BitField;
+
129  using data_ptr_t = mp11::mp_if_c<IsMutable, unsigned char*, const unsigned char*>;
130 
- -
132  using reference = const bit_aligned_pixel_reference<BitField, ChannelBitSizes, Layout, IsMutable>;
-
133  using const_reference = bit_aligned_pixel_reference<BitField,ChannelBitSizes,Layout,false> const;
-
134 
-
135  static constexpr bool is_mutable = IsMutable;
+
131  using layout_t = Layout;
+
132 
+ +
134  using reference = const bit_aligned_pixel_reference<BitField, ChannelBitSizes, Layout, IsMutable>;
+
135  using const_reference = bit_aligned_pixel_reference<BitField,ChannelBitSizes,Layout,false> const;
136 
-
137  bit_aligned_pixel_reference(){}
-
138  bit_aligned_pixel_reference(data_ptr_t data_ptr, int bit_offset) : _bit_range(data_ptr, bit_offset) {}
-
139  explicit bit_aligned_pixel_reference(const bit_range_t& bit_range) : _bit_range(bit_range) {}
-
140  template <bool IsMutable2> bit_aligned_pixel_reference(const bit_aligned_pixel_reference<BitField,ChannelBitSizes,Layout,IsMutable2>& p) : _bit_range(p._bit_range) {}
-
141 
-
142  // Grayscale references can be constructed from the channel reference
-
143  explicit bit_aligned_pixel_reference(typename kth_element_type<bit_aligned_pixel_reference,0>::type const channel0)
-
144  : _bit_range(static_cast<data_ptr_t>(&channel0), channel0.first_bit())
-
145  {
-
146  static_assert(num_channels<bit_aligned_pixel_reference>::value == 1, "");
-
147  }
-
148 
-
149  // Construct from another compatible pixel type
-
150  bit_aligned_pixel_reference(bit_aligned_pixel_reference const& p)
-
151  : _bit_range(p._bit_range) {}
+
137  static constexpr bool is_mutable = IsMutable;
+
138 
+
139  bit_aligned_pixel_reference(){}
+
140  bit_aligned_pixel_reference(data_ptr_t data_ptr, int bit_offset) : _bit_range(data_ptr, bit_offset) {}
+
141  explicit bit_aligned_pixel_reference(bit_range_t const& bit_range) : _bit_range(bit_range) {}
+
142 
+
143  template <bool IsMutable2>
+
144  bit_aligned_pixel_reference(bit_aligned_pixel_reference<BitField,ChannelBitSizes,Layout,IsMutable2> const& p) : _bit_range(p._bit_range) {}
+
145 
+
146  // Grayscale references can be constructed from the channel reference
+
147  explicit bit_aligned_pixel_reference(typename kth_element_type<bit_aligned_pixel_reference,0>::type const channel0)
+
148  : _bit_range(static_cast<data_ptr_t>(&channel0), channel0.first_bit())
+
149  {
+
150  static_assert(num_channels<bit_aligned_pixel_reference>::value == 1, "");
+
151  }
152 
-
153  // TODO: Why p by non-const reference?
-
154  template <typename BF, typename CR>
-
155  bit_aligned_pixel_reference(packed_pixel<BF, CR, Layout>& p)
-
156  : _bit_range(static_cast<data_ptr_t>(&gil::at_c<0>(p)), gil::at_c<0>(p).first_bit())
-
157  {
-
158  check_compatible<packed_pixel<BF, CR, Layout>>();
-
159  }
-
160 
-
161  auto operator=(bit_aligned_pixel_reference const& p) const
-
162  -> bit_aligned_pixel_reference const&
-
163  {
-
164  static_copy(p, *this);
-
165  return *this;
-
166  }
-
167 
-
168  template <typename P>
-
169  auto operator=(P const& p) const -> bit_aligned_pixel_reference const&
-
170  {
-
171  assign(p, is_pixel<P>());
-
172  return *this;
-
173  }
-
174 
-
175  template <typename P>
-
176  bool operator==(P const& p) const
-
177  {
-
178  return equal(p, is_pixel<P>());
-
179  }
-
180 
-
181  template <typename P>
-
182  bool operator!=(P const& p) const { return !(*this==p); }
-
183 
-
184  auto operator->() const -> bit_aligned_pixel_reference const* { return this; }
-
185 
-
186  bit_range_t const& bit_range() const { return _bit_range; }
+
153  // Construct from another compatible pixel type
+
154  bit_aligned_pixel_reference(bit_aligned_pixel_reference const& p)
+
155  : _bit_range(p._bit_range) {}
+
156 
+
157  // TODO: Why p by non-const reference?
+
158  template <typename BF, typename CR>
+
159  bit_aligned_pixel_reference(packed_pixel<BF, CR, Layout>& p)
+
160  : _bit_range(static_cast<data_ptr_t>(&gil::at_c<0>(p)), gil::at_c<0>(p).first_bit())
+
161  {
+
162  check_compatible<packed_pixel<BF, CR, Layout>>();
+
163  }
+
164 
+
165  auto operator=(bit_aligned_pixel_reference const& p) const
+
166  -> bit_aligned_pixel_reference const&
+
167  {
+
168  static_copy(p, *this);
+
169  return *this;
+
170  }
+
171 
+
172  template <typename P>
+
173  auto operator=(P const& p) const -> bit_aligned_pixel_reference const&
+
174  {
+
175  assign(p, is_pixel<P>());
+
176  return *this;
+
177  }
+
178 
+
179  template <typename P>
+
180  bool operator==(P const& p) const
+
181  {
+
182  return equal(p, is_pixel<P>());
+
183  }
+
184 
+
185  template <typename P>
+
186  bool operator!=(P const& p) const { return !(*this==p); }
187 
-
188 private:
-
189  mutable bit_range_t _bit_range;
-
190  template <typename B, typename C, typename L, bool M> friend struct bit_aligned_pixel_reference;
+
188  auto operator->() const -> bit_aligned_pixel_reference const* { return this; }
+
189 
+
190  auto bit_range() const -> bit_range_t const& { return _bit_range; }
191 
-
192  template <typename Pixel> static void check_compatible() { gil_function_requires<PixelsCompatibleConcept<Pixel,bit_aligned_pixel_reference> >(); }
-
193 
-
194  template <typename Pixel>
-
195  void assign(Pixel const& p, std::true_type) const
-
196  {
-
197  check_compatible<Pixel>();
-
198  static_copy(p, *this);
-
199  }
-
200 
-
201  template <typename Pixel>
-
202  bool equal(Pixel const& p, std::true_type) const
-
203  {
-
204  check_compatible<Pixel>();
-
205  return static_equal(*this, p);
-
206  }
-
207 
-
208 private:
-
209  static void check_gray()
-
210  {
-
211  static_assert(std::is_same<typename Layout::color_space_t, gray_t>::value, "");
-
212  }
-
213 
-
214  template <typename Channel>
-
215  void assign(Channel const& channel, std::false_type) const
-
216  {
-
217  check_gray();
-
218  gil::at_c<0>(*this) = channel;
-
219  }
-
220 
-
221  template <typename Channel>
-
222  bool equal (Channel const& channel, std::false_type) const
-
223  {
-
224  check_gray();
-
225  return gil::at_c<0>(*this) == channel;
-
226  }
-
227 };
-
228 
-
230 // ColorBasedConcept
-
232 
-
233 template <typename BitField, typename ChannelBitSizes, typename L, bool IsMutable, int K>
-
234 struct kth_element_type
-
235 <
-
236  bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>,
-
237  K
-
238 >
-
239 {
-
240  using type = packed_dynamic_channel_reference
-
241  <
-
242  BitField,
-
243  mp11::mp_at_c<ChannelBitSizes, K>::value,
-
244  IsMutable
-
245  > const;
-
246 };
-
247 
-
248 template <typename B, typename C, typename L, bool M, int K>
-
249 struct kth_element_reference_type<bit_aligned_pixel_reference<B,C,L,M>, K>
-
250  : public kth_element_type<bit_aligned_pixel_reference<B,C,L,M>, K> {};
-
251 
-
252 template <typename B, typename C, typename L, bool M, int K>
-
253 struct kth_element_const_reference_type<bit_aligned_pixel_reference<B,C,L,M>, K>
-
254  : public kth_element_type<bit_aligned_pixel_reference<B,C,L,M>, K> {};
-
255 
-
256 namespace detail {
-
257 
-
258 // returns sum of IntegralVector[0] ... IntegralVector[K-1]
-
259 template <typename IntegralVector, int K>
-
260 struct sum_k
-
261  : mp11::mp_plus
-
262  <
-
263  sum_k<IntegralVector, K - 1>,
-
264  typename mp11::mp_at_c<IntegralVector, K - 1>::type
-
265  >
-
266 {};
-
267 
-
268 template <typename IntegralVector>
-
269 struct sum_k<IntegralVector, 0> : std::integral_constant<int, 0> {};
-
270 
-
271 } // namespace detail
+
192 private:
+
193  mutable bit_range_t _bit_range;
+
194  template <typename B, typename C, typename L, bool M>
+
195  friend struct bit_aligned_pixel_reference;
+
196 
+
197  template <typename Pixel> static void check_compatible() { gil_function_requires<PixelsCompatibleConcept<Pixel,bit_aligned_pixel_reference> >(); }
+
198 
+
199  template <typename Pixel>
+
200  void assign(Pixel const& p, std::true_type) const
+
201  {
+
202  check_compatible<Pixel>();
+
203  static_copy(p, *this);
+
204  }
+
205 
+
206  template <typename Pixel>
+
207  bool equal(Pixel const& p, std::true_type) const
+
208  {
+
209  check_compatible<Pixel>();
+
210  return static_equal(*this, p);
+
211  }
+
212 
+
213 private:
+
214  static void check_gray()
+
215  {
+
216  static_assert(std::is_same<typename Layout::color_space_t, gray_t>::value, "");
+
217  }
+
218 
+
219  template <typename Channel>
+
220  void assign(Channel const& channel, std::false_type) const
+
221  {
+
222  check_gray();
+
223  gil::at_c<0>(*this) = channel;
+
224  }
+
225 
+
226  template <typename Channel>
+
227  bool equal (Channel const& channel, std::false_type) const
+
228  {
+
229  check_gray();
+
230  return gil::at_c<0>(*this) == channel;
+
231  }
+
232 };
+
233 
+
235 // ColorBasedConcept
+
237 
+
238 template <typename BitField, typename ChannelBitSizes, typename L, bool IsMutable, int K>
+
239 struct kth_element_type
+
240 <
+
241  bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>,
+
242  K
+
243 >
+
244 {
+
245  using type = packed_dynamic_channel_reference
+
246  <
+
247  BitField,
+
248  mp11::mp_at_c<ChannelBitSizes, K>::value,
+
249  IsMutable
+
250  > const;
+
251 };
+
252 
+
253 template <typename B, typename C, typename L, bool M, int K>
+
254 struct kth_element_reference_type<bit_aligned_pixel_reference<B,C,L,M>, K>
+
255  : public kth_element_type<bit_aligned_pixel_reference<B,C,L,M>, K> {};
+
256 
+
257 template <typename B, typename C, typename L, bool M, int K>
+
258 struct kth_element_const_reference_type<bit_aligned_pixel_reference<B,C,L,M>, K>
+
259  : public kth_element_type<bit_aligned_pixel_reference<B,C,L,M>, K> {};
+
260 
+
261 namespace detail {
+
262 
+
263 // returns sum of IntegralVector[0] ... IntegralVector[K-1]
+
264 template <typename IntegralVector, int K>
+
265 struct sum_k
+
266  : mp11::mp_plus
+
267  <
+
268  sum_k<IntegralVector, K - 1>,
+
269  typename mp11::mp_at_c<IntegralVector, K - 1>::type
+
270  >
+
271 {};
272 
-
273 // at_c required by MutableColorBaseConcept
-
274 template <int K, typename BitField, typename ChannelBitSizes, typename L, bool IsMutable>
-
275 inline
-
276 auto at_c(const bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>& p)
-
277  -> typename kth_element_reference_type<bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>, K>::type
-
278 {
-
279  using pixel_t = bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>;
-
280  using channel_t = typename kth_element_reference_type<pixel_t, K>::type;
-
281  using bit_range_t = typename pixel_t::bit_range_t;
-
282 
-
283  bit_range_t bit_range(p.bit_range());
-
284  bit_range.bit_advance(detail::sum_k<ChannelBitSizes, K>::value);
-
285 
-
286  return channel_t(bit_range.current_byte(), bit_range.bit_offset());
-
287 }
-
288 
-
290 // PixelConcept
-
292 
-
294 template <typename B, typename C, typename L, bool M>
-
295 struct is_pixel<bit_aligned_pixel_reference<B, C, L, M> > : std::true_type {};
-
296 
-
298 // PixelBasedConcept
-
300 
-
301 template <typename B, typename C, typename L, bool M>
-
302 struct color_space_type<bit_aligned_pixel_reference<B, C, L, M>>
-
303 {
-
304  using type = typename L::color_space_t;
-
305 };
-
306 
-
307 template <typename B, typename C, typename L, bool M>
-
308 struct channel_mapping_type<bit_aligned_pixel_reference<B, C, L, M>>
-
309 {
-
310  using type = typename L::channel_mapping_t;
-
311 };
-
312 
-
313 template <typename B, typename C, typename L, bool M>
-
314 struct is_planar<bit_aligned_pixel_reference<B, C, L, M>> : std::false_type {};
-
315 
-
317 // pixel_reference_type
-
319 
-
320 // Constructs a homogeneous bit_aligned_pixel_reference given a channel reference
-
321 template <typename BitField, int NumBits, typename Layout>
-
322 struct pixel_reference_type
-
323  <
-
324  packed_dynamic_channel_reference<BitField, NumBits, false> const,
-
325  Layout, false, false
-
326  >
-
327 {
-
328 private:
-
329  using channel_bit_sizes_t = mp11::mp_repeat
-
330  <
-
331  mp11::mp_list<std::integral_constant<unsigned, NumBits>>,
-
332  mp11::mp_size<typename Layout::color_space_t>
-
333  >;
-
334 
-
335 public:
-
336  using type =
-
337  bit_aligned_pixel_reference<BitField, channel_bit_sizes_t, Layout, false>;
-
338 };
+
273 template <typename IntegralVector>
+
274 struct sum_k<IntegralVector, 0> : std::integral_constant<int, 0> {};
+
275 
+
276 } // namespace detail
+
277 
+
278 // at_c required by MutableColorBaseConcept
+
279 template <int K, typename BitField, typename ChannelBitSizes, typename L, bool IsMutable>
+
280 inline
+
281 auto at_c(const bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>& p)
+
282  -> typename kth_element_reference_type<bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>, K>::type
+
283 {
+
284  using pixel_t = bit_aligned_pixel_reference<BitField, ChannelBitSizes, L, IsMutable>;
+
285  using channel_t = typename kth_element_reference_type<pixel_t, K>::type;
+
286  using bit_range_t = typename pixel_t::bit_range_t;
+
287 
+
288  bit_range_t bit_range(p.bit_range());
+
289  bit_range.bit_advance(detail::sum_k<ChannelBitSizes, K>::value);
+
290 
+
291  return channel_t(bit_range.current_byte(), bit_range.bit_offset());
+
292 }
+
293 
+
295 // PixelConcept
+
297 
+
299 template <typename B, typename C, typename L, bool M>
+
300 struct is_pixel<bit_aligned_pixel_reference<B, C, L, M> > : std::true_type {};
+
301 
+
303 // PixelBasedConcept
+
305 
+
306 template <typename B, typename C, typename L, bool M>
+
307 struct color_space_type<bit_aligned_pixel_reference<B, C, L, M>>
+
308 {
+
309  using type = typename L::color_space_t;
+
310 };
+
311 
+
312 template <typename B, typename C, typename L, bool M>
+
313 struct channel_mapping_type<bit_aligned_pixel_reference<B, C, L, M>>
+
314 {
+
315  using type = typename L::channel_mapping_t;
+
316 };
+
317 
+
318 template <typename B, typename C, typename L, bool M>
+
319 struct is_planar<bit_aligned_pixel_reference<B, C, L, M>> : std::false_type {};
+
320 
+
322 // pixel_reference_type
+
324 
+
325 // Constructs a homogeneous bit_aligned_pixel_reference given a channel reference
+
326 template <typename BitField, int NumBits, typename Layout>
+
327 struct pixel_reference_type
+
328  <
+
329  packed_dynamic_channel_reference<BitField, NumBits, false> const,
+
330  Layout, false, false
+
331  >
+
332 {
+
333 private:
+
334  using channel_bit_sizes_t = mp11::mp_repeat
+
335  <
+
336  mp11::mp_list<std::integral_constant<unsigned, NumBits>>,
+
337  mp11::mp_size<typename Layout::color_space_t>
+
338  >;
339 
-
340 // Same but for the mutable case. We cannot combine the mutable
-
341 // and read-only cases because this triggers ambiguity
-
342 template <typename BitField, int NumBits, typename Layout>
-
343 struct pixel_reference_type
-
344  <
-
345  packed_dynamic_channel_reference<BitField, NumBits, true> const,
-
346  Layout, false, true
-
347  >
-
348 {
-
349 private:
-
350  using channel_bit_sizes_t = mp11::mp_repeat
-
351  <
-
352  mp11::mp_list<std::integral_constant<unsigned, NumBits>>,
-
353  mp11::mp_size<typename Layout::color_space_t>
-
354  >;
-
355 
-
356 public:
-
357  using type = bit_aligned_pixel_reference<BitField, channel_bit_sizes_t, Layout, true>;
-
358 };
-
359 
-
360 } } // namespace boost::gil
-
361 
-
362 namespace std {
-
363 
-
364 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
-
365 // swap with 'left bias':
-
366 // - swap between proxy and anything
-
367 // - swap between value type and proxy
-
368 // - swap between proxy and proxy
-
369 // Having three overloads allows us to swap between different (but compatible) models of PixelConcept
-
370 
-
371 template <typename B, typename C, typename L, typename R> inline
-
372 void swap(const boost::gil::bit_aligned_pixel_reference<B,C,L,true> x, R& y) {
-
373  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
-
374 }
+
340 public:
+
341  using type =
+
342  bit_aligned_pixel_reference<BitField, channel_bit_sizes_t, Layout, false>;
+
343 };
+
344 
+
345 // Same but for the mutable case. We cannot combine the mutable
+
346 // and read-only cases because this triggers ambiguity
+
347 template <typename BitField, int NumBits, typename Layout>
+
348 struct pixel_reference_type
+
349  <
+
350  packed_dynamic_channel_reference<BitField, NumBits, true> const,
+
351  Layout, false, true
+
352  >
+
353 {
+
354 private:
+
355  using channel_bit_sizes_t = mp11::mp_repeat
+
356  <
+
357  mp11::mp_list<std::integral_constant<unsigned, NumBits>>,
+
358  mp11::mp_size<typename Layout::color_space_t>
+
359  >;
+
360 
+
361 public:
+
362  using type = bit_aligned_pixel_reference<BitField, channel_bit_sizes_t, Layout, true>;
+
363 };
+
364 
+
365 } } // namespace boost::gil
+
366 
+
367 namespace std {
+
368 
+
369 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
+
370 // swap with 'left bias':
+
371 // - swap between proxy and anything
+
372 // - swap between value type and proxy
+
373 // - swap between proxy and proxy
+
374 // Having three overloads allows us to swap between different (but compatible) models of PixelConcept
375 
-
376 
-
377 template <typename B, typename C, typename L> inline
-
378 void swap(typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type& x, const boost::gil::bit_aligned_pixel_reference<B,C,L,true> y) {
-
379  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
-
380 }
+
376 template <typename B, typename C, typename L, typename R> inline
+
377 void swap(boost::gil::bit_aligned_pixel_reference<B,C,L,true> const x, R& y) {
+
378  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
+
379 }
+
380 
381 
-
382 
-
383 template <typename B, typename C, typename L> inline
-
384 void swap(const boost::gil::bit_aligned_pixel_reference<B,C,L,true> x, const boost::gil::bit_aligned_pixel_reference<B,C,L,true> y) {
-
385  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
-
386 }
+
382 template <typename B, typename C, typename L> inline
+
383 void swap(typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type& x, const boost::gil::bit_aligned_pixel_reference<B,C,L,true> y) {
+
384  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
+
385 }
+
386 
387 
-
388 } // namespace std
-
389 
-
390 #endif
+
388 template <typename B, typename C, typename L> inline
+
389 void swap(boost::gil::bit_aligned_pixel_reference<B,C,L,true> const x, const boost::gil::bit_aligned_pixel_reference<B,C,L,true> y) {
+
390  boost::gil::swap_proxy<typename boost::gil::bit_aligned_pixel_reference<B,C,L,true>::value_type>(x,y);
+
391 }
+
392 
+
393 } // namespace std
+
394 
+
395 #endif
-
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:529
+
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:583
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Heterogeneous pixel value whose channel references can be constructed from the pixel bitfield and the...
Definition: metafunctions.hpp:25
auto at_c(detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< E >::type
Provides mutable access to the K-th element, in physical order.
Definition: color_base.hpp:632
Definition: bit_aligned_pixel_reference.hpp:34
BOOST_FORCEINLINE bool operator!=(const point< T > &p1, const point< T > &p2)
Definition: point.hpp:137
-
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1083
+
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1087
BOOST_FORCEINLINE bool operator==(const point< T > &p1, const point< T > &p2)
Definition: point.hpp:129
diff --git a/html/reference/bit__operations_8hpp_source.html b/html/reference/bit__operations_8hpp_source.html index 0adefc27a..bb06f4da2 100644 --- a/html/reference/bit__operations_8hpp_source.html +++ b/html/reference/bit__operations_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
14 #include <cstddef>
15 #include <type_traits>
16 
-
17 namespace boost { namespace gil { namespace detail {
+
17 namespace boost { namespace gil { namespace detail {
18 
19 // 1110 1100 -> 0011 0111
20 template <typename Buffer, typename IsBitAligned>
@@ -244,7 +244,8 @@ $(function() {
197 #endif
BOOST_FORCEINLINE auto apply_operation(Variant1 &&arg1, Visitor &&op)
Applies the visitor op to the variants.
Definition: apply_operation.hpp:20
-
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:529
+
void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
swap for packed_channel_reference
Definition: channel.hpp:583
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
diff --git a/html/reference/channel_8hpp_source.html b/html/reference/channel_8hpp_source.html index 0aeecb7c0..01f5e8426 100644 --- a/html/reference/channel_8hpp_source.html +++ b/html/reference/channel_8hpp_source.html @@ -93,7 +93,7 @@ $(function() {
51 #endif
52 #endif // defined(BOOST_GIL_CONFIG_HAS_UNALIGNED_ACCESS)
53 
-
54 namespace boost { namespace gil {
+
54 namespace boost { namespace gil {
55 
70 
71 namespace detail {
@@ -183,460 +183,520 @@ $(function() {
198  return *this;
199  }
200 
-
201  scoped_channel_value& operator++() { ++value_; return *this; }
-
202  scoped_channel_value& operator--() { --value_; return *this; }
+
201  auto operator++() -> scoped_channel_value& { ++value_; return *this; }
+
202  auto operator--() -> scoped_channel_value& { --value_; return *this; }
203 
-
204  scoped_channel_value operator++(int) { scoped_channel_value tmp=*this; this->operator++(); return tmp; }
-
205  scoped_channel_value operator--(int) { scoped_channel_value tmp=*this; this->operator--(); return tmp; }
-
206 
-
207  template <typename Scalar2> scoped_channel_value& operator+=(Scalar2 v) { value_+=v; return *this; }
-
208  template <typename Scalar2> scoped_channel_value& operator-=(Scalar2 v) { value_-=v; return *this; }
-
209  template <typename Scalar2> scoped_channel_value& operator*=(Scalar2 v) { value_*=v; return *this; }
-
210  template <typename Scalar2> scoped_channel_value& operator/=(Scalar2 v) { value_/=v; return *this; }
-
211 
-
212  operator BaseChannelValue() const { return value_; }
-
213 private:
-
214  BaseChannelValue value_{};
-
215 };
-
216 
-
217 template <typename T>
-
218 struct float_point_zero
-
219 {
-
220  static constexpr T apply() { return 0.0f; }
-
221 };
-
222 
-
223 template <typename T>
-
224 struct float_point_one
-
225 {
-
226  static constexpr T apply() { return 1.0f; }
-
227 };
-
228 
+
204  auto operator++(int) -> scoped_channel_value
+
205  {
+
206  scoped_channel_value tmp=*this;
+
207  this->operator++(); return tmp;
+
208  }
+
209 
+
210  auto operator--(int) -> scoped_channel_value
+
211  {
+
212  scoped_channel_value tmp=*this;
+
213  this->operator--(); return tmp;
+
214  }
+
215 
+
216  template <typename Scalar2>
+
217  auto operator+=(Scalar2 v) -> scoped_channel_value& { value_+=v; return *this; }
+
218 
+
219  template <typename Scalar2>
+
220  auto operator-=(Scalar2 v) -> scoped_channel_value& { value_-=v; return *this; }
+
221 
+
222  template <typename Scalar2>
+
223  auto operator*=(Scalar2 v) -> scoped_channel_value& { value_*=v; return *this; }
+
224 
+
225  template <typename Scalar2>
+
226  auto operator/=(Scalar2 v) -> scoped_channel_value& { value_/=v; return *this; }
+
227 
+
228  operator BaseChannelValue() const { return value_; }
+
229 private:
+
230  BaseChannelValue value_{};
+
231 };
232 
-
233 // It is necessary for packed channels to have their own value type. They cannot simply use an integral large enough to store the data. Here is why:
-
234 // - Any operation that requires returning the result by value will otherwise return the built-in integral type, which will have incorrect range
-
235 // That means that after getting the value of the channel we cannot properly do channel_convert, channel_invert, etc.
-
236 // - Two channels are declared compatible if they have the same value type. That means that a packed channel is incorrectly declared compatible with an integral type
-
237 namespace detail {
+
233 template <typename T>
+
234 struct float_point_zero
+
235 {
+
236  static constexpr T apply() { return 0.0f; }
+
237 };
238 
-
239 // returns the smallest fast unsigned integral type that has at least NumBits bits
-
240 template <int NumBits>
-
241 struct min_fast_uint :
-
242  std::conditional
-
243  <
-
244  NumBits <= 8,
-
245  std::uint_least8_t,
-
246  typename std::conditional
-
247  <
-
248  NumBits <= 16,
-
249  std::uint_least16_t,
-
250  typename std::conditional
-
251  <
-
252  NumBits <= 32,
-
253  std::uint_least32_t,
-
254  std::uintmax_t
-
255  >::type
-
256  >::type
-
257  >
-
258 {};
-
259 
-
260 template <int NumBits>
-
261 struct num_value_fn
-
262  : std::conditional<NumBits < 32, std::uint32_t, std::uint64_t>
-
263 {};
-
264 
-
265 template <int NumBits>
-
266 struct max_value_fn
-
267  : std::conditional<NumBits <= 32, std::uint32_t, std::uint64_t>
-
268 {};
-
269 
-
270 } // namespace detail
-
271 
+
239 template <typename T>
+
240 struct float_point_one
+
241 {
+
242  static constexpr T apply() { return 1.0f; }
+
243 };
+
244 
+
248 
+
249 // It is necessary for packed channels to have their own value type. They cannot simply use an integral large enough to store the data. Here is why:
+
250 // - Any operation that requires returning the result by value will otherwise return the built-in integral type, which will have incorrect range
+
251 // That means that after getting the value of the channel we cannot properly do channel_convert, channel_invert, etc.
+
252 // - Two channels are declared compatible if they have the same value type. That means that a packed channel is incorrectly declared compatible with an integral type
+
253 namespace detail {
+
254 
+
255 // returns the smallest fast unsigned integral type that has at least NumBits bits
+
256 template <int NumBits>
+
257 struct min_fast_uint :
+
258  std::conditional
+
259  <
+
260  NumBits <= 8,
+
261  std::uint_least8_t,
+
262  typename std::conditional
+
263  <
+
264  NumBits <= 16,
+
265  std::uint_least16_t,
+
266  typename std::conditional
+
267  <
+
268  NumBits <= 32,
+
269  std::uint_least32_t,
+
270  std::uintmax_t
+
271  >::type
+
272  >::type
+
273  >
+
274 {};
+
275 
+
276 template <int NumBits>
+
277 struct num_value_fn
+
278  : std::conditional<NumBits < 32, std::uint32_t, std::uint64_t>
+
279 {};
+
280 
+
281 template <int NumBits>
+
282 struct max_value_fn
+
283  : std::conditional<NumBits <= 32, std::uint32_t, std::uint64_t>
+
284 {};
285 
-
288 template <int NumBits>
-
289 class packed_channel_value
-
290 {
-
291 public:
-
292  using integer_t = typename detail::min_fast_uint<NumBits>::type;
-
293 
-
294  using value_type = packed_channel_value<NumBits>;
-
295  using reference = value_type&;
-
296  using const_reference = value_type const&;
-
297  using pointer = value_type*;
-
298  using const_pointer = value_type const*;
-
299  static constexpr bool is_mutable = true;
-
300 
-
301  static value_type min_value() { return 0; }
-
302  static value_type max_value() { return low_bits_mask_t< NumBits >::sig_bits; }
-
303 
-
304  packed_channel_value() = default;
-
305  packed_channel_value(integer_t v)
-
306  {
-
307  value_ = static_cast<integer_t>(v & low_bits_mask_t<NumBits>::sig_bits_fast);
-
308  }
+
286 } // namespace detail
+
287 
+
301 
+
304 template <int NumBits>
+
305 class packed_channel_value
+
306 {
+
307 public:
+
308  using integer_t = typename detail::min_fast_uint<NumBits>::type;
309 
-
310  template <typename Scalar>
-
311  packed_channel_value(Scalar v)
-
312  {
-
313  value_ = packed_channel_value(static_cast<integer_t>(v));
-
314  }
-
315 
-
316  static unsigned int num_bits() { return NumBits; }
-
317 
-
318  operator integer_t() const { return value_; }
+
310  using value_type = packed_channel_value<NumBits>;
+
311  using reference = value_type&;
+
312  using const_reference = value_type const&;
+
313  using pointer = value_type*;
+
314  using const_pointer = value_type const*;
+
315  static constexpr bool is_mutable = true;
+
316 
+
317  static value_type min_value() { return 0; }
+
318  static value_type max_value() { return low_bits_mask_t< NumBits >::sig_bits; }
319 
-
320 private:
-
321  integer_t value_{};
-
322 };
-
323 
-
324 namespace detail {
+
320  packed_channel_value() = default;
+
321  packed_channel_value(integer_t v)
+
322  {
+
323  value_ = static_cast<integer_t>(v & low_bits_mask_t<NumBits>::sig_bits_fast);
+
324  }
325 
-
326 template <std::size_t K>
-
327 struct static_copy_bytes
-
328 {
-
329  void operator()(unsigned char const* from, unsigned char* to) const
-
330  {
-
331  *to = *from;
-
332  static_copy_bytes<K - 1>()(++from, ++to);
-
333  }
-
334 };
+
326  template <typename Scalar>
+
327  packed_channel_value(Scalar v)
+
328  {
+
329  value_ = packed_channel_value(static_cast<integer_t>(v));
+
330  }
+
331 
+
332  static auto num_bits() -> unsigned int { return NumBits; }
+
333 
+
334  operator integer_t() const { return value_; }
335 
-
336 template <>
-
337 struct static_copy_bytes<0>
-
338 {
-
339  void operator()(unsigned char const*, unsigned char*) const {}
-
340 };
+
336 private:
+
337  integer_t value_{};
+
338 };
+
339 
+
340 namespace detail {
341 
-
342 template <typename Derived, typename BitField, int NumBits, bool IsMutable>
-
343 class packed_channel_reference_base
+
342 template <std::size_t K>
+
343 struct static_copy_bytes
344 {
-
345 protected:
-
346  using data_ptr_t = typename std::conditional<IsMutable, void*, void const*>::type;
-
347 public:
-
348  data_ptr_t _data_ptr; // void* pointer to the first byte of the bit range
-
349 
-
350  using value_type = packed_channel_value<NumBits>;
-
351  using reference = const Derived;
-
352  using pointer = value_type *;
-
353  using const_pointer = const value_type *;
-
354  static constexpr int num_bits = NumBits;
-
355  static constexpr bool is_mutable = IsMutable;
-
356 
-
357  static value_type min_value() { return channel_traits<value_type>::min_value(); }
-
358  static value_type max_value() { return channel_traits<value_type>::max_value(); }
-
359 
-
360  using bitfield_t = BitField;
-
361  using integer_t = typename value_type::integer_t;
-
362 
-
363  packed_channel_reference_base(data_ptr_t data_ptr) : _data_ptr(data_ptr) {}
-
364  packed_channel_reference_base(const packed_channel_reference_base& ref) : _data_ptr(ref._data_ptr) {}
-
365  const Derived& operator=(integer_t v) const { set(v); return derived(); }
-
366 
-
367  const Derived& operator++() const { set(get()+1); return derived(); }
-
368  const Derived& operator--() const { set(get()-1); return derived(); }
-
369 
-
370  Derived operator++(int) const { Derived tmp=derived(); this->operator++(); return tmp; }
-
371  Derived operator--(int) const { Derived tmp=derived(); this->operator--(); return tmp; }
+
345  void operator()(unsigned char const* from, unsigned char* to) const
+
346  {
+
347  *to = *from;
+
348  static_copy_bytes<K - 1>()(++from, ++to);
+
349  }
+
350 };
+
351 
+
352 template <>
+
353 struct static_copy_bytes<0>
+
354 {
+
355  void operator()(unsigned char const*, unsigned char*) const {}
+
356 };
+
357 
+
358 template <typename Derived, typename BitField, int NumBits, bool IsMutable>
+
359 class packed_channel_reference_base
+
360 {
+
361 protected:
+
362  using data_ptr_t = typename std::conditional<IsMutable, void*, void const*>::type;
+
363 public:
+
364  data_ptr_t _data_ptr; // void* pointer to the first byte of the bit range
+
365 
+
366  using value_type = packed_channel_value<NumBits>;
+
367  using reference = Derived const;
+
368  using pointer = value_type*;
+
369  using const_pointer = value_type const*;
+
370  static constexpr int num_bits = NumBits;
+
371  static constexpr bool is_mutable = IsMutable;
372 
-
373  template <typename Scalar2> const Derived& operator+=(Scalar2 v) const { set( static_cast<integer_t>( get() + v )); return derived(); }
-
374  template <typename Scalar2> const Derived& operator-=(Scalar2 v) const { set( static_cast<integer_t>( get() - v )); return derived(); }
-
375  template <typename Scalar2> const Derived& operator*=(Scalar2 v) const { set( static_cast<integer_t>( get() * v )); return derived(); }
-
376  template <typename Scalar2> const Derived& operator/=(Scalar2 v) const { set( static_cast<integer_t>( get() / v )); return derived(); }
-
377 
-
378  operator integer_t() const { return get(); }
-
379  data_ptr_t operator &() const {return _data_ptr;}
-
380 protected:
-
381 
-
382  using num_value_t = typename detail::num_value_fn<NumBits>::type;
-
383  using max_value_t = typename detail::max_value_fn<NumBits>::type;
-
384 
-
385  static const num_value_t num_values = static_cast< num_value_t >( 1 ) << NumBits ;
-
386  static const max_value_t max_val = static_cast< max_value_t >( num_values - 1 );
-
387 
-
388 #if defined(BOOST_GIL_CONFIG_HAS_UNALIGNED_ACCESS)
-
389  const bitfield_t& get_data() const { return *static_cast<const bitfield_t*>(_data_ptr); }
-
390  void set_data(const bitfield_t& val) const { *static_cast< bitfield_t*>(_data_ptr) = val; }
-
391 #else
-
392  bitfield_t get_data() const {
-
393  bitfield_t ret;
-
394  static_copy_bytes<sizeof(bitfield_t) >()(gil_reinterpret_cast_c<const unsigned char*>(_data_ptr),gil_reinterpret_cast<unsigned char*>(&ret));
-
395  return ret;
-
396  }
-
397  void set_data(const bitfield_t& val) const {
-
398  static_copy_bytes<sizeof(bitfield_t) >()(gil_reinterpret_cast_c<const unsigned char*>(&val),gil_reinterpret_cast<unsigned char*>(_data_ptr));
-
399  }
-
400 #endif
-
401 
-
402 private:
-
403  void set(integer_t value) const { // can this be done faster??
-
404  this->derived().set_unsafe(((value % num_values) + num_values) % num_values);
+
373  static auto min_value() -> value_type { return channel_traits<value_type>::min_value(); }
+
374  static auto max_value() -> value_type { return channel_traits<value_type>::max_value(); }
+
375 
+
376  using bitfield_t = BitField;
+
377  using integer_t = typename value_type::integer_t;
+
378 
+
379  packed_channel_reference_base(data_ptr_t data_ptr) : _data_ptr(data_ptr) {}
+
380  packed_channel_reference_base(packed_channel_reference_base const& ref) : _data_ptr(ref._data_ptr) {}
+
381 
+
382  auto operator=(integer_t v) const -> Derived const& { set(v); return derived(); }
+
383 
+
384  auto operator++() const -> Derived const& { set(get()+1); return derived(); }
+
385  auto operator--() const -> Derived const& { set(get()-1); return derived(); }
+
386 
+
387  auto operator++(int) const -> Derived
+
388  {
+
389  Derived tmp=derived();
+
390  this->operator++(); return tmp;
+
391  }
+
392 
+
393  auto operator--(int) const -> Derived
+
394  {
+
395  Derived tmp=derived();
+
396  this->operator--();
+
397  return tmp;
+
398  }
+
399 
+
400  template <typename Scalar2>
+
401  auto operator+=(Scalar2 v) const -> Derived const&
+
402  {
+
403  set( static_cast<integer_t>( get() + v ));
+
404  return derived();
405  }
-
406  integer_t get() const { return derived().get(); }
-
407  const Derived& derived() const { return static_cast<const Derived&>(*this); }
-
408 };
-
409 } // namespace detail
-
410 
-
424 
-
428 template <typename BitField, int FirstBit, int NumBits, bool IsMutable>
-
429 class packed_channel_reference;
-
430 
-
434 template <typename BitField, int NumBits, bool IsMutable>
-
435 class packed_dynamic_channel_reference;
-
436 
-
439 template <typename BitField, int FirstBit, int NumBits>
-
440 class packed_channel_reference<BitField, FirstBit, NumBits, false>
-
441  : public detail::packed_channel_reference_base
-
442  <
-
443  packed_channel_reference<BitField, FirstBit, NumBits, false>,
-
444  BitField,
-
445  NumBits,
-
446  false
-
447  >
-
448 {
-
449  using parent_t = detail::packed_channel_reference_base
-
450  <
-
451  packed_channel_reference<BitField, FirstBit, NumBits, false>,
-
452  BitField,
-
453  NumBits,
-
454  false
-
455  >;
-
456 
-
457  friend class packed_channel_reference<BitField, FirstBit, NumBits, true>;
-
458 
-
459  static const BitField channel_mask = static_cast<BitField>(parent_t::max_val) << FirstBit;
-
460 
-
461  void operator=(packed_channel_reference const&);
-
462 public:
-
463  using const_reference = packed_channel_reference<BitField,FirstBit,NumBits,false> const;
-
464  using mutable_reference = packed_channel_reference<BitField,FirstBit,NumBits,true> const;
-
465  using integer_t = typename parent_t::integer_t;
-
466 
-
467  explicit packed_channel_reference(const void* data_ptr) : parent_t(data_ptr) {}
-
468  packed_channel_reference(const packed_channel_reference& ref) : parent_t(ref._data_ptr) {}
-
469  packed_channel_reference(const mutable_reference& ref) : parent_t(ref._data_ptr) {}
-
470 
-
471  unsigned first_bit() const { return FirstBit; }
-
472 
-
473  integer_t get() const { return integer_t((this->get_data()&channel_mask) >> FirstBit); }
-
474 };
-
475 
-
478 template <typename BitField, int FirstBit, int NumBits>
-
479 class packed_channel_reference<BitField,FirstBit,NumBits,true>
-
480  : public detail::packed_channel_reference_base<packed_channel_reference<BitField,FirstBit,NumBits,true>,BitField,NumBits,true>
-
481 {
-
482  using parent_t = detail::packed_channel_reference_base<packed_channel_reference<BitField,FirstBit,NumBits,true>,BitField,NumBits,true>;
-
483  friend class packed_channel_reference<BitField,FirstBit,NumBits,false>;
-
484 
-
485  static const BitField channel_mask = static_cast< BitField >( parent_t::max_val ) << FirstBit;
-
486 
-
487 public:
-
488  using const_reference = packed_channel_reference<BitField,FirstBit,NumBits,false> const;
-
489  using mutable_reference = packed_channel_reference<BitField,FirstBit,NumBits,true> const;
-
490  using integer_t = typename parent_t::integer_t;
-
491 
-
492  explicit packed_channel_reference(void* data_ptr) : parent_t(data_ptr) {}
-
493  packed_channel_reference(const packed_channel_reference& ref) : parent_t(ref._data_ptr) {}
-
494 
-
495  packed_channel_reference const& operator=(integer_t value) const
-
496  {
-
497  BOOST_ASSERT(value <= parent_t::max_val);
-
498  set_unsafe(value);
-
499  return *this;
-
500  }
-
501 
-
502  const packed_channel_reference& operator=(const mutable_reference& ref) const { set_from_reference(ref.get_data()); return *this; }
-
503  const packed_channel_reference& operator=(const const_reference& ref) const { set_from_reference(ref.get_data()); return *this; }
-
504 
-
505  template <bool Mutable1>
-
506  const packed_channel_reference& operator=(const packed_dynamic_channel_reference<BitField,NumBits,Mutable1>& ref) const { set_unsafe(ref.get()); return *this; }
-
507 
-
508  unsigned first_bit() const { return FirstBit; }
+
406 
+
407  template <typename Scalar2>
+
408  auto operator-=(Scalar2 v) const -> Derived const&
+
409  {
+
410  set( static_cast<integer_t>( get() - v )); return derived();
+
411  }
+
412 
+
413  template <typename Scalar2>
+
414  auto operator*=(Scalar2 v) const -> Derived const&
+
415  {
+
416  set( static_cast<integer_t>( get() * v ));
+
417  return derived();
+
418  }
+
419 
+
420  template <typename Scalar2>
+
421  auto operator/=(Scalar2 v) const -> Derived const&
+
422  {
+
423  set( static_cast<integer_t>( get() / v ));
+
424  return derived();
+
425  }
+
426 
+
427  operator integer_t() const { return get(); }
+
428  auto operator&() const -> data_ptr_t {return _data_ptr;}
+
429 
+
430 protected:
+
431 
+
432  using num_value_t = typename detail::num_value_fn<NumBits>::type;
+
433  using max_value_t = typename detail::max_value_fn<NumBits>::type;
+
434 
+
435  static const num_value_t num_values = static_cast< num_value_t >( 1 ) << NumBits ;
+
436  static const max_value_t max_val = static_cast< max_value_t >( num_values - 1 );
+
437 
+
438 #if defined(BOOST_GIL_CONFIG_HAS_UNALIGNED_ACCESS)
+
439  const bitfield_t& get_data() const { return *static_cast<const bitfield_t*>(_data_ptr); }
+
440  void set_data(const bitfield_t& val) const { *static_cast< bitfield_t*>(_data_ptr) = val; }
+
441 #else
+
442  auto get_data() const -> bitfield_t
+
443  {
+
444  bitfield_t ret;
+
445  static_copy_bytes<sizeof(bitfield_t) >()(gil_reinterpret_cast_c<const unsigned char*>(_data_ptr),gil_reinterpret_cast<unsigned char*>(&ret));
+
446  return ret;
+
447  }
+
448 
+
449  void set_data(bitfield_t const& val) const
+
450  {
+
451  static_copy_bytes<sizeof(bitfield_t) >()(gil_reinterpret_cast_c<const unsigned char*>(&val),gil_reinterpret_cast<unsigned char*>(_data_ptr));
+
452  }
+
453 #endif
+
454 
+
455 private:
+
456  void set(integer_t value) const { // can this be done faster??
+
457  this->derived().set_unsafe(((value % num_values) + num_values) % num_values);
+
458  }
+
459  auto get() const -> integer_t { return derived().get(); }
+
460  auto derived() const -> Derived const& { return static_cast<const Derived&>(*this); }
+
461 };
+
462 } // namespace detail
+
463 
+
477 
+
481 template <typename BitField, int FirstBit, int NumBits, bool IsMutable>
+
482 class packed_channel_reference;
+
483 
+
487 template <typename BitField, int NumBits, bool IsMutable>
+
488 class packed_dynamic_channel_reference;
+
489 
+
492 template <typename BitField, int FirstBit, int NumBits>
+
493 class packed_channel_reference<BitField, FirstBit, NumBits, false>
+
494  : public detail::packed_channel_reference_base
+
495  <
+
496  packed_channel_reference<BitField, FirstBit, NumBits, false>,
+
497  BitField,
+
498  NumBits,
+
499  false
+
500  >
+
501 {
+
502  using parent_t = detail::packed_channel_reference_base
+
503  <
+
504  packed_channel_reference<BitField, FirstBit, NumBits, false>,
+
505  BitField,
+
506  NumBits,
+
507  false
+
508  >;
509 
-
510  integer_t get() const { return integer_t((this->get_data()&channel_mask) >> FirstBit); }
-
511  void set_unsafe(integer_t value) const { this->set_data((this->get_data() & ~channel_mask) | (( static_cast< BitField >( value )<<FirstBit))); }
-
512 private:
-
513  void set_from_reference(const BitField& other_bits) const { this->set_data((this->get_data() & ~channel_mask) | (other_bits & channel_mask)); }
-
514 };
-
515 
-
516 }} // namespace boost::gil
-
517 
-
518 namespace std {
-
519 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
-
520 // swap with 'left bias':
-
521 // - swap between proxy and anything
-
522 // - swap between value type and proxy
-
523 // - swap between proxy and proxy
-
524 
-
527 template <typename BF, int FB, int NB, bool M, typename R>
-
528 inline
-
529 void swap(boost::gil::packed_channel_reference<BF, FB, NB, M> const x, R& y)
-
530 {
-
531  boost::gil::swap_proxy
-
532  <
-
533  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
-
534  >(x, y);
-
535 }
-
536 
+
510  friend class packed_channel_reference<BitField, FirstBit, NumBits, true>;
+
511 
+
512  static const BitField channel_mask = static_cast<BitField>(parent_t::max_val) << FirstBit;
+
513 
+
514  void operator=(packed_channel_reference const&);
+
515 public:
+
516  using const_reference = packed_channel_reference<BitField,FirstBit,NumBits,false> const;
+
517  using mutable_reference = packed_channel_reference<BitField,FirstBit,NumBits,true> const;
+
518  using integer_t = typename parent_t::integer_t;
+
519 
+
520  explicit packed_channel_reference(const void* data_ptr) : parent_t(data_ptr) {}
+
521  packed_channel_reference(const packed_channel_reference& ref) : parent_t(ref._data_ptr) {}
+
522  packed_channel_reference(const mutable_reference& ref) : parent_t(ref._data_ptr) {}
+
523 
+
524  auto first_bit() const -> unsigned int { return FirstBit; }
+
525 
+
526  auto get() const -> integer_t { return integer_t((this->get_data()&channel_mask) >> FirstBit); }
+
527 };
+
528 
+
531 template <typename BitField, int FirstBit, int NumBits>
+
532 class packed_channel_reference<BitField,FirstBit,NumBits,true>
+
533  : public detail::packed_channel_reference_base<packed_channel_reference<BitField,FirstBit,NumBits,true>,BitField,NumBits,true>
+
534 {
+
535  using parent_t = detail::packed_channel_reference_base<packed_channel_reference<BitField,FirstBit,NumBits,true>,BitField,NumBits,true>;
+
536  friend class packed_channel_reference<BitField,FirstBit,NumBits,false>;
537 
-
540 template <typename BF, int FB, int NB, bool M>
-
541 inline
-
542 void swap(
-
543  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type& x,
-
544  boost::gil::packed_channel_reference<BF, FB, NB, M> const y)
-
545 {
-
546  boost::gil::swap_proxy
-
547  <
-
548  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
-
549  >(x,y);
-
550 }
-
551 
-
554 template <typename BF, int FB, int NB, bool M> inline
-
555 void swap(
-
556  boost::gil::packed_channel_reference<BF, FB, NB, M> const x,
-
557  boost::gil::packed_channel_reference<BF, FB, NB, M> const y)
-
558 {
-
559  boost::gil::swap_proxy
-
560  <
-
561  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
-
562  >(x,y);
-
563 }
-
564 
-
565 } // namespace std
-
566 
-
567 namespace boost { namespace gil {
-
568 
-
583 
-
587 template <typename BitField, int NumBits>
-
588 class packed_dynamic_channel_reference<BitField,NumBits,false>
-
589  : public detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,false>,BitField,NumBits,false>
-
590 {
-
591  using parent_t = detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,false>,BitField,NumBits,false>;
-
592  friend class packed_dynamic_channel_reference<BitField,NumBits,true>;
-
593 
-
594  unsigned _first_bit; // 0..7
-
595 
-
596  void operator=(const packed_dynamic_channel_reference&);
-
597 public:
-
598  using const_reference = packed_dynamic_channel_reference<BitField,NumBits,false> const;
-
599  using mutable_reference = packed_dynamic_channel_reference<BitField,NumBits,true> const;
-
600  using integer_t = typename parent_t::integer_t;
-
601 
-
602  packed_dynamic_channel_reference(const void* data_ptr, unsigned first_bit) : parent_t(data_ptr), _first_bit(first_bit) {}
-
603  packed_dynamic_channel_reference(const const_reference& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
-
604  packed_dynamic_channel_reference(const mutable_reference& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
+
538  static const BitField channel_mask = static_cast< BitField >( parent_t::max_val ) << FirstBit;
+
539 
+
540 public:
+
541  using const_reference = packed_channel_reference<BitField,FirstBit,NumBits,false> const;
+
542  using mutable_reference = packed_channel_reference<BitField,FirstBit,NumBits,true> const;
+
543  using integer_t = typename parent_t::integer_t;
+
544 
+
545  explicit packed_channel_reference(void* data_ptr) : parent_t(data_ptr) {}
+
546  packed_channel_reference(const packed_channel_reference& ref) : parent_t(ref._data_ptr) {}
+
547 
+
548  packed_channel_reference const& operator=(integer_t value) const
+
549  {
+
550  BOOST_ASSERT(value <= parent_t::max_val);
+
551  set_unsafe(value);
+
552  return *this;
+
553  }
+
554 
+
555  auto operator=(mutable_reference const& ref) const -> packed_channel_reference const& { set_from_reference(ref.get_data()); return *this; }
+
556  auto operator=(const_reference const& ref) const -> packed_channel_reference const& { set_from_reference(ref.get_data()); return *this; }
+
557 
+
558  template <bool Mutable1>
+
559  auto operator=(packed_dynamic_channel_reference<BitField,NumBits,Mutable1> const& ref) const -> packed_channel_reference const& { set_unsafe(ref.get()); return *this; }
+
560 
+
561  auto first_bit() const -> unsigned int { return FirstBit; }
+
562 
+
563  auto get() const -> integer_t { return integer_t((this->get_data()&channel_mask) >> FirstBit); }
+
564  void set_unsafe(integer_t value) const { this->set_data((this->get_data() & ~channel_mask) | (( static_cast< BitField >( value )<<FirstBit))); }
+
565 
+
566 private:
+
567  void set_from_reference(const BitField& other_bits) const { this->set_data((this->get_data() & ~channel_mask) | (other_bits & channel_mask)); }
+
568 };
+
569 
+
570 }} // namespace boost::gil
+
571 
+
572 namespace std {
+
573 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
+
574 // swap with 'left bias':
+
575 // - swap between proxy and anything
+
576 // - swap between value type and proxy
+
577 // - swap between proxy and proxy
+
578 
+
581 template <typename BF, int FB, int NB, bool M, typename R>
+
582 inline
+
583 void swap(boost::gil::packed_channel_reference<BF, FB, NB, M> const x, R& y)
+
584 {
+
585  boost::gil::swap_proxy
+
586  <
+
587  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
+
588  >(x, y);
+
589 }
+
590 
+
591 
+
594 template <typename BF, int FB, int NB, bool M>
+
595 inline
+
596 void swap(
+
597  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type& x,
+
598  boost::gil::packed_channel_reference<BF, FB, NB, M> const y)
+
599 {
+
600  boost::gil::swap_proxy
+
601  <
+
602  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
+
603  >(x,y);
+
604 }
605 
-
606  unsigned first_bit() const { return _first_bit; }
-
607 
-
608  integer_t get() const {
-
609  const BitField channel_mask = static_cast< integer_t >( parent_t::max_val ) <<_first_bit;
-
610  return static_cast< integer_t >(( this->get_data()&channel_mask ) >> _first_bit );
-
611  }
-
612 };
-
613 
-
617 template <typename BitField, int NumBits>
-
618 class packed_dynamic_channel_reference<BitField,NumBits,true>
-
619  : public detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,true>,BitField,NumBits,true>
-
620 {
-
621  using parent_t = detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,true>,BitField,NumBits,true>;
-
622  friend class packed_dynamic_channel_reference<BitField,NumBits,false>;
-
623 
-
624  unsigned _first_bit;
-
625 
-
626 public:
-
627  using const_reference = packed_dynamic_channel_reference<BitField,NumBits,false> const;
-
628  using mutable_reference = packed_dynamic_channel_reference<BitField,NumBits,true> const;
-
629  using integer_t = typename parent_t::integer_t;
-
630 
-
631  packed_dynamic_channel_reference(void* data_ptr, unsigned first_bit) : parent_t(data_ptr), _first_bit(first_bit) {}
-
632  packed_dynamic_channel_reference(const packed_dynamic_channel_reference& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
-
633 
-
634  packed_dynamic_channel_reference const& operator=(integer_t value) const
-
635  {
-
636  BOOST_ASSERT(value <= parent_t::max_val);
-
637  set_unsafe(value);
-
638  return *this;
-
639  }
-
640 
-
641  const packed_dynamic_channel_reference& operator=(const mutable_reference& ref) const { set_unsafe(ref.get()); return *this; }
-
642  const packed_dynamic_channel_reference& operator=(const const_reference& ref) const { set_unsafe(ref.get()); return *this; }
-
643 
-
644  template <typename BitField1, int FirstBit1, bool Mutable1>
-
645  const packed_dynamic_channel_reference& operator=(const packed_channel_reference<BitField1, FirstBit1, NumBits, Mutable1>& ref) const
-
646  { set_unsafe(ref.get()); return *this; }
+
608 template <typename BF, int FB, int NB, bool M> inline
+
609 void swap(
+
610  boost::gil::packed_channel_reference<BF, FB, NB, M> const x,
+
611  boost::gil::packed_channel_reference<BF, FB, NB, M> const y)
+
612 {
+
613  boost::gil::swap_proxy
+
614  <
+
615  typename boost::gil::packed_channel_reference<BF, FB, NB, M>::value_type
+
616  >(x,y);
+
617 }
+
618 
+
619 } // namespace std
+
620 
+
621 namespace boost { namespace gil {
+
622 
+
637 
+
641 template <typename BitField, int NumBits>
+
642 class packed_dynamic_channel_reference<BitField,NumBits,false>
+
643  : public detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,false>,BitField,NumBits,false>
+
644 {
+
645  using parent_t = detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,false>,BitField,NumBits,false>;
+
646  friend class packed_dynamic_channel_reference<BitField,NumBits,true>;
647 
-
648  unsigned first_bit() const { return _first_bit; }
+
648  unsigned _first_bit; // 0..7
649 
-
650  integer_t get() const {
-
651  const BitField channel_mask = static_cast< integer_t >( parent_t::max_val ) << _first_bit;
-
652  return static_cast< integer_t >(( this->get_data()&channel_mask ) >> _first_bit );
-
653  }
-
654 
-
655  void set_unsafe(integer_t value) const {
-
656  const BitField channel_mask = static_cast< integer_t >( parent_t::max_val ) << _first_bit;
-
657  this->set_data((this->get_data() & ~channel_mask) | value<<_first_bit);
-
658  }
-
659 };
-
660 } } // namespace boost::gil
+
650  void operator=(const packed_dynamic_channel_reference&);
+
651 public:
+
652  using const_reference = packed_dynamic_channel_reference<BitField,NumBits,false> const;
+
653  using mutable_reference = packed_dynamic_channel_reference<BitField,NumBits,true> const;
+
654  using integer_t = typename parent_t::integer_t;
+
655 
+
656  packed_dynamic_channel_reference(void const* data_ptr, unsigned first_bit) : parent_t(data_ptr), _first_bit(first_bit) {}
+
657  packed_dynamic_channel_reference(const_reference const& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
+
658  packed_dynamic_channel_reference(mutable_reference const& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
+
659 
+
660  auto first_bit() const -> unsigned int { return _first_bit; }
661 
-
662 namespace std {
-
663 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
-
664 // swap with 'left bias':
-
665 // - swap between proxy and anything
-
666 // - swap between value type and proxy
-
667 // - swap between proxy and proxy
+
662  auto get() const -> integer_t
+
663  {
+
664  const BitField channel_mask = static_cast< integer_t >( parent_t::max_val ) <<_first_bit;
+
665  return static_cast< integer_t >(( this->get_data()&channel_mask ) >> _first_bit );
+
666  }
+
667 };
668 
-
669 
-
672 template <typename BF, int NB, bool M, typename R> inline
-
673 void swap(const boost::gil::packed_dynamic_channel_reference<BF,NB,M> x, R& y) {
-
674  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
-
675 }
-
676 
-
677 
-
680 template <typename BF, int NB, bool M> inline
-
681 void swap(typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type& x, const boost::gil::packed_dynamic_channel_reference<BF,NB,M> y) {
-
682  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
-
683 }
-
684 
-
687 template <typename BF, int NB, bool M> inline
-
688 void swap(const boost::gil::packed_dynamic_channel_reference<BF,NB,M> x, const boost::gil::packed_dynamic_channel_reference<BF,NB,M> y) {
-
689  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
-
690 }
-
691 } // namespace std
-
692 
-
693 // \brief Determines the fundamental type which may be used, e.g., to cast from larger to smaller channel types.
-
694 namespace boost { namespace gil {
-
695 template <typename T>
-
696 struct base_channel_type_impl { using type = T; };
-
697 
-
698 template <int N>
-
699 struct base_channel_type_impl<packed_channel_value<N> >
-
700 { using type = typename packed_channel_value<N>::integer_t; };
-
701 
-
702 template <typename B, int F, int N, bool M>
-
703 struct base_channel_type_impl<packed_channel_reference<B, F, N, M> >
-
704 {
-
705  using type = typename packed_channel_reference<B,F,N,M>::integer_t;
-
706 };
+
672 template <typename BitField, int NumBits>
+
673 class packed_dynamic_channel_reference<BitField,NumBits,true>
+
674  : public detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,true>,BitField,NumBits,true>
+
675 {
+
676  using parent_t = detail::packed_channel_reference_base<packed_dynamic_channel_reference<BitField,NumBits,true>,BitField,NumBits,true>;
+
677  friend class packed_dynamic_channel_reference<BitField,NumBits,false>;
+
678 
+
679  unsigned _first_bit;
+
680 
+
681 public:
+
682  using const_reference = packed_dynamic_channel_reference<BitField,NumBits,false> const;
+
683  using mutable_reference = packed_dynamic_channel_reference<BitField,NumBits,true> const;
+
684  using integer_t = typename parent_t::integer_t;
+
685 
+
686  packed_dynamic_channel_reference(void* data_ptr, unsigned first_bit) : parent_t(data_ptr), _first_bit(first_bit) {}
+
687  packed_dynamic_channel_reference(packed_dynamic_channel_reference const& ref) : parent_t(ref._data_ptr), _first_bit(ref._first_bit) {}
+
688 
+
689  auto operator=(integer_t value) const -> packed_dynamic_channel_reference const&
+
690  {
+
691  BOOST_ASSERT(value <= parent_t::max_val);
+
692  set_unsafe(value);
+
693  return *this;
+
694  }
+
695 
+
696  auto operator=(mutable_reference const& ref) const -> packed_dynamic_channel_reference const& { set_unsafe(ref.get()); return *this; }
+
697  auto operator=(const_reference const& ref) const -> packed_dynamic_channel_reference const& { set_unsafe(ref.get()); return *this; }
+
698 
+
699  template <typename BitField1, int FirstBit1, bool Mutable1>
+
700  auto operator=(packed_channel_reference<BitField1, FirstBit1, NumBits, Mutable1> const& ref) const -> packed_dynamic_channel_reference const&
+
701  {
+
702  set_unsafe(ref.get());
+
703  return *this;
+
704  }
+
705 
+
706  auto first_bit() const -> unsigned int { return _first_bit; }
707 
-
708 template <typename B, int N, bool M>
-
709 struct base_channel_type_impl<packed_dynamic_channel_reference<B, N, M> >
-
710 {
-
711  using type = typename packed_dynamic_channel_reference<B,N,M>::integer_t;
-
712 };
+
708  auto get() const -> integer_t
+
709  {
+
710  BitField const channel_mask = static_cast< integer_t >( parent_t::max_val ) << _first_bit;
+
711  return static_cast< integer_t >(( this->get_data()&channel_mask ) >> _first_bit );
+
712  }
713 
-
714 template <typename ChannelValue, typename MinV, typename MaxV>
-
715 struct base_channel_type_impl<scoped_channel_value<ChannelValue, MinV, MaxV> >
-
716 { using type = ChannelValue; };
-
717 
-
718 template <typename T>
-
719 struct base_channel_type : base_channel_type_impl<typename std::remove_cv<T>::type> {};
+
714  void set_unsafe(integer_t value) const {
+
715  const BitField channel_mask = static_cast< integer_t >( parent_t::max_val ) << _first_bit;
+
716  this->set_data((this->get_data() & ~channel_mask) | value<<_first_bit);
+
717  }
+
718 };
+
719 } } // namespace boost::gil
720 
-
721 }} //namespace boost::gil
-
722 
-
723 #endif
+
721 namespace std {
+
722 // We are forced to define swap inside std namespace because on some platforms (Visual Studio 8) STL calls swap qualified.
+
723 // swap with 'left bias':
+
724 // - swap between proxy and anything
+
725 // - swap between value type and proxy
+
726 // - swap between proxy and proxy
+
727 
+
728 
+
731 template <typename BF, int NB, bool M, typename R> inline
+
732 void swap(const boost::gil::packed_dynamic_channel_reference<BF,NB,M> x, R& y) {
+
733  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
+
734 }
+
735 
+
736 
+
739 template <typename BF, int NB, bool M> inline
+
740 void swap(typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type& x, const boost::gil::packed_dynamic_channel_reference<BF,NB,M> y) {
+
741  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
+
742 }
+
743 
+
746 template <typename BF, int NB, bool M> inline
+
747 void swap(const boost::gil::packed_dynamic_channel_reference<BF,NB,M> x, const boost::gil::packed_dynamic_channel_reference<BF,NB,M> y) {
+
748  boost::gil::swap_proxy<typename boost::gil::packed_dynamic_channel_reference<BF,NB,M>::value_type>(x,y);
+
749 }
+
750 } // namespace std
+
751 
+
752 // \brief Determines the fundamental type which may be used, e.g., to cast from larger to smaller channel types.
+
753 namespace boost { namespace gil {
+
754 template <typename T>
+
755 struct base_channel_type_impl { using type = T; };
+
756 
+
757 template <int N>
+
758 struct base_channel_type_impl<packed_channel_value<N> >
+
759 { using type = typename packed_channel_value<N>::integer_t; };
+
760 
+
761 template <typename B, int F, int N, bool M>
+
762 struct base_channel_type_impl<packed_channel_reference<B, F, N, M> >
+
763 {
+
764  using type = typename packed_channel_reference<B,F,N,M>::integer_t;
+
765 };
+
766 
+
767 template <typename B, int N, bool M>
+
768 struct base_channel_type_impl<packed_dynamic_channel_reference<B, N, M> >
+
769 {
+
770  using type = typename packed_dynamic_channel_reference<B,N,M>::integer_t;
+
771 };
+
772 
+
773 template <typename ChannelValue, typename MinV, typename MaxV>
+
774 struct base_channel_type_impl<scoped_channel_value<ChannelValue, MinV, MaxV> >
+
775 { using type = ChannelValue; };
+
776 
+
777 template <typename T>
+
778 struct base_channel_type : base_channel_type_impl<typename std::remove_cv<T>::type> {};
+
779 
+
780 }} //namespace boost::gil
+
781 
+
782 #endif
-
Models a mutable subbyte channel reference whose bit offset is a runtime parameter....
Definition: channel.hpp:618
-
Models a constant subbyte channel reference whose bit offset is a runtime parameter....
Definition: channel.hpp:588
-
void swap(const boost::gil::packed_dynamic_channel_reference< BF, NB, M > x, const boost::gil::packed_dynamic_channel_reference< BF, NB, M > y)
swap for packed_dynamic_channel_reference
Definition: channel.hpp:688
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
+
Models a mutable subbyte channel reference whose bit offset is a runtime parameter....
Definition: channel.hpp:673
+
Models a constant subbyte channel reference whose bit offset is a runtime parameter....
Definition: channel.hpp:642
+
void swap(const boost::gil::packed_dynamic_channel_reference< BF, NB, M > x, const boost::gil::packed_dynamic_channel_reference< BF, NB, M > y)
swap for packed_dynamic_channel_reference
Definition: channel.hpp:747
diff --git a/html/reference/channel__algorithm_8hpp_source.html b/html/reference/channel__algorithm_8hpp_source.html index 20c748296..b36567a77 100644 --- a/html/reference/channel__algorithm_8hpp_source.html +++ b/html/reference/channel__algorithm_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
17 #include <limits>
18 #include <type_traits>
19 
-
20 namespace boost { namespace gil {
+
20 namespace boost { namespace gil {
21 
22 namespace detail {
23 
@@ -153,388 +153,412 @@ $(function() {
148 struct channel_converter_unsigned_impl {
149  using argument_type = SrcChannelV;
150  using result_type = DstChannelV;
-
151  DstChannelV operator()(SrcChannelV src) const {
-
152  return DstChannelV(channel_traits<DstChannelV>::min_value() +
-
153  (src - channel_traits<SrcChannelV>::min_value()) / channel_range<SrcChannelV>() * channel_range<DstChannelV>());
-
154  }
-
155 private:
-
156  template <typename C>
-
157  static double channel_range() {
-
158  return double(channel_traits<C>::max_value()) - double(channel_traits<C>::min_value());
-
159  }
-
160 };
-
161 
-
162 // When both the source and the destination are integral channels, perform a faster conversion
-
163 template <typename SrcChannelV, typename DstChannelV>
-
164 struct channel_converter_unsigned_impl<SrcChannelV, DstChannelV, true, true>
-
165  : channel_converter_unsigned_integral
-
166  <
-
167  SrcChannelV,
-
168  DstChannelV,
-
169  mp11::mp_less
-
170  <
-
171  unsigned_integral_max_value<SrcChannelV>,
-
172  unsigned_integral_max_value<DstChannelV>
-
173  >::value
-
174  >
-
175 {};
-
176 
-
180 
-
181 template <typename SrcChannelV, typename DstChannelV>
-
182 struct channel_converter_unsigned_integral<SrcChannelV,DstChannelV,true>
-
183  : public channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,true,
-
184  !(unsigned_integral_max_value<DstChannelV>::value % unsigned_integral_max_value<SrcChannelV>::value) > {};
-
185 
-
186 template <typename SrcChannelV, typename DstChannelV>
-
187 struct channel_converter_unsigned_integral<SrcChannelV,DstChannelV,false>
-
188  : public channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,false,
-
189  !(unsigned_integral_max_value<SrcChannelV>::value % unsigned_integral_max_value<DstChannelV>::value) > {};
-
190 
-
191 
-
195 
-
196 // Both source and destination are unsigned integral channels,
-
197 // the src max value is less than the dst max value,
-
198 // and the dst max value is divisible by the src max value
-
199 template <typename SrcChannelV, typename DstChannelV>
-
200 struct channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,true,true> {
-
201  DstChannelV operator()(SrcChannelV src) const {
-
202  using integer_t = typename unsigned_integral_max_value<DstChannelV>::value_type;
-
203  static const integer_t mul = unsigned_integral_max_value<DstChannelV>::value / unsigned_integral_max_value<SrcChannelV>::value;
-
204  return DstChannelV(src * mul);
-
205  }
-
206 };
-
207 
-
208 // Both source and destination are unsigned integral channels,
-
209 // the dst max value is less than (or equal to) the src max value,
-
210 // and the src max value is divisible by the dst max value
-
211 template <typename SrcChannelV, typename DstChannelV>
-
212 struct channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,false,true> {
-
213  DstChannelV operator()(SrcChannelV src) const {
-
214  using integer_t = typename unsigned_integral_max_value<SrcChannelV>::value_type;
-
215  static const integer_t div = unsigned_integral_max_value<SrcChannelV>::value / unsigned_integral_max_value<DstChannelV>::value;
-
216  static const integer_t div2 = div/2;
-
217  return DstChannelV((src + div2) / div);
-
218  }
-
219 };
-
220 
-
221 // Prevent overflow for the largest integral type
-
222 template <typename DstChannelV>
-
223 struct channel_converter_unsigned_integral_impl<uintmax_t,DstChannelV,false,true> {
-
224  DstChannelV operator()(uintmax_t src) const {
-
225  static const uintmax_t div = unsigned_integral_max_value<uint32_t>::value / unsigned_integral_max_value<DstChannelV>::value;
-
226  static const uintmax_t div2 = div/2;
-
227  if (src > unsigned_integral_max_value<uintmax_t>::value - div2)
-
228  return unsigned_integral_max_value<DstChannelV>::value;
-
229  return DstChannelV((src + div2) / div);
-
230  }
-
231 };
-
232 
-
233 // Both source and destination are unsigned integral channels,
-
234 // and the dst max value is not divisible by the src max value
-
235 // See if you can represent the expression (src * dst_max) / src_max in integral form
-
236 template <typename SrcChannelV, typename DstChannelV, bool SrcLessThanDst>
-
237 struct channel_converter_unsigned_integral_impl<SrcChannelV, DstChannelV, SrcLessThanDst, false>
-
238  : channel_converter_unsigned_integral_nondivisible
-
239  <
-
240  SrcChannelV,
-
241  DstChannelV,
-
242  SrcLessThanDst,
-
243  mp11::mp_less
-
244  <
-
245  unsigned_integral_num_bits<uintmax_t>,
-
246  mp11::mp_plus
-
247  <
-
248  unsigned_integral_num_bits<SrcChannelV>,
-
249  unsigned_integral_num_bits<DstChannelV>
-
250  >
-
251  >::value
-
252  >
-
253 {};
-
254 
-
255 // Both source and destination are unsigned integral channels,
-
256 // the src max value is less than the dst max value,
-
257 // and the dst max value is not divisible by the src max value
-
258 // The expression (src * dst_max) / src_max fits in an integer
-
259 template <typename SrcChannelV, typename DstChannelV>
-
260 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV, DstChannelV, true, false>
-
261 {
-
262  DstChannelV operator()(SrcChannelV src) const
-
263  {
-
264  using dest_t = typename base_channel_type<DstChannelV>::type;
-
265  return DstChannelV(
-
266  static_cast<dest_t>(src * unsigned_integral_max_value<DstChannelV>::value)
-
267  / unsigned_integral_max_value<SrcChannelV>::value);
-
268  }
-
269 };
-
270 
-
271 // Both source and destination are unsigned integral channels,
-
272 // the src max value is less than the dst max value,
-
273 // and the dst max value is not divisible by the src max value
-
274 // The expression (src * dst_max) / src_max cannot fit in an integer (overflows). Use a double
-
275 template <typename SrcChannelV, typename DstChannelV>
-
276 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV, DstChannelV, true, true>
-
277 {
-
278  DstChannelV operator()(SrcChannelV src) const
-
279  {
-
280  static const double mul
-
281  = unsigned_integral_max_value<DstChannelV>::value
-
282  / double(unsigned_integral_max_value<SrcChannelV>::value);
-
283  return DstChannelV(src * mul);
-
284  }
-
285 };
-
286 
-
287 // Both source and destination are unsigned integral channels,
-
288 // the dst max value is less than (or equal to) the src max value,
-
289 // and the src max value is not divisible by the dst max value
-
290 template <typename SrcChannelV, typename DstChannelV, bool CannotFit>
-
291 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV,DstChannelV,false,CannotFit> {
-
292  DstChannelV operator()(SrcChannelV src) const {
-
293 
-
294  using src_integer_t = typename detail::unsigned_integral_max_value<SrcChannelV>::value_type;
-
295  using dst_integer_t = typename detail::unsigned_integral_max_value<DstChannelV>::value_type;
-
296 
-
297  static const double div = unsigned_integral_max_value<SrcChannelV>::value
-
298  / static_cast< double >( unsigned_integral_max_value<DstChannelV>::value );
-
299 
-
300  static const src_integer_t div2 = static_cast< src_integer_t >( div / 2.0 );
-
301 
-
302  return DstChannelV( static_cast< dst_integer_t >(( static_cast< double >( src + div2 ) / div )));
-
303  }
-
304 };
-
305 
-
306 } // namespace detail
-
307 
-
311 
-
312 template <typename DstChannelV> struct channel_converter_unsigned<float32_t,DstChannelV> {
-
313  using argument_type = float32_t;
-
314  using result_type = DstChannelV;
-
315  DstChannelV operator()(float32_t x) const
-
316  {
-
317  using dst_integer_t = typename detail::unsigned_integral_max_value<DstChannelV>::value_type;
-
318  return DstChannelV( static_cast< dst_integer_t >(x*channel_traits<DstChannelV>::max_value()+0.5f ));
-
319  }
-
320 };
-
321 
-
322 template <typename SrcChannelV> struct channel_converter_unsigned<SrcChannelV,float32_t> {
-
323  using argument_type = float32_t;
-
324  using result_type = SrcChannelV;
-
325  float32_t operator()(SrcChannelV x) const { return float32_t(x/float(channel_traits<SrcChannelV>::max_value())); }
-
326 };
-
327 
-
328 template <> struct channel_converter_unsigned<float32_t,float32_t> {
-
329  using argument_type = float32_t;
-
330  using result_type = float32_t;
-
331  float32_t operator()(float32_t x) const { return x; }
-
332 };
-
333 
+
151  auto operator()(SrcChannelV src) const -> DstChannelV
+
152  {
+
153  return DstChannelV(channel_traits<DstChannelV>::min_value() +
+
154  (src - channel_traits<SrcChannelV>::min_value()) / channel_range<SrcChannelV>() * channel_range<DstChannelV>());
+
155  }
+
156 
+
157 private:
+
158  template <typename C>
+
159  static auto channel_range() -> double
+
160  {
+
161  return double(channel_traits<C>::max_value()) - double(channel_traits<C>::min_value());
+
162  }
+
163 };
+
164 
+
165 // When both the source and the destination are integral channels, perform a faster conversion
+
166 template <typename SrcChannelV, typename DstChannelV>
+
167 struct channel_converter_unsigned_impl<SrcChannelV, DstChannelV, true, true>
+
168  : channel_converter_unsigned_integral
+
169  <
+
170  SrcChannelV,
+
171  DstChannelV,
+
172  mp11::mp_less
+
173  <
+
174  unsigned_integral_max_value<SrcChannelV>,
+
175  unsigned_integral_max_value<DstChannelV>
+
176  >::value
+
177  >
+
178 {};
+
179 
+
183 
+
184 template <typename SrcChannelV, typename DstChannelV>
+
185 struct channel_converter_unsigned_integral<SrcChannelV,DstChannelV,true>
+
186  : public channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,true,
+
187  !(unsigned_integral_max_value<DstChannelV>::value % unsigned_integral_max_value<SrcChannelV>::value) > {};
+
188 
+
189 template <typename SrcChannelV, typename DstChannelV>
+
190 struct channel_converter_unsigned_integral<SrcChannelV,DstChannelV,false>
+
191  : public channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,false,
+
192  !(unsigned_integral_max_value<SrcChannelV>::value % unsigned_integral_max_value<DstChannelV>::value) > {};
+
193 
+
194 
+
198 
+
199 // Both source and destination are unsigned integral channels,
+
200 // the src max value is less than the dst max value,
+
201 // and the dst max value is divisible by the src max value
+
202 template <typename SrcChannelV, typename DstChannelV>
+
203 struct channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,true,true> {
+
204  auto operator()(SrcChannelV src) const -> DstChannelV
+
205  {
+
206  using integer_t = typename unsigned_integral_max_value<DstChannelV>::value_type;
+
207  static const integer_t mul = unsigned_integral_max_value<DstChannelV>::value / unsigned_integral_max_value<SrcChannelV>::value;
+
208  return DstChannelV(src * mul);
+
209  }
+
210 };
+
211 
+
212 // Both source and destination are unsigned integral channels,
+
213 // the dst max value is less than (or equal to) the src max value,
+
214 // and the src max value is divisible by the dst max value
+
215 template <typename SrcChannelV, typename DstChannelV>
+
216 struct channel_converter_unsigned_integral_impl<SrcChannelV,DstChannelV,false,true> {
+
217  auto operator()(SrcChannelV src) const -> DstChannelV
+
218  {
+
219  using integer_t = typename unsigned_integral_max_value<SrcChannelV>::value_type;
+
220  static const integer_t div = unsigned_integral_max_value<SrcChannelV>::value / unsigned_integral_max_value<DstChannelV>::value;
+
221  static const integer_t div2 = div/2;
+
222  return DstChannelV((src + div2) / div);
+
223  }
+
224 };
+
225 
+
226 // Prevent overflow for the largest integral type
+
227 template <typename DstChannelV>
+
228 struct channel_converter_unsigned_integral_impl<uintmax_t,DstChannelV,false,true> {
+
229  auto operator()(uintmax_t src) const -> DstChannelV
+
230  {
+
231  static const uintmax_t div = unsigned_integral_max_value<uint32_t>::value / unsigned_integral_max_value<DstChannelV>::value;
+
232  static const uintmax_t div2 = div/2;
+
233  if (src > unsigned_integral_max_value<uintmax_t>::value - div2)
+
234  return unsigned_integral_max_value<DstChannelV>::value;
+
235  return DstChannelV((src + div2) / div);
+
236  }
+
237 };
+
238 
+
239 // Both source and destination are unsigned integral channels,
+
240 // and the dst max value is not divisible by the src max value
+
241 // See if you can represent the expression (src * dst_max) / src_max in integral form
+
242 template <typename SrcChannelV, typename DstChannelV, bool SrcLessThanDst>
+
243 struct channel_converter_unsigned_integral_impl<SrcChannelV, DstChannelV, SrcLessThanDst, false>
+
244  : channel_converter_unsigned_integral_nondivisible
+
245  <
+
246  SrcChannelV,
+
247  DstChannelV,
+
248  SrcLessThanDst,
+
249  mp11::mp_less
+
250  <
+
251  unsigned_integral_num_bits<uintmax_t>,
+
252  mp11::mp_plus
+
253  <
+
254  unsigned_integral_num_bits<SrcChannelV>,
+
255  unsigned_integral_num_bits<DstChannelV>
+
256  >
+
257  >::value
+
258  >
+
259 {};
+
260 
+
261 // Both source and destination are unsigned integral channels,
+
262 // the src max value is less than the dst max value,
+
263 // and the dst max value is not divisible by the src max value
+
264 // The expression (src * dst_max) / src_max fits in an integer
+
265 template <typename SrcChannelV, typename DstChannelV>
+
266 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV, DstChannelV, true, false>
+
267 {
+
268  auto operator()(SrcChannelV src) const -> DstChannelV
+
269  {
+
270  using dest_t = typename base_channel_type<DstChannelV>::type;
+
271  return DstChannelV(
+
272  static_cast<dest_t>(src * unsigned_integral_max_value<DstChannelV>::value)
+
273  / unsigned_integral_max_value<SrcChannelV>::value);
+
274  }
+
275 };
+
276 
+
277 // Both source and destination are unsigned integral channels,
+
278 // the src max value is less than the dst max value,
+
279 // and the dst max value is not divisible by the src max value
+
280 // The expression (src * dst_max) / src_max cannot fit in an integer (overflows). Use a double
+
281 template <typename SrcChannelV, typename DstChannelV>
+
282 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV, DstChannelV, true, true>
+
283 {
+
284  auto operator()(SrcChannelV src) const -> DstChannelV
+
285  {
+
286  static const double mul
+
287  = unsigned_integral_max_value<DstChannelV>::value
+
288  / double(unsigned_integral_max_value<SrcChannelV>::value);
+
289  return DstChannelV(src * mul);
+
290  }
+
291 };
+
292 
+
293 // Both source and destination are unsigned integral channels,
+
294 // the dst max value is less than (or equal to) the src max value,
+
295 // and the src max value is not divisible by the dst max value
+
296 template <typename SrcChannelV, typename DstChannelV, bool CannotFit>
+
297 struct channel_converter_unsigned_integral_nondivisible<SrcChannelV,DstChannelV,false,CannotFit>
+
298 {
+
299  auto operator()(SrcChannelV src) const -> DstChannelV
+
300  {
+
301  using src_integer_t = typename detail::unsigned_integral_max_value<SrcChannelV>::value_type;
+
302  using dst_integer_t = typename detail::unsigned_integral_max_value<DstChannelV>::value_type;
+
303 
+
304  static const double div = unsigned_integral_max_value<SrcChannelV>::value
+
305  / static_cast< double >( unsigned_integral_max_value<DstChannelV>::value );
+
306 
+
307  static const src_integer_t div2 = static_cast< src_integer_t >( div / 2.0 );
+
308 
+
309  return DstChannelV( static_cast< dst_integer_t >(( static_cast< double >( src + div2 ) / div )));
+
310  }
+
311 };
+
312 
+
313 } // namespace detail
+
314 
+
318 
+
319 template <typename DstChannelV> struct channel_converter_unsigned<float32_t,DstChannelV> {
+
320  using argument_type = float32_t;
+
321  using result_type = DstChannelV;
+
322  auto operator()(float32_t x) const -> DstChannelV
+
323  {
+
324  using dst_integer_t = typename detail::unsigned_integral_max_value<DstChannelV>::value_type;
+
325  return DstChannelV( static_cast< dst_integer_t >(x*channel_traits<DstChannelV>::max_value()+0.5f ));
+
326  }
+
327 };
+
328 
+
329 template <typename SrcChannelV> struct channel_converter_unsigned<SrcChannelV,float32_t> {
+
330  using argument_type = float32_t;
+
331  using result_type = SrcChannelV;
+
332  auto operator()(SrcChannelV x) const -> float32_t { return float32_t(x/float(channel_traits<SrcChannelV>::max_value())); }
+
333 };
334 
-
336 template <> struct channel_converter_unsigned<uint32_t,float32_t> {
-
337  using argument_type = uint32_t;
-
338  using result_type = float32_t;
-
339  float32_t operator()(uint32_t x) const {
-
340  // unfortunately without an explicit check it is possible to get a round-off error. We must ensure that max_value of uint32_t matches max_value of float32_t
-
341  if (x>=channel_traits<uint32_t>::max_value()) return channel_traits<float32_t>::max_value();
-
342  return float(x) / float(channel_traits<uint32_t>::max_value());
-
343  }
-
344 };
-
346 template <> struct channel_converter_unsigned<float32_t,uint32_t> {
-
347  using argument_type = float32_t;
-
348  using result_type = uint32_t;
-
349  uint32_t operator()(float32_t x) const {
-
350  // unfortunately without an explicit check it is possible to get a round-off error. We must ensure that max_value of uint32_t matches max_value of float32_t
-
351  if (x>=channel_traits<float32_t>::max_value())
-
352  return channel_traits<uint32_t>::max_value();
-
353 
-
354  auto const max_value = channel_traits<uint32_t>::max_value();
-
355  auto const result = x * static_cast<float32_t::base_channel_t>(max_value) + 0.5f;
-
356  return static_cast<uint32_t>(result);
-
357  }
-
358 };
-
359 
-
361 
-
362 namespace detail {
-
363 // Converting from signed to unsigned integral channel.
-
364 // It is both a unary function, and a metafunction (thus requires the 'type' nested alias, which equals result_type)
-
365 template <typename ChannelValue> // Model ChannelValueConcept
-
366 struct channel_convert_to_unsigned : public detail::identity<ChannelValue> {
-
367  using type = ChannelValue;
-
368 };
-
369 
-
370 template <> struct channel_convert_to_unsigned<int8_t> {
-
371  using argument_type = int8_t;
-
372  using result_type = uint8_t;
-
373  using type = uint8_t;
-
374  type operator()(int8_t val) const {
-
375  return static_cast<uint8_t>(static_cast<uint32_t>(val) + 128u);
-
376  }
+
335 template <> struct channel_converter_unsigned<float32_t,float32_t> {
+
336  using argument_type = float32_t;
+
337  using result_type = float32_t;
+
338  auto operator()(float32_t x) const -> float32_t { return x; }
+
339 };
+
340 
+
341 
+
343 template <> struct channel_converter_unsigned<uint32_t,float32_t> {
+
344  using argument_type = uint32_t;
+
345  using result_type = float32_t;
+
346  auto operator()(uint32_t x) const -> float32_t
+
347  {
+
348  // unfortunately without an explicit check it is possible to get a round-off error. We must ensure that max_value of uint32_t matches max_value of float32_t
+
349  if (x>=channel_traits<uint32_t>::max_value()) return channel_traits<float32_t>::max_value();
+
350  return float(x) / float(channel_traits<uint32_t>::max_value());
+
351  }
+
352 };
+
354 template <> struct channel_converter_unsigned<float32_t,uint32_t> {
+
355  using argument_type = float32_t;
+
356  using result_type = uint32_t;
+
357  auto operator()(float32_t x) const -> uint32_t
+
358  {
+
359  // unfortunately without an explicit check it is possible to get a round-off error. We must ensure that max_value of uint32_t matches max_value of float32_t
+
360  if (x>=channel_traits<float32_t>::max_value())
+
361  return channel_traits<uint32_t>::max_value();
+
362 
+
363  auto const max_value = channel_traits<uint32_t>::max_value();
+
364  auto const result = x * static_cast<float32_t::base_channel_t>(max_value) + 0.5f;
+
365  return static_cast<uint32_t>(result);
+
366  }
+
367 };
+
368 
+
370 
+
371 namespace detail {
+
372 // Converting from signed to unsigned integral channel.
+
373 // It is both a unary function, and a metafunction (thus requires the 'type' nested alias, which equals result_type)
+
374 template <typename ChannelValue> // Model ChannelValueConcept
+
375 struct channel_convert_to_unsigned : public detail::identity<ChannelValue> {
+
376  using type = ChannelValue;
377 };
378 
-
379 template <> struct channel_convert_to_unsigned<int16_t> {
-
380  using argument_type = int16_t;
-
381  using result_type = uint16_t;
-
382  using type = uint16_t;
-
383  type operator()(int16_t val) const {
-
384  return static_cast<uint16_t>(static_cast<uint32_t>(val) + 32768u);
+
379 template <> struct channel_convert_to_unsigned<int8_t> {
+
380  using argument_type = int8_t;
+
381  using result_type = uint8_t;
+
382  using type = uint8_t;
+
383  type operator()(int8_t val) const {
+
384  return static_cast<uint8_t>(static_cast<uint32_t>(val) + 128u);
385  }
386 };
387 
-
388 template <> struct channel_convert_to_unsigned<int32_t> {
-
389  using argument_type = int32_t;
-
390  using result_type = uint32_t;
-
391  using type = uint32_t;
-
392  type operator()(int32_t val) const {
-
393  return static_cast<uint32_t>(val)+(1u<<31);
+
388 template <> struct channel_convert_to_unsigned<int16_t> {
+
389  using argument_type = int16_t;
+
390  using result_type = uint16_t;
+
391  using type = uint16_t;
+
392  type operator()(int16_t val) const {
+
393  return static_cast<uint16_t>(static_cast<uint32_t>(val) + 32768u);
394  }
395 };
396 
-
397 
-
398 // Converting from unsigned to signed integral channel
-
399 // It is both a unary function, and a metafunction (thus requires the 'type' nested alias, which equals result_type)
-
400 template <typename ChannelValue> // Model ChannelValueConcept
-
401 struct channel_convert_from_unsigned : public detail::identity<ChannelValue> {
-
402  using type = ChannelValue;
-
403 };
-
404 
-
405 template <> struct channel_convert_from_unsigned<int8_t> {
-
406  using argument_type = uint8_t;
-
407  using result_type = int8_t;
-
408  using type = int8_t;
-
409  type operator()(uint8_t val) const {
-
410  return static_cast<int8_t>(static_cast<int32_t>(val) - 128);
-
411  }
+
397 template <> struct channel_convert_to_unsigned<int32_t> {
+
398  using argument_type = int32_t;
+
399  using result_type = uint32_t;
+
400  using type = uint32_t;
+
401  type operator()(int32_t val) const {
+
402  return static_cast<uint32_t>(val)+(1u<<31);
+
403  }
+
404 };
+
405 
+
406 
+
407 // Converting from unsigned to signed integral channel
+
408 // It is both a unary function, and a metafunction (thus requires the 'type' nested alias, which equals result_type)
+
409 template <typename ChannelValue> // Model ChannelValueConcept
+
410 struct channel_convert_from_unsigned : public detail::identity<ChannelValue> {
+
411  using type = ChannelValue;
412 };
413 
-
414 template <> struct channel_convert_from_unsigned<int16_t> {
-
415  using argument_type = uint16_t;
-
416  using result_type = int16_t;
-
417  using type = int16_t;
-
418  type operator()(uint16_t val) const {
-
419  return static_cast<int16_t>(static_cast<int32_t>(val) - 32768);
+
414 template <> struct channel_convert_from_unsigned<int8_t> {
+
415  using argument_type = uint8_t;
+
416  using result_type = int8_t;
+
417  using type = int8_t;
+
418  type operator()(uint8_t val) const {
+
419  return static_cast<int8_t>(static_cast<int32_t>(val) - 128);
420  }
421 };
422 
-
423 template <> struct channel_convert_from_unsigned<int32_t> {
-
424  using argument_type = uint32_t;
-
425  using result_type = int32_t;
-
426  using type = int32_t;
-
427  type operator()(uint32_t val) const {
-
428  return static_cast<int32_t>(val - (1u<<31));
+
423 template <> struct channel_convert_from_unsigned<int16_t> {
+
424  using argument_type = uint16_t;
+
425  using result_type = int16_t;
+
426  using type = int16_t;
+
427  type operator()(uint16_t val) const {
+
428  return static_cast<int16_t>(static_cast<int32_t>(val) - 32768);
429  }
430 };
431 
-
432 } // namespace detail
-
433 
-
436 template <typename SrcChannelV, typename DstChannelV> // Model ChannelValueConcept
- -
438  using argument_type = SrcChannelV;
-
439  using result_type = DstChannelV;
-
440  DstChannelV operator()(const SrcChannelV& src) const {
-
441  using to_unsigned = detail::channel_convert_to_unsigned<SrcChannelV>;
-
442  using from_unsigned = detail::channel_convert_from_unsigned<DstChannelV>;
-
443  using converter_unsigned = channel_converter_unsigned<typename to_unsigned::result_type, typename from_unsigned::argument_type>;
-
444  return from_unsigned()(converter_unsigned()(to_unsigned()(src)));
-
445  }
-
446 };
-
447 
-
450 template <typename DstChannel, typename SrcChannel> // Model ChannelConcept (could be channel references)
-
451 inline typename channel_traits<DstChannel>::value_type channel_convert(const SrcChannel& src) {
- -
453  typename channel_traits<DstChannel>::value_type>()(src);
-
454 }
-
455 
- -
461  template <typename Ch1, typename Ch2>
-
462  void operator()(const Ch1& src, Ch2& dst) const {
-
463  dst=channel_convert<Ch2>(src);
-
464  }
-
465 };
+
432 template <> struct channel_convert_from_unsigned<int32_t> {
+
433  using argument_type = uint32_t;
+
434  using result_type = int32_t;
+
435  using type = int32_t;
+
436  type operator()(uint32_t val) const {
+
437  return static_cast<int32_t>(val - (1u<<31));
+
438  }
+
439 };
+
440 
+
441 } // namespace detail
+
442 
+
445 template <typename SrcChannelV, typename DstChannelV> // Model ChannelValueConcept
+ +
447  using argument_type = SrcChannelV;
+
448  using result_type = DstChannelV;
+
449  auto operator()(SrcChannelV const& src) const -> DstChannelV
+
450  {
+
451  using to_unsigned = detail::channel_convert_to_unsigned<SrcChannelV>;
+
452  using from_unsigned = detail::channel_convert_from_unsigned<DstChannelV>;
+
453  using converter_unsigned = channel_converter_unsigned<typename to_unsigned::result_type, typename from_unsigned::argument_type>;
+
454  return from_unsigned()(converter_unsigned()(to_unsigned()(src)));
+
455  }
+
456 };
+
457 
+
460 template <typename DstChannel, typename SrcChannel> // Model ChannelConcept (could be channel references)
+
461 inline auto channel_convert(SrcChannel const& src) -> typename channel_traits<DstChannel>::value_type
+
462 {
+ +
464  typename channel_traits<DstChannel>::value_type>()(src);
+
465 }
466 
-
467 namespace detail {
-
468  // fast integer division by 255
-
469  inline uint32_t div255(uint32_t in) { uint32_t tmp=in+128; return (tmp + (tmp>>8))>>8; }
-
470 
-
471  // fast integer divison by 32768
-
472  inline uint32_t div32768(uint32_t in) { return (in+16384)>>15; }
-
473 }
-
474 
+ +
472  template <typename Ch1, typename Ch2>
+
473  void operator()(Ch1 const& src, Ch2& dst) const
+
474  {
+
475  dst=channel_convert<Ch2>(src);
+
476  }
+
477 };
+
478 
+
479 namespace detail
+
480 {
+
481  // fast integer division by 255
+
482  inline auto div255(uint32_t in) -> uint32_t
+
483  {
+
484  uint32_t tmp = in + 128;
+
485  return (tmp + (tmp >> 8)) >> 8;
+
486  }
487 
-
489 template <typename ChannelValue>
- -
491  using first_argument_type = ChannelValue;
-
492  using second_argument_type = ChannelValue;
-
493  using result_type = ChannelValue;
-
494  ChannelValue operator()(ChannelValue a, ChannelValue b) const {
-
495  return ChannelValue(static_cast<typename base_channel_type<ChannelValue>::type>(a / double(channel_traits<ChannelValue>::max_value()) * b));
-
496  }
-
497 };
-
498 
-
500 template<> struct channel_multiplier_unsigned<uint8_t> {
-
501  using first_argument_type = uint8_t;
-
502  using second_argument_type = uint8_t;
-
503  using result_type = uint8_t;
-
504  uint8_t operator()(uint8_t a, uint8_t b) const { return uint8_t(detail::div255(uint32_t(a) * uint32_t(b))); }
-
505 };
-
506 
-
508 template<> struct channel_multiplier_unsigned<uint16_t> {
-
509  using first_argument_type = uint16_t;
-
510  using second_argument_type = uint16_t;
-
511  using result_type = uint16_t;
-
512  uint16_t operator()(uint16_t a, uint16_t b) const { return uint16_t((uint32_t(a) * uint32_t(b))/65535); }
-
513 };
-
514 
- -
517  using first_argument_type = float32_t;
-
518  using second_argument_type = float32_t;
-
519  using result_type = float32_t;
-
520  float32_t operator()(float32_t a, float32_t b) const { return a*b; }
-
521 };
-
522 
-
524 template <typename ChannelValue>
- -
526  using first_argument_type = ChannelValue;
-
527  using second_argument_type = ChannelValue;
-
528  using result_type = ChannelValue;
-
529  ChannelValue operator()(ChannelValue a, ChannelValue b) const {
-
530  using to_unsigned = detail::channel_convert_to_unsigned<ChannelValue>;
-
531  using from_unsigned = detail::channel_convert_from_unsigned<ChannelValue>;
- -
533  return from_unsigned()(multiplier_unsigned()(to_unsigned()(a), to_unsigned()(b)));
-
534  }
-
535 };
-
536 
-
538 template <typename Channel> // Models ChannelConcept (could be a channel reference)
-
539 inline typename channel_traits<Channel>::value_type channel_multiply(Channel a, Channel b) {
- -
541 }
+
488  // fast integer divison by 32768
+
489  inline auto div32768(uint32_t in) -> uint32_t
+
490  {
+
491  return (in + 16384) >> 15;
+
492  }
+
493 }
+
494 
+
507 
+
509 template <typename ChannelValue>
+ +
511  using first_argument_type = ChannelValue;
+
512  using second_argument_type = ChannelValue;
+
513  using result_type = ChannelValue;
+
514  auto operator()(ChannelValue a, ChannelValue b) const -> ChannelValue
+
515  {
+
516  return ChannelValue(static_cast<typename base_channel_type<ChannelValue>::type>(a / double(channel_traits<ChannelValue>::max_value()) * b));
+
517  }
+
518 };
+
519 
+
521 template<> struct channel_multiplier_unsigned<uint8_t> {
+
522  using first_argument_type = uint8_t;
+
523  using second_argument_type = uint8_t;
+
524  using result_type = uint8_t;
+
525  auto operator()(uint8_t a, uint8_t b) const -> uint8_t { return uint8_t(detail::div255(uint32_t(a) * uint32_t(b))); }
+
526 };
+
527 
+
529 template<> struct channel_multiplier_unsigned<uint16_t> {
+
530  using first_argument_type = uint16_t;
+
531  using second_argument_type = uint16_t;
+
532  using result_type = uint16_t;
+
533  auto operator()(uint16_t a, uint16_t b) const -> uint16_t { return uint16_t((uint32_t(a) * uint32_t(b))/65535); }
+
534 };
+
535 
+ +
538  using first_argument_type = float32_t;
+
539  using second_argument_type = float32_t;
+
540  using result_type = float32_t;
+
541  auto operator()(float32_t a, float32_t b) const -> float32_t { return a*b; }
+
542 };
543 
-
555 
-
558 template <typename Channel> // Models ChannelConcept (could be a channel reference)
-
559 inline typename channel_traits<Channel>::value_type channel_invert(Channel x) {
-
560 
-
561  using base_t = typename base_channel_type<Channel>::type;
-
562  using promoted_t = typename promote_integral<base_t>::type;
-
563  promoted_t const promoted_x = x;
-
564  promoted_t const promoted_max = channel_traits<Channel>::max_value();
-
565  promoted_t const promoted_min = channel_traits<Channel>::min_value();
-
566  promoted_t const promoted_inverted_x = promoted_max - promoted_x + promoted_min;
-
567  auto const inverted_x = static_cast<base_t>(promoted_inverted_x);
-
568  return inverted_x;
-
569 }
-
570 
-
571 } } // namespace boost::gil
-
572 
-
573 #endif
+
545 template <typename ChannelValue>
+ +
547  using first_argument_type = ChannelValue;
+
548  using second_argument_type = ChannelValue;
+
549  using result_type = ChannelValue;
+
550  auto operator()(ChannelValue a, ChannelValue b) const -> ChannelValue
+
551  {
+
552  using to_unsigned = detail::channel_convert_to_unsigned<ChannelValue>;
+
553  using from_unsigned = detail::channel_convert_from_unsigned<ChannelValue>;
+ +
555  return from_unsigned()(multiplier_unsigned()(to_unsigned()(a), to_unsigned()(b)));
+
556  }
+
557 };
+
558 
+
560 template <typename Channel> // Models ChannelConcept (could be a channel reference)
+
561 inline auto channel_multiply(Channel a, Channel b) -> typename channel_traits<Channel>::value_type
+
562 {
+ +
564 }
+
566 
+
578 
+
581 template <typename Channel> // Models ChannelConcept (could be a channel reference)
+
582 inline auto channel_invert(Channel x) -> typename channel_traits<Channel>::value_type
+
583 {
+
584  using base_t = typename base_channel_type<Channel>::type;
+
585  using promoted_t = typename promote_integral<base_t>::type;
+
586  promoted_t const promoted_x = x;
+
587  promoted_t const promoted_max = channel_traits<Channel>::max_value();
+
588  promoted_t const promoted_min = channel_traits<Channel>::min_value();
+
589  promoted_t const promoted_inverted_x = promoted_max - promoted_x + promoted_min;
+
590  auto const inverted_x = static_cast<base_t>(promoted_inverted_x);
+
591  return inverted_x;
+
592 }
+
593 
+
594 }} // namespace boost::gil
+
595 
+
596 #endif
+
auto channel_invert(Channel x) -> typename channel_traits< Channel >::value_type
Default implementation. Provide overloads for performance.
Definition: channel_algorithm.hpp:582
This is the default implementation. Performance specializatons are provided.
Definition: channel_algorithm.hpp:26
-
Same as channel_converter, except it takes the destination channel by reference, which allows us to m...
Definition: channel_algorithm.hpp:460
-
channel_traits< DstChannel >::value_type channel_convert(const SrcChannel &src)
Converting from one channel type to another.
Definition: channel_algorithm.hpp:451
-
identity taken from SGI STL.
Definition: utilities.hpp:209
-
A function object to multiply two channels. result = a * b / max_value.
Definition: channel_algorithm.hpp:525
-
channel_traits< Channel >::value_type channel_multiply(Channel a, Channel b)
A function multiplying two channels. result = a * b / max_value.
Definition: channel_algorithm.hpp:539
-
This is the default implementation. Performance specializatons are provided.
Definition: channel_algorithm.hpp:490
-
A unary function object converting between channel types.
Definition: channel_algorithm.hpp:437
-
channel_traits< Channel >::value_type channel_invert(Channel x)
Default implementation. Provide overloads for performance.
Definition: channel_algorithm.hpp:559
-
scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
Definition: typedefs.hpp:124
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
+
Same as channel_converter, except it takes the destination channel by reference, which allows us to m...
Definition: channel_algorithm.hpp:471
+
identity taken from SGI STL.
Definition: utilities.hpp:210
+
A function object to multiply two channels. result = a * b / max_value.
Definition: channel_algorithm.hpp:546
+
auto channel_multiply(Channel a, Channel b) -> typename channel_traits< Channel >::value_type
A function multiplying two channels. result = a * b / max_value.
Definition: channel_algorithm.hpp:561
+
This is the default implementation. Performance specializatons are provided.
Definition: channel_algorithm.hpp:510
+
auto channel_convert(SrcChannel const &src) -> typename channel_traits< DstChannel >::value_type
Converting from one channel type to another.
Definition: channel_algorithm.hpp:461
+
A unary function object converting between channel types.
Definition: channel_algorithm.hpp:446
+
scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
Definition: typedefs.hpp:153
diff --git a/html/reference/channel__numeric__operations_8hpp_source.html b/html/reference/channel__numeric__operations_8hpp_source.html index d467dc22a..f4ad5bbb7 100644 --- a/html/reference/channel__numeric__operations_8hpp_source.html +++ b/html/reference/channel__numeric__operations_8hpp_source.html @@ -60,7 +60,7 @@ $(function() {
11 
12 #include <boost/gil/channel.hpp>
13 
-
14 namespace boost { namespace gil {
+
14 namespace boost { namespace gil {
15 
16 // Function objects and utilities for channel-wise numeric operations.
17 //
@@ -255,6 +255,7 @@ $(function() {
Arithmetic operation of division of two channel values.
Definition: channel_numeric_operations.hpp:98
auto operator()(ChannelRef1 ch1, ChannelRef2 ch2) const -> ChannelRef2
Definition: channel_numeric_operations.hpp:244
Operation of setting channel value to zero.
Definition: channel_numeric_operations.hpp:220
+
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Arithmetic operation of multiplication of two channel values.
Definition: channel_numeric_operations.hpp:77
Arithmetic operation of adding scalar to channel value.
Definition: channel_numeric_operations.hpp:119
Arithmetic operation of dividing channel value by scalar.
Definition: channel_numeric_operations.hpp:181
diff --git a/html/reference/classboost_1_1gil_1_1any__image-members.html b/html/reference/classboost_1_1gil_1_1any__image-members.html index 1ac4b4741..1ca4c1877 100644 --- a/html/reference/classboost_1_1gil_1_1any__image-members.html +++ b/html/reference/classboost_1_1gil_1_1any__image-members.html @@ -39,7 +39,7 @@ $(function() {
@@ -58,7 +58,7 @@ $(function() {
- + diff --git a/html/reference/classboost_1_1gil_1_1any__image.html b/html/reference/classboost_1_1gil_1_1any__image.html index 91bdf7b03..47c27f0c3 100644 --- a/html/reference/classboost_1_1gil_1_1any__image.html +++ b/html/reference/classboost_1_1gil_1_1any__image.html @@ -39,7 +39,7 @@ $(function() {
@@ -90,9 +90,9 @@ template<typename Image > template<typename ... OtherImages>
- - + + diff --git a/html/reference/classboost_1_1gil_1_1any__image__view-members.html b/html/reference/classboost_1_1gil_1_1any__image__view-members.html index 6728c5881..fb8687ee1 100644 --- a/html/reference/classboost_1_1gil_1_1any__image__view-members.html +++ b/html/reference/classboost_1_1gil_1_1any__image__view-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1any__image__view.html b/html/reference/classboost_1_1gil_1_1any__image__view.html index dc6cba855..cbd7dfd1f 100644 --- a/html/reference/classboost_1_1gil_1_1any__image__view.html +++ b/html/reference/classboost_1_1gil_1_1any__image__view.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1bit__range-members.html b/html/reference/classboost_1_1gil_1_1bit__range-members.html index ba129f0fe..4810e813e 100644 --- a/html/reference/classboost_1_1gil_1_1bit__range-members.html +++ b/html/reference/classboost_1_1gil_1_1bit__range-members.html @@ -39,7 +39,7 @@ $(function() {
@@ -51,20 +51,20 @@ $(function() {

This is the complete list of members for bit_range< RangeSize, IsMutable >, including all inherited members.

 Nboost
 NboostDefined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
 Ngil
operator=(Image const &img) (defined in any_image< Images >)any_image< Images >inline
operator=(any_image< OtherImages... > const &img) (defined in any_image< Images >)any_image< Images >inline
point_t typedef (defined in any_image< Images >)any_image< Images >
recreate(const point_t &dims, unsigned alignment=1) (defined in any_image< Images >)any_image< Images >inline
recreate(point_t const &dims, unsigned alignment=1) (defined in any_image< Images >)any_image< Images >inline
recreate(x_coord_t width, y_coord_t height, unsigned alignment=1) (defined in any_image< Images >)any_image< Images >inline
view_t typedef (defined in any_image< Images >)any_image< Images >
width() const (defined in any_image< Images >)any_image< Images >inline
any_imageoperator= (any_image< OtherImages... > const &img)
 
-void recreate (const point_t &dims, unsigned alignment=1)
 
+void recreate (point_t const &dims, unsigned alignment=1)
 
void recreate (x_coord_t width, y_coord_t height, unsigned alignment=1)
 
- - + + - + - + - - - - + + + +
bit_advance(difference_type num_bits) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_distance_to(const bit_range &b) const (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_offset() const (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_distance_to(bit_range const &b) const -> difference_type (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_offset() const -> int (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_range (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >friend
bit_range() (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_range(byte_t *current_byte, int bit_offset) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_range(const bit_range &br) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_range(bit_range const &br) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
bit_range(const bit_range< RangeSize, M > &br) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
byte_t typedef (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >
current_byte() const (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
current_byte() const -> byte_t * (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
difference_type typedef (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >
operator++() (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator--() (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator=(const bit_range &br) (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator==(const bit_range &br) const (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator++() -> bit_range & (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator--() -> bit_range & (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator=(bit_range const &br) -> bit_range & (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
operator==(bit_range const &br) const (defined in bit_range< RangeSize, IsMutable >)bit_range< RangeSize, IsMutable >inline
diff --git a/html/reference/classboost_1_1gil_1_1bit__range.html b/html/reference/classboost_1_1gil_1_1bit__range.html index ddeae64f0..93a3cb281 100644 --- a/html/reference/classboost_1_1gil_1_1bit__range.html +++ b/html/reference/classboost_1_1gil_1_1bit__range.html @@ -39,7 +39,7 @@ $(function() {
@@ -68,37 +68,37 @@ Public Member Functions  bit_range (byte_t *current_byte, int bit_offset)   -bit_range (const bit_range &br) -  +bit_range (bit_range const &br) +  template<bool M>  bit_range (const bit_range< RangeSize, M > &br)   - -bit_rangeoperator= (const bit_range &br) -  - -bool operator== (const bit_range &br) const -  - -bit_rangeoperator++ () -  - -bit_rangeoperator-- () -  + +auto operator= (bit_range const &br) -> bit_range & +  + +bool operator== (bit_range const &br) const +  + +auto operator++ () -> bit_range & +  + +auto operator-- () -> bit_range & +  void bit_advance (difference_type num_bits)   - -difference_type bit_distance_to (const bit_range &b) const -  - -byte_t * current_byte () const -  - -int bit_offset () const -  + +auto bit_distance_to (bit_range const &b) const -> difference_type +  + +auto current_byte () const -> byte_t * +  + +auto bit_offset () const -> int + 

Detailed Description

template<int RangeSize, bool IsMutable>
diff --git a/html/reference/classboost_1_1gil_1_1color__convert__deref__fn-members.html b/html/reference/classboost_1_1gil_1_1color__convert__deref__fn-members.html index 5d373a57c..b40ddeeae 100644 --- a/html/reference/classboost_1_1gil_1_1color__convert__deref__fn-members.html +++ b/html/reference/classboost_1_1gil_1_1color__convert__deref__fn-members.html @@ -39,7 +39,7 @@ $(function() {

diff --git a/html/reference/classboost_1_1gil_1_1color__convert__deref__fn.html b/html/reference/classboost_1_1gil_1_1color__convert__deref__fn.html index 50f492a5d..75a241d66 100644 --- a/html/reference/classboost_1_1gil_1_1color__convert__deref__fn.html +++ b/html/reference/classboost_1_1gil_1_1color__convert__deref__fn.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1deref__compose-members.html b/html/reference/classboost_1_1gil_1_1deref__compose-members.html index 621ee5c3a..7699756e0 100644 --- a/html/reference/classboost_1_1gil_1_1deref__compose-members.html +++ b/html/reference/classboost_1_1gil_1_1deref__compose-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1deref__compose.html b/html/reference/classboost_1_1gil_1_1deref__compose.html index ba158bcd8..ca4e4ef17 100644 --- a/html/reference/classboost_1_1gil_1_1deref__compose.html +++ b/html/reference/classboost_1_1gil_1_1deref__compose.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor-members.html b/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor-members.html index 3011bed2f..907427bcf 100644 --- a/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor-members.html +++ b/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor.html b/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor.html index 0344013fc..f4b50a847 100644 --- a/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor.html +++ b/html/reference/classboost_1_1gil_1_1dereference__iterator__adaptor.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__image__type-members.html b/html/reference/classboost_1_1gil_1_1derived__image__type-members.html index 620ec9f69..c2cd6b4c4 100644 --- a/html/reference/classboost_1_1gil_1_1derived__image__type-members.html +++ b/html/reference/classboost_1_1gil_1_1derived__image__type-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__image__type.html b/html/reference/classboost_1_1gil_1_1derived__image__type.html index dce859c9f..33daf656b 100644 --- a/html/reference/classboost_1_1gil_1_1derived__image__type.html +++ b/html/reference/classboost_1_1gil_1_1derived__image__type.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__iterator__type-members.html b/html/reference/classboost_1_1gil_1_1derived__iterator__type-members.html index ea1f6df3e..bf4bb0835 100644 --- a/html/reference/classboost_1_1gil_1_1derived__iterator__type-members.html +++ b/html/reference/classboost_1_1gil_1_1derived__iterator__type-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__iterator__type.html b/html/reference/classboost_1_1gil_1_1derived__iterator__type.html index 909a7b3e0..90154d6b4 100644 --- a/html/reference/classboost_1_1gil_1_1derived__iterator__type.html +++ b/html/reference/classboost_1_1gil_1_1derived__iterator__type.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type-members.html b/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type-members.html index eb1f18568..b6f06357a 100644 --- a/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type-members.html +++ b/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type.html b/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type.html index 2229184a9..e7874eea5 100644 --- a/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type.html +++ b/html/reference/classboost_1_1gil_1_1derived__pixel__reference__type.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__view__type-members.html b/html/reference/classboost_1_1gil_1_1derived__view__type-members.html index a7ac47590..d31d3ddf2 100644 --- a/html/reference/classboost_1_1gil_1_1derived__view__type-members.html +++ b/html/reference/classboost_1_1gil_1_1derived__view__type-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1derived__view__type.html b/html/reference/classboost_1_1gil_1_1derived__view__type.html index 322359313..b6772ba0b 100644 --- a/html/reference/classboost_1_1gil_1_1derived__view__type.html +++ b/html/reference/classboost_1_1gil_1_1derived__view__type.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n-members.html index c8f34108f..aa9f3e849 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n.html b/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n.html index 235c14033..0754709be 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1correlator__n.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device-members.html index 674207017..d73390f68 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device-members.html @@ -39,7 +39,7 @@ $(function() {
@@ -58,19 +58,19 @@ $(function() { file_stream_device(FILE *file)file_stream_device< FormatTag >inline flush() (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline format_tag_t typedef (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag > - get() (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline - get() const (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline + get() -> FILE * (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline + get() const -> FILE const * (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline getc() (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline getc_unchecked() (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline print_line(const std::string &line)file_stream_device< FormatTag >inline - read(byte_t *data, std::size_t count)file_stream_device< FormatTag >inline + read(byte_t *data, std::size_t count) -> std::size_tfile_stream_device< FormatTag >inline read(T(&buf)[N])file_stream_device< FormatTag >inline read_uint16()file_stream_device< FormatTag >inline read_uint32()file_stream_device< FormatTag >inline read_uint8()file_stream_device< FormatTag >inline seek(long count, int whence=SEEK_SET) (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline tell() (defined in file_stream_device< FormatTag >)file_stream_device< FormatTag >inline - write(const T *buf, std::size_t count)file_stream_device< FormatTag >inline + write(T const *buf, std::size_t count) -> std::size_tfile_stream_device< FormatTag >inline write(const T(&buf)[N])file_stream_device< FormatTag >inline write_uint16(uint16_t x)file_stream_device< FormatTag >inline write_uint32(uint32_t x)file_stream_device< FormatTag >inline diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device.html b/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device.html index 2f8ce3424..be20e49cc 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1file__stream__device.html @@ -39,7 +39,7 @@ $(function() {
@@ -79,20 +79,20 @@ Public Member Functions    file_stream_device (FILE *file)   - -FILE * get () -  - -const FILE * get () const -  + +auto get () -> FILE * +  + +auto get () const -> FILE const * +  int getc_unchecked ()   char getc ()   -std::size_t read (byte_t *data, std::size_t count) -  +auto read (byte_t *data, std::size_t count) -> std::size_t +  template<typename T , int N> void read (T(&buf)[N]) @@ -110,11 +110,11 @@ uint16_t read_uint32 ()  Reads 32 bit little endian integer.
  - + template<typename T > -std::size_t write (const T *buf, std::size_t count) - Writes number of elements from a buffer.
-  +auto write (T const *buf, std::size_t count) -> std::size_t + Writes number of elements from a buffer.
template<typename T , std::size_t N> void write (const T(&buf)[N]) @@ -333,8 +333,8 @@ class boost::gil::detail::file_stream_device< FormatTag >

Member Function Documentation

- -

◆ read()

+ +

◆ read()

@@ -343,7 +343,7 @@ class boost::gil::detail::file_stream_device< FormatTag > - + @@ -357,7 +357,8 @@ class boost::gil::detail::file_stream_device< FormatTag > - +
std::size_t read auto read ( byte_t *  data,
) -> std::size_t +
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1istream__device-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1istream__device-members.html index 929eab637..d4738b3ee 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1istream__device-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1istream__device-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1istream__device.html b/html/reference/classboost_1_1gil_1_1detail_1_1istream__device.html index ef59ace69..424dff58f 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1istream__device.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1istream__device.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor-members.html index 0e750280b..fcc4fca28 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor.html index 2f4d45a95..683603c85 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__1d__adaptor.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d-members.html index ff24de777..8024c0228 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d.html index ad9a989c8..f7ffa9062 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed-members.html index bd0827085..87a6a454d 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed.html b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed.html index 85697790a..9de5c8183 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1kernel__2d__fixed.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device-members.html index 6e84deb76..b11a1cf05 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device.html b/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device.html index c85d83901..f923e48a4 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1ostream__device.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor-members.html b/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor-members.html index 704e748f0..cd9a9d11d 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor-members.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor.html b/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor.html index df56c03f8..d8c62026a 100644 --- a/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor.html +++ b/html/reference/classboost_1_1gil_1_1detail_1_1step__iterator__adaptor.html @@ -39,7 +39,7 @@ $(function() {
@@ -78,12 +78,12 @@ using reference = type - - - - + + + +

Public Member Functions

step_iterator_adaptor (const Iterator &it, SFn step_fn=SFn())
 
-difference_type step () const
 
step_iterator_adaptor (Iterator const &it, SFn step_fn=SFn())
 
+auto step () const -> difference_type
 
diff --git a/html/reference/classboost_1_1gil_1_1histogram-members.html b/html/reference/classboost_1_1gil_1_1histogram-members.html index cddeeda1b..8dc1cd5cd 100644 --- a/html/reference/classboost_1_1gil_1_1histogram-members.html +++ b/html/reference/classboost_1_1gil_1_1histogram-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1histogram.html b/html/reference/classboost_1_1gil_1_1histogram.html index a6a28e640..14563958a 100644 --- a/html/reference/classboost_1_1gil_1_1histogram.html +++ b/html/reference/classboost_1_1gil_1_1histogram.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1image-members.html b/html/reference/classboost_1_1gil_1_1image-members.html index 01cbdd052..49881d279 100644 --- a/html/reference/classboost_1_1gil_1_1image-members.html +++ b/html/reference/classboost_1_1gil_1_1image-members.html @@ -39,7 +39,7 @@ $(function() {
@@ -60,9 +60,9 @@ $(function() {
- + - + @@ -72,13 +72,13 @@ $(function() { - + - + - + - + diff --git a/html/reference/classboost_1_1gil_1_1image.html b/html/reference/classboost_1_1gil_1_1image.html index f5e6a3e21..957721011 100644 --- a/html/reference/classboost_1_1gil_1_1image.html +++ b/html/reference/classboost_1_1gil_1_1image.html @@ -39,7 +39,7 @@ $(function() {
@@ -87,9 +87,9 @@ using 

Protected Attributes

height() const (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >friend
image(std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inlineexplicit
image(const point_t &dimensions, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(point_t const &dimensions, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(x_coord_t width, y_coord_t height, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(const point_t &dimensions, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(point_t const &dimensions, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc()) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(const image &img) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
image(const image< P2, IP2, Alloc2 > &img) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
operator=(const Img &img) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
operator=(image &&img) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
point_t typedef (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >
recreate(const point_t &dims, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(point_t const &dims, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(x_coord_t width, y_coord_t height, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(const point_t &dims, const Pixel &p_in, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(point_t const &dims, const Pixel &p_in, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment=0) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(const point_t &dims, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(point_t const &dims, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(x_coord_t width, y_coord_t height, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(const point_t &dims, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(point_t const &dims, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
recreate(x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
swap(image &img) (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >inline
value_type typedef (defined in image< Pixel, IsPlanar, Alloc >)image< Pixel, IsPlanar, Alloc >
y_coord_t = coor
- - + + @@ -99,15 +99,15 @@ y_coord_t  - - + + - - + + @@ -144,27 +144,27 @@ Alloc const &  - - + + - - + + - - + + - - + + diff --git a/html/reference/classboost_1_1gil_1_1image__view-members.html b/html/reference/classboost_1_1gil_1_1image__view-members.html index d543c9bb2..834b7204a 100644 --- a/html/reference/classboost_1_1gil_1_1image__view-members.html +++ b/html/reference/classboost_1_1gil_1_1image__view-members.html @@ -39,7 +39,7 @@ $(function() {
diff --git a/html/reference/classboost_1_1gil_1_1image__view.html b/html/reference/classboost_1_1gil_1_1image__view.html index 34fbaaa62..5960d8dbb 100644 --- a/html/reference/classboost_1_1gil_1_1image__view.html +++ b/html/reference/classboost_1_1gil_1_1image__view.html @@ -39,7 +39,7 @@ $(function() {
@@ -410,7 +410,7 @@ class boost::gil::image_view< Loc >
  • image_view.hpp
  • -
    void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
    std::fill(I,I,V) with I being a iterator_from_2d
    Definition: algorithm.hpp:365
    +
    void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
    std::fill(I,I,V) with I being a iterator_from_2d
    Definition: algorithm.hpp:369
    diff --git a/html/reference/classboost_1_1gil_1_1iterator__from__2d-members.html b/html/reference/classboost_1_1gil_1_1iterator__from__2d-members.html index 51567b559..7050661dd 100644 --- a/html/reference/classboost_1_1gil_1_1iterator__from__2d-members.html +++ b/html/reference/classboost_1_1gil_1_1iterator__from__2d-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1iterator__from__2d.html b/html/reference/classboost_1_1gil_1_1iterator__from__2d.html index 45268353a..96285077c 100644 --- a/html/reference/classboost_1_1gil_1_1iterator__from__2d.html +++ b/html/reference/classboost_1_1gil_1_1iterator__from__2d.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1kernel__1d-members.html b/html/reference/classboost_1_1gil_1_1kernel__1d-members.html index 01d0f0b25..49bce31c3 100644 --- a/html/reference/classboost_1_1gil_1_1kernel__1d-members.html +++ b/html/reference/classboost_1_1gil_1_1kernel__1d-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1kernel__1d.html b/html/reference/classboost_1_1gil_1_1kernel__1d.html index aeadd8885..bed5bfbe5 100644 --- a/html/reference/classboost_1_1gil_1_1kernel__1d.html +++ b/html/reference/classboost_1_1gil_1_1kernel__1d.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1kernel__1d__fixed-members.html b/html/reference/classboost_1_1gil_1_1kernel__1d__fixed-members.html index 14226b8bc..1e91e0939 100644 --- a/html/reference/classboost_1_1gil_1_1kernel__1d__fixed-members.html +++ b/html/reference/classboost_1_1gil_1_1kernel__1d__fixed-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1kernel__1d__fixed.html b/html/reference/classboost_1_1gil_1_1kernel__1d__fixed.html index a5389131c..38c0ace71 100644 --- a/html/reference/classboost_1_1gil_1_1kernel__1d__fixed.html +++ b/html/reference/classboost_1_1gil_1_1kernel__1d__fixed.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1memory__based__2d__locator-members.html b/html/reference/classboost_1_1gil_1_1memory__based__2d__locator-members.html index bc7dd0b64..53e830ad4 100644 --- a/html/reference/classboost_1_1gil_1_1memory__based__2d__locator-members.html +++ b/html/reference/classboost_1_1gil_1_1memory__based__2d__locator-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1memory__based__2d__locator.html b/html/reference/classboost_1_1gil_1_1memory__based__2d__locator.html index 02c44ce5e..d9bb385f5 100644 --- a/html/reference/classboost_1_1gil_1_1memory__based__2d__locator.html +++ b/html/reference/classboost_1_1gil_1_1memory__based__2d__locator.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1memory__based__step__iterator-members.html b/html/reference/classboost_1_1gil_1_1memory__based__step__iterator-members.html index e368a594b..f0968da73 100644 --- a/html/reference/classboost_1_1gil_1_1memory__based__step__iterator-members.html +++ b/html/reference/classboost_1_1gil_1_1memory__based__step__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,13 +50,13 @@ $(function() {

    This is the complete list of members for memory_based_step_iterator, including all inherited members.

    Public Member Functions

    -const point_t & dimensions () const
     
    +point_t const & dimensions () const
     
    x_coord_t width () const
     
    height () co
     image (std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
    image (const point_t &dimensions, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
    image (point_t const &dimensions, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
     image (x_coord_t width, y_coord_t height, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
    image (const point_t &dimensions, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
    image (point_t const &dimensions, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
     image (x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment=0, const Alloc alloc_in=Alloc())
     
    allocat
    void swap (image &img)
     
    -void recreate (const point_t &dims, std::size_t alignment=0)
     
    +void recreate (point_t const &dims, std::size_t alignment=0)
     
    void recreate (x_coord_t width, y_coord_t height, std::size_t alignment=0)
     
    -void recreate (const point_t &dims, const Pixel &p_in, std::size_t alignment=0)
     
    +void recreate (point_t const &dims, const Pixel &p_in, std::size_t alignment=0)
     
    void recreate (x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment=0)
     
    -void recreate (const point_t &dims, std::size_t alignment, const Alloc alloc_in)
     
    +void recreate (point_t const &dims, std::size_t alignment, const Alloc alloc_in)
     
    void recreate (x_coord_t width, y_coord_t height, std::size_t alignment, const Alloc alloc_in)
     
    -void recreate (const point_t &dims, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in)
     
    +void recreate (point_t const &dims, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in)
     
    void recreate (x_coord_t width, y_coord_t height, const Pixel &p_in, std::size_t alignment, const Alloc alloc_in)
     
    - - + + - + diff --git a/html/reference/classboost_1_1gil_1_1memory__based__step__iterator.html b/html/reference/classboost_1_1gil_1_1memory__based__step__iterator.html index 225e525bb..3babdd562 100644 --- a/html/reference/classboost_1_1gil_1_1memory__based__step__iterator.html +++ b/html/reference/classboost_1_1gil_1_1memory__based__step__iterator.html @@ -39,7 +39,7 @@ $(function() {
    @@ -81,17 +81,17 @@ Public Member Functions template<typename I2 >
    - - + + - - - - + + + +
    base() (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    base() const (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    base() -> x_iterator & (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    base() const -> x_iterator const & (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    difference_type typedef (defined in memory_based_step_iterator)memory_based_step_iterator
    memory_based_step_iterator() (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    memory_based_step_iterator(Iterator it, std::ptrdiff_t memunit_step) (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    memory_based_step_iterator(const memory_based_step_iterator< I2 > &it) (defined in memory_based_step_iterator)memory_based_step_iteratorinline
    operator[](difference_type d) constmemory_based_step_iteratorinline
    operator[](difference_type d) const -> referencememory_based_step_iteratorinline
    parent_t typedef (defined in memory_based_step_iterator)memory_based_step_iterator
    reference typedef (defined in memory_based_step_iterator)memory_based_step_iterator
    set_step(std::ptrdiff_t memunit_step) (defined in memory_based_step_iterator)memory_based_step_iteratorinline
     memory_based_step_iterator (const memory_based_step_iterator< I2 > &it)
     
    reference operator[] (difference_type d) const
     
    auto operator[] (difference_type d) const -> reference
     
    void set_step (std::ptrdiff_t memunit_step)
     
    -x_iterator & base ()
     
    -x_iterator const & base () const
     
    +auto base () -> x_iterator &
     
    +auto base () const -> x_iterator const &
     

    Detailed Description

    MEMORY-BASED STEP ITERATOR.

    @@ -100,8 +100,8 @@ x_iterator const & ba

    Pixel step iterators are used to provide iteration over non-adjacent pixels. Common use is a vertical traversal, where the step is the row stride.

    Another application is as a sub-channel view. For example, a red intensity image over interleaved RGB data would use a step iterator adaptor with step sizeof(channel_t)*3 In the latter example the step size could be fixed at compile time for efficiency. Compile-time fixed step can be implemented by providing a step function object that takes the step as a template

    Member Function Documentation

    - -

    ◆ operator[]()

    + +

    ◆ operator[]()

    @@ -110,11 +110,11 @@ x_iterator const & ba - + - +
    reference operator[] auto operator[] ( difference_type  d) const const -> reference
    diff --git a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4-members.html b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4-members.html index ed00fae40..f15cacb27 100644 --- a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4-members.html +++ b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,13 +51,13 @@ $(function() {

    This is the complete list of members for packed_dynamic_channel_reference< BitField, NumBits, false >, including all inherited members.

    - - + + - - - + + +
    const_reference typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >
    first_bit() const (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    get() const (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    first_bit() const -> unsigned int (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    get() const -> integer_t (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    integer_t typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >
    mutable_reference typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >
    packed_dynamic_channel_reference(const void *data_ptr, unsigned first_bit) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference(const const_reference &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference(const mutable_reference &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference(void const *data_ptr, unsigned first_bit) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference(const_reference const &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference(mutable_reference const &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >inline
    packed_dynamic_channel_reference< BitField, NumBits, true > (defined in packed_dynamic_channel_reference< BitField, NumBits, false >)packed_dynamic_channel_reference< BitField, NumBits, false >friend
    diff --git a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4.html b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4.html index 976a60797..d558323f6 100644 --- a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4.html +++ b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01false_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -74,21 +74,21 @@ using integer_t = type - - - - - - - - - - + + + + + + + + + +

    Public Member Functions

    packed_dynamic_channel_reference (const void *data_ptr, unsigned first_bit)
     
    packed_dynamic_channel_reference (const const_reference &ref)
     
    packed_dynamic_channel_reference (const mutable_reference &ref)
     
    -unsigned first_bit () const
     
    -integer_t get () const
     
    packed_dynamic_channel_reference (void const *data_ptr, unsigned first_bit)
     
    packed_dynamic_channel_reference (const_reference const &ref)
     
    packed_dynamic_channel_reference (mutable_reference const &ref)
     
    +auto first_bit () const -> unsigned int
     
    +auto get () const -> integer_t
     
    diff --git a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4-members.html b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4-members.html index 4aac87c94..28be902bc 100644 --- a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4-members.html +++ b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,16 +51,16 @@ $(function() {

    This is the complete list of members for packed_dynamic_channel_reference< BitField, NumBits, true >, including all inherited members.

    Friends

    - - + + - - - - + + + + - +
    const_reference typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >
    first_bit() const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    get() const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    first_bit() const -> unsigned int (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    get() const -> integer_t (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    integer_t typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >
    mutable_reference typedef (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >
    operator=(integer_t value) const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(const mutable_reference &ref) const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(const const_reference &ref) const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(const packed_channel_reference< BitField1, FirstBit1, NumBits, Mutable1 > &ref) const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(integer_t value) const -> packed_dynamic_channel_reference const & (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(mutable_reference const &ref) const -> packed_dynamic_channel_reference const & (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(const_reference const &ref) const -> packed_dynamic_channel_reference const & (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    operator=(packed_channel_reference< BitField1, FirstBit1, NumBits, Mutable1 > const &ref) const -> packed_dynamic_channel_reference const & (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    packed_dynamic_channel_reference(void *data_ptr, unsigned first_bit) (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    packed_dynamic_channel_reference(const packed_dynamic_channel_reference &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    packed_dynamic_channel_reference(packed_dynamic_channel_reference const &ref) (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    packed_dynamic_channel_reference< BitField, NumBits, false > (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >friend
    set_unsafe(integer_t value) const (defined in packed_dynamic_channel_reference< BitField, NumBits, true >)packed_dynamic_channel_reference< BitField, NumBits, true >inline
    diff --git a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4.html b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4.html index 03a7f6223..07419580e 100644 --- a/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4.html +++ b/html/reference/classboost_1_1gil_1_1packed__dynamic__channel__reference_3_01_bit_field_00_01_num_bits_00_01true_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -77,28 +77,28 @@ Public Member Functions  packed_dynamic_channel_reference (void *data_ptr, unsigned first_bit)   -packed_dynamic_channel_reference (const packed_dynamic_channel_reference &ref) -  - -packed_dynamic_channel_reference const & operator= (integer_t value) const -  - -const packed_dynamic_channel_reference & operator= (const mutable_reference &ref) const -  - -const packed_dynamic_channel_reference & operator= (const const_reference &ref) const -  - +packed_dynamic_channel_reference (packed_dynamic_channel_reference const &ref) +  + +auto operator= (integer_t value) const -> packed_dynamic_channel_reference const & +  + +auto operator= (mutable_reference const &ref) const -> packed_dynamic_channel_reference const & +  + +auto operator= (const_reference const &ref) const -> packed_dynamic_channel_reference const & +  + template<typename BitField1 , int FirstBit1, bool Mutable1> -const packed_dynamic_channel_reference & operator= (const packed_channel_reference< BitField1, FirstBit1, NumBits, Mutable1 > &ref) const -  - -unsigned first_bit () const -  - -integer_t get () const -  +auto operator= (packed_channel_reference< BitField1, FirstBit1, NumBits, Mutable1 > const &ref) const -> packed_dynamic_channel_reference const & +  + +auto first_bit () const -> unsigned int +  + +auto get () const -> integer_t +  void set_unsafe (integer_t value) const   diff --git a/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base-members.html b/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base-members.html index c88be40ba..082685261 100644 --- a/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base-members.html +++ b/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -52,7 +52,7 @@ $(function() { - + diff --git a/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base.html b/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base.html index e1493458a..2f7de454b 100644 --- a/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base.html +++ b/html/reference/classboost_1_1gil_1_1pixel__2d__locator__base.html @@ -39,7 +39,7 @@ $(function() {
    @@ -123,10 +123,10 @@ template<std::size_t D> template<std::size_t D>
    - - - + + diff --git a/html/reference/classboost_1_1gil_1_1point-members.html b/html/reference/classboost_1_1gil_1_1point-members.html index a4e819dd4..a5729125a 100644 --- a/html/reference/classboost_1_1gil_1_1point-members.html +++ b/html/reference/classboost_1_1gil_1_1point-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1point.html b/html/reference/classboost_1_1gil_1_1point.html index fd69df828..872bbc794 100644 --- a/html/reference/classboost_1_1gil_1_1point.html +++ b/html/reference/classboost_1_1gil_1_1point.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1promote__integral-members.html b/html/reference/classboost_1_1gil_1_1promote__integral-members.html index c0fcafeef..85e70105e 100644 --- a/html/reference/classboost_1_1gil_1_1promote__integral-members.html +++ b/html/reference/classboost_1_1gil_1_1promote__integral-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1promote__integral.html b/html/reference/classboost_1_1gil_1_1promote__integral.html index 11dafc775..a9ef2212c 100644 --- a/html/reference/classboost_1_1gil_1_1promote__integral.html +++ b/html/reference/classboost_1_1gil_1_1promote__integral.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1scanline__read__iterator-members.html b/html/reference/classboost_1_1gil_1_1scanline__read__iterator-members.html index 695f6c923..bca94119d 100644 --- a/html/reference/classboost_1_1gil_1_1scanline__read__iterator-members.html +++ b/html/reference/classboost_1_1gil_1_1scanline__read__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1scanline__read__iterator.html b/html/reference/classboost_1_1gil_1_1scanline__read__iterator.html index daa7e169c..96ebb0f3d 100644 --- a/html/reference/classboost_1_1gil_1_1scanline__read__iterator.html +++ b/html/reference/classboost_1_1gil_1_1scanline__read__iterator.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/classboost_1_1gil_1_1virtual__2d__locator-members.html b/html/reference/classboost_1_1gil_1_1virtual__2d__locator-members.html index ed34e2827..6ac15a63a 100644 --- a/html/reference/classboost_1_1gil_1_1virtual__2d__locator-members.html +++ b/html/reference/classboost_1_1gil_1_1virtual__2d__locator-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -52,7 +52,7 @@ $(function() {
    axis_iterator() (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    axis_iterator() const (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    axis_iterator(const point_t &p) const (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    axis_iterator(point_t const &p) const (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    cache_location(const difference_type &d) const (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    cache_location(x_coord_t dx, y_coord_t dy) const (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >inline
    cached_location_t typedef (defined in pixel_2d_locator_base< Loc, XIterator, YIterator >)pixel_2d_locator_base< Loc, XIterator, YIterator >
    axis< D >::iterator const & axis_iterator () const
     
    +
    template<std::size_t D>
    axis< D >::iterator axis_iterator (const point_t &p) const
     
    axis< D >::iterator axis_iterator (point_t const &p) const
     
    reference operator() (x_coord_t dx, y_coord_t dy) const
     
    - + diff --git a/html/reference/classboost_1_1gil_1_1virtual__2d__locator.html b/html/reference/classboost_1_1gil_1_1virtual__2d__locator.html index 2f3e658b7..0b6766917 100644 --- a/html/reference/classboost_1_1gil_1_1virtual__2d__locator.html +++ b/html/reference/classboost_1_1gil_1_1virtual__2d__locator.html @@ -39,7 +39,7 @@ $(function() {
    @@ -208,9 +208,9 @@ axis< D >::iterator & 
    - - + + diff --git a/html/reference/cmyk_8hpp_source.html b/html/reference/cmyk_8hpp_source.html index f2d0f6cd5..5fd7a1978 100644 --- a/html/reference/cmyk_8hpp_source.html +++ b/html/reference/cmyk_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <cstddef>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    20 
    22 struct cyan_t {};
    @@ -78,20 +78,21 @@ $(function() {
    39 
    42 template <typename IC>
    - -
    44 planar_cmyk_view(std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes)
    +
    43 inline auto planar_cmyk_view(std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes)
    +
    45 {
    46  using view_t = typename type_from_x_iterator<planar_pixel_iterator<IC,cmyk_t> >::view_t;
    47  return view_t(width, height, typename view_t::locator(planar_pixel_iterator<IC,cmyk_t>(c,m,y,k), rowsize_in_bytes));
    48 }
    49 
    -
    50 } } // namespace gil
    +
    50 }} // namespace gil
    51 
    52 #endif
    Yellow.
    Definition: cmyk.hpp:28
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    -
    type_from_x_iterator< planar_pixel_iterator< IC, cmyk_t > >::view_t planar_cmyk_view(std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes)
    from raw CMYK planar data
    Definition: cmyk.hpp:44
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    +
    auto planar_cmyk_view(std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, cmyk_t >>::view_t
    from raw CMYK planar data
    Definition: cmyk.hpp:43
    Given a pixel iterator defining access to pixels along a row, returns the types of the corresponding ...
    Definition: metafunctions.hpp:302
    Black.
    Definition: cmyk.hpp:31
    Cyan.
    Definition: cmyk.hpp:22
    diff --git a/html/reference/color_8hpp_source.html b/html/reference/color_8hpp_source.html index d2a0fdd6f..59bd3315a 100644 --- a/html/reference/color_8hpp_source.html +++ b/html/reference/color_8hpp_source.html @@ -72,7 +72,7 @@ $(function() {
    23 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    24 #endif
    25 
    -
    26 namespace boost { namespace gil {
    +
    26 namespace boost { namespace gil {
    27 
    36 template <typename CS>
    @@ -122,6 +122,7 @@ $(function() {
    98 
    99 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Two color spaces are compatible if they are the same.
    Definition: color.hpp:60
    Color space type concept.
    Definition: color.hpp:37
    Channel mapping concept.
    Definition: color.hpp:78
    diff --git a/html/reference/color__base_8hpp_source.html b/html/reference/color__base_8hpp_source.html index 3abc7d9d6..cc6eccba8 100644 --- a/html/reference/color__base_8hpp_source.html +++ b/html/reference/color__base_8hpp_source.html @@ -67,14 +67,14 @@ $(function() {
    18 
    19 #include <type_traits>
    20 
    -
    21 namespace boost { namespace gil {
    +
    21 namespace boost { namespace gil {
    22 
    23 // Forward-declare
    24 template <typename P> P* memunit_advanced(const P* p, std::ptrdiff_t diff);
    25 
    26 // Forward-declare semantic_at_c
    27 template <int K, typename ColorBase>
    -
    28 auto semantic_at_c(ColorBase& p)
    +
    28 auto semantic_at_c(ColorBase& p)
    29  -> typename std::enable_if
    30  <
    31  !std::is_const<ColorBase>::value,
    @@ -83,7 +83,7 @@ $(function() {
    34 
    35 
    36 template <int K, typename ColorBase>
    -
    37 typename kth_semantic_element_const_reference_type<ColorBase,K>::type semantic_at_c(const ColorBase& p);
    +
    37 auto semantic_at_c(const ColorBase& p) -> typename kth_semantic_element_const_reference_type<ColorBase,K>::type;
    38 
    39 // Forward declare element_reference_type
    40 template <typename ColorBase> struct element_reference_type;
    @@ -216,8 +216,8 @@ $(function() {
    178  { return v1_; }
    179 
    180  // Support for planar_pixel_reference operator[]
    -
    181  Element at_c_dynamic(std::size_t i) const
    -
    182  {
    +
    181  auto at_c_dynamic(std::size_t i) const -> Element
    +
    182  {
    183  if (i == 0)
    184  return v0_;
    185  else
    @@ -312,8 +312,8 @@ $(function() {
    277  { return v2_; }
    278 
    279  // Support for planar_pixel_reference operator[]
    -
    280  Element at_c_dynamic(std::size_t i) const
    -
    281  {
    +
    280  auto at_c_dynamic(std::size_t i) const -> Element
    +
    281  {
    282  switch (i)
    283  {
    284  case 0: return v0_;
    @@ -424,8 +424,8 @@ $(function() {
    392  { return v3_; }
    393 
    394  // Support for planar_pixel_reference operator[]
    -
    395  Element at_c_dynamic(std::size_t i) const
    -
    396  {
    +
    395  auto at_c_dynamic(std::size_t i) const -> Element
    +
    396  {
    397  switch (i)
    398  {
    399  case 0: return v0_;
    @@ -556,8 +556,8 @@ $(function() {
    527  }
    528 
    529  // Support for planar_pixel_reference operator[]
    -
    530  Element at_c_dynamic(std::size_t i) const
    -
    531  {
    +
    530  auto at_c_dynamic(std::size_t i) const -> Element
    +
    531  {
    532  switch (i)
    533  {
    534  case 0: return v0_;
    @@ -698,11 +698,12 @@ $(function() {
    673 
    674 #endif
    -
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:529
    +
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:583
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto semantic_at_c(const ColorBase &p) -> typename kth_semantic_element_const_reference_type< ColorBase, K >::type
    A constant accessor to the K-th semantic element of a color base.
    Definition: color_base_algorithm.hpp:133
    Specifies the return type of the constant element accessor at_c of a homogeneous color base.
    Definition: color_base.hpp:41
    auto at_c(const detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< typename std::add_const< E >::type >::type
    Provides constant access to the K-th element, in physical order.
    Definition: color_base.hpp:642
    Specifies the return type of the mutable element accessor at_c of a homogeneous color base.
    Definition: color_base.hpp:40
    -
    kth_semantic_element_const_reference_type< ColorBase, K >::type semantic_at_c(const ColorBase &p)
    A constant accessor to the K-th semantic element of a color base.
    Definition: color_base_algorithm.hpp:133
    diff --git a/html/reference/color__base__algorithm_8hpp_source.html b/html/reference/color__base__algorithm_8hpp_source.html index 78a502d91..d82436777 100644 --- a/html/reference/color__base__algorithm_8hpp_source.html +++ b/html/reference/color__base__algorithm_8hpp_source.html @@ -67,7 +67,7 @@ $(function() {
    18 #include <algorithm>
    19 #include <type_traits>
    20 
    -
    21 namespace boost { namespace gil {
    +
    21 namespace boost { namespace gil {
    22 
    26 
    39 template <typename ColorBase>
    @@ -111,7 +111,7 @@ $(function() {
    114 
    117 template <int K, typename ColorBase>
    118 inline
    -
    119 auto semantic_at_c(ColorBase& p)
    +
    119 auto semantic_at_c(ColorBase& p)
    120  -> typename std::enable_if
    121  <
    122  !std::is_const<ColorBase>::value,
    @@ -123,7 +123,7 @@ $(function() {
    128 
    131 template <int K, typename ColorBase>
    132 inline
    -
    133 auto semantic_at_c(ColorBase const& p)
    +
    133 auto semantic_at_c(ColorBase const& p)
    134  -> typename kth_semantic_element_const_reference_type<ColorBase, K>::type
    135 {
    @@ -148,395 +148,427 @@ $(function() {
    185 struct color_element_const_reference_type : public kth_semantic_element_const_reference_type<ColorBase,color_index_type<ColorBase,Color>::value> {};
    186 
    189 template <typename ColorBase, typename Color>
    -
    190 typename color_element_reference_type<ColorBase,Color>::type get_color(ColorBase& cb, Color=Color()) {
    - -
    192 }
    -
    193 
    -
    196 template <typename ColorBase, typename Color>
    -
    197 typename color_element_const_reference_type<ColorBase,Color>::type get_color(const ColorBase& cb, Color=Color()) {
    - -
    199 }
    -
    200 
    -
    206 
    -
    218 template <typename ColorBase>
    -
    221 struct element_type : public kth_element_type<ColorBase, 0> {};
    -
    222 
    -
    225 template <typename ColorBase>
    -
    226 struct element_reference_type : public kth_element_reference_type<ColorBase, 0> {};
    -
    227 
    -
    230 template <typename ColorBase>
    -
    231 struct element_const_reference_type : public kth_element_const_reference_type<ColorBase, 0> {};
    -
    232 
    -
    233 
    -
    234 namespace detail {
    -
    235 
    -
    236 // compile-time recursion for per-element operations on color bases
    -
    237 template <int N>
    -
    238 struct element_recursion
    -
    239 {
    -
    240 
    -
    241 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
    -
    242 #pragma GCC diagnostic push
    -
    243 #pragma GCC diagnostic ignored "-Wconversion"
    -
    244 #pragma GCC diagnostic ignored "-Wfloat-equal"
    -
    245 #endif
    -
    246 
    -
    247  template <typename P1,typename P2>
    -
    248  static bool static_equal(const P1& p1, const P2& p2)
    -
    249  {
    -
    250  return element_recursion<N-1>::static_equal(p1,p2) &&
    -
    251  semantic_at_c<N-1>(p1)==semantic_at_c<N-1>(p2);
    -
    252  }
    -
    253 
    -
    254  template <typename P1,typename P2>
    -
    255  static void static_copy(const P1& p1, P2& p2)
    -
    256  {
    -
    257  element_recursion<N-1>::static_copy(p1,p2);
    -
    258  semantic_at_c<N-1>(p2)=semantic_at_c<N-1>(p1);
    -
    259  }
    -
    260 
    -
    261  template <typename P,typename T2>
    -
    262  static void static_fill(P& p, T2 v)
    -
    263  {
    -
    264  element_recursion<N-1>::static_fill(p,v);
    -
    265  semantic_at_c<N-1>(p)=v;
    -
    266  }
    -
    267 
    -
    268  template <typename Dst,typename Op>
    -
    269  static void static_generate(Dst& dst, Op op)
    -
    270  {
    -
    271  element_recursion<N-1>::static_generate(dst,op);
    -
    272  semantic_at_c<N-1>(dst)=op();
    -
    273  }
    -
    274 
    -
    275 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
    -
    276 #pragma GCC diagnostic pop
    -
    277 #endif
    +
    190 auto get_color(ColorBase& cb, Color=Color())
    +
    191  -> typename color_element_reference_type<ColorBase,Color>::type
    +
    192 {
    + +
    194 }
    +
    195 
    +
    198 template <typename ColorBase, typename Color>
    +
    199 auto get_color(const ColorBase& cb, Color=Color())
    +
    200  -> typename color_element_const_reference_type<ColorBase,Color>::type
    +
    201 {
    + +
    203 }
    +
    204 
    +
    210 
    +
    222 template <typename ColorBase>
    +
    225 struct element_type : public kth_element_type<ColorBase, 0> {};
    +
    226 
    +
    229 template <typename ColorBase>
    +
    230 struct element_reference_type : public kth_element_reference_type<ColorBase, 0> {};
    +
    231 
    +
    234 template <typename ColorBase>
    +
    235 struct element_const_reference_type : public kth_element_const_reference_type<ColorBase, 0> {};
    +
    236 
    +
    237 
    +
    238 namespace detail {
    +
    239 
    +
    240 // compile-time recursion for per-element operations on color bases
    +
    241 template <int N>
    +
    242 struct element_recursion
    +
    243 {
    +
    244 
    +
    245 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
    +
    246 #pragma GCC diagnostic push
    +
    247 #pragma GCC diagnostic ignored "-Wconversion"
    +
    248 #pragma GCC diagnostic ignored "-Wfloat-equal"
    +
    249 #endif
    +
    250 
    +
    251  template <typename P1,typename P2>
    +
    252  static bool static_equal(const P1& p1, const P2& p2)
    +
    253  {
    +
    254  return element_recursion<N-1>::static_equal(p1,p2) &&
    +
    255  semantic_at_c<N-1>(p1)==semantic_at_c<N-1>(p2);
    +
    256  }
    +
    257 
    +
    258  template <typename P1,typename P2>
    +
    259  static void static_copy(const P1& p1, P2& p2)
    +
    260  {
    +
    261  element_recursion<N-1>::static_copy(p1,p2);
    +
    262  semantic_at_c<N-1>(p2)=semantic_at_c<N-1>(p1);
    +
    263  }
    +
    264 
    +
    265  template <typename P,typename T2>
    +
    266  static void static_fill(P& p, T2 v)
    +
    267  {
    +
    268  element_recursion<N-1>::static_fill(p,v);
    +
    269  semantic_at_c<N-1>(p)=v;
    +
    270  }
    +
    271 
    +
    272  template <typename Dst,typename Op>
    +
    273  static void static_generate(Dst& dst, Op op)
    +
    274  {
    +
    275  element_recursion<N-1>::static_generate(dst,op);
    +
    276  semantic_at_c<N-1>(dst)=op();
    +
    277  }
    278 
    -
    279  //static_for_each with one source
    -
    280  template <typename P1,typename Op>
    -
    281  static Op static_for_each(P1& p1, Op op) {
    -
    282  Op op2(element_recursion<N-1>::static_for_each(p1,op));
    -
    283  op2(semantic_at_c<N-1>(p1));
    -
    284  return op2;
    -
    285  }
    -
    286  template <typename P1,typename Op>
    -
    287  static Op static_for_each(const P1& p1, Op op) {
    -
    288  Op op2(element_recursion<N-1>::static_for_each(p1,op));
    -
    289  op2(semantic_at_c<N-1>(p1));
    -
    290  return op2;
    -
    291  }
    -
    292  //static_for_each with two sources
    -
    293  template <typename P1,typename P2,typename Op>
    -
    294  static Op static_for_each(P1& p1, P2& p2, Op op) {
    -
    295  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    -
    296  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    -
    297  return op2;
    -
    298  }
    -
    299  template <typename P1,typename P2,typename Op>
    -
    300  static Op static_for_each(P1& p1, const P2& p2, Op op) {
    -
    301  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    -
    302  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    -
    303  return op2;
    -
    304  }
    -
    305  template <typename P1,typename P2,typename Op>
    -
    306  static Op static_for_each(const P1& p1, P2& p2, Op op) {
    -
    307  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    -
    308  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    -
    309  return op2;
    -
    310  }
    -
    311  template <typename P1,typename P2,typename Op>
    -
    312  static Op static_for_each(const P1& p1, const P2& p2, Op op) {
    -
    313  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    -
    314  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    -
    315  return op2;
    -
    316  }
    -
    317  //static_for_each with three sources
    -
    318  template <typename P1,typename P2,typename P3,typename Op>
    -
    319  static Op static_for_each(P1& p1, P2& p2, P3& p3, Op op) {
    -
    320  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    321  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    322  return op2;
    -
    323  }
    -
    324  template <typename P1,typename P2,typename P3,typename Op>
    -
    325  static Op static_for_each(P1& p1, P2& p2, const P3& p3, Op op) {
    -
    326  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    327  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    328  return op2;
    -
    329  }
    -
    330  template <typename P1,typename P2,typename P3,typename Op>
    -
    331  static Op static_for_each(P1& p1, const P2& p2, P3& p3, Op op) {
    -
    332  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    333  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    334  return op2;
    -
    335  }
    -
    336  template <typename P1,typename P2,typename P3,typename Op>
    -
    337  static Op static_for_each(P1& p1, const P2& p2, const P3& p3, Op op) {
    -
    338  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    339  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    340  return op2;
    -
    341  }
    -
    342  template <typename P1,typename P2,typename P3,typename Op>
    -
    343  static Op static_for_each(const P1& p1, P2& p2, P3& p3, Op op) {
    -
    344  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    345  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    346  return op2;
    -
    347  }
    -
    348  template <typename P1,typename P2,typename P3,typename Op>
    -
    349  static Op static_for_each(const P1& p1, P2& p2, const P3& p3, Op op) {
    -
    350  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    351  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    352  return op2;
    -
    353  }
    -
    354  template <typename P1,typename P2,typename P3,typename Op>
    -
    355  static Op static_for_each(const P1& p1, const P2& p2, P3& p3, Op op) {
    -
    356  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    357  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    358  return op2;
    -
    359  }
    -
    360  template <typename P1,typename P2,typename P3,typename Op>
    -
    361  static Op static_for_each(const P1& p1, const P2& p2, const P3& p3, Op op) {
    -
    362  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    -
    363  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    -
    364  return op2;
    -
    365  }
    -
    366  //static_transform with one source
    -
    367  template <typename P1,typename Dst,typename Op>
    -
    368  static Op static_transform(P1& src, Dst& dst, Op op) {
    -
    369  Op op2(element_recursion<N-1>::static_transform(src,dst,op));
    -
    370  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src));
    -
    371  return op2;
    -
    372  }
    -
    373  template <typename P1,typename Dst,typename Op>
    -
    374  static Op static_transform(const P1& src, Dst& dst, Op op) {
    -
    375  Op op2(element_recursion<N-1>::static_transform(src,dst,op));
    -
    376  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src));
    -
    377  return op2;
    -
    378  }
    -
    379  //static_transform with two sources
    -
    380  template <typename P1,typename P2,typename Dst,typename Op>
    -
    381  static Op static_transform(P1& src1, P2& src2, Dst& dst, Op op) {
    -
    382  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    -
    383  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    -
    384  return op2;
    -
    385  }
    -
    386  template <typename P1,typename P2,typename Dst,typename Op>
    -
    387  static Op static_transform(P1& src1, const P2& src2, Dst& dst, Op op) {
    -
    388  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    -
    389  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    -
    390  return op2;
    -
    391  }
    -
    392  template <typename P1,typename P2,typename Dst,typename Op>
    -
    393  static Op static_transform(const P1& src1, P2& src2, Dst& dst, Op op) {
    -
    394  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    -
    395  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    -
    396  return op2;
    -
    397  }
    -
    398  template <typename P1,typename P2,typename Dst,typename Op>
    -
    399  static Op static_transform(const P1& src1, const P2& src2, Dst& dst, Op op) {
    -
    400  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    -
    401  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    -
    402  return op2;
    -
    403  }
    -
    404 };
    -
    405 
    -
    406 // Termination condition of the compile-time recursion for element operations on a color base
    -
    407 template<> struct element_recursion<0> {
    -
    408  //static_equal
    -
    409  template <typename P1,typename P2>
    -
    410  static bool static_equal(const P1&, const P2&) { return true; }
    -
    411  //static_copy
    -
    412  template <typename P1,typename P2>
    -
    413  static void static_copy(const P1&, const P2&) {}
    -
    414  //static_fill
    -
    415  template <typename P, typename T2>
    -
    416  static void static_fill(const P&, T2) {}
    -
    417  //static_generate
    -
    418  template <typename Dst,typename Op>
    -
    419  static void static_generate(const Dst&,Op){}
    -
    420  //static_for_each with one source
    -
    421  template <typename P1,typename Op>
    -
    422  static Op static_for_each(const P1&,Op op){return op;}
    -
    423  //static_for_each with two sources
    -
    424  template <typename P1,typename P2,typename Op>
    -
    425  static Op static_for_each(const P1&,const P2&,Op op){return op;}
    -
    426  //static_for_each with three sources
    -
    427  template <typename P1,typename P2,typename P3,typename Op>
    -
    428  static Op static_for_each(const P1&,const P2&,const P3&,Op op){return op;}
    -
    429  //static_transform with one source
    -
    430  template <typename P1,typename Dst,typename Op>
    -
    431  static Op static_transform(const P1&,const Dst&,Op op){return op;}
    -
    432  //static_transform with two sources
    -
    433  template <typename P1,typename P2,typename Dst,typename Op>
    -
    434  static Op static_transform(const P1&,const P2&,const Dst&,Op op){return op;}
    -
    435 };
    -
    436 
    -
    437 // std::min and std::max don't have the mutable overloads...
    -
    438 template <typename Q> inline const Q& mutable_min(const Q& x, const Q& y) { return x<y ? x : y; }
    -
    439 template <typename Q> inline Q& mutable_min( Q& x, Q& y) { return x<y ? x : y; }
    -
    440 template <typename Q> inline const Q& mutable_max(const Q& x, const Q& y) { return x<y ? y : x; }
    -
    441 template <typename Q> inline Q& mutable_max( Q& x, Q& y) { return x<y ? y : x; }
    -
    442 
    -
    443 
    -
    444 // compile-time recursion for min/max element
    -
    445 template <int N>
    -
    446 struct min_max_recur {
    -
    447  template <typename P> static typename element_const_reference_type<P>::type max_(const P& p) {
    -
    448  return mutable_max(min_max_recur<N-1>::max_(p),semantic_at_c<N-1>(p));
    -
    449  }
    -
    450  template <typename P> static typename element_reference_type<P>::type max_( P& p) {
    -
    451  return mutable_max(min_max_recur<N-1>::max_(p),semantic_at_c<N-1>(p));
    -
    452  }
    -
    453  template <typename P> static typename element_const_reference_type<P>::type min_(const P& p) {
    -
    454  return mutable_min(min_max_recur<N-1>::min_(p),semantic_at_c<N-1>(p));
    -
    455  }
    -
    456  template <typename P> static typename element_reference_type<P>::type min_( P& p) {
    -
    457  return mutable_min(min_max_recur<N-1>::min_(p),semantic_at_c<N-1>(p));
    -
    458  }
    -
    459 };
    -
    460 
    -
    461 // termination condition of the compile-time recursion for min/max element
    -
    462 template <>
    -
    463 struct min_max_recur<1> {
    -
    464  template <typename P> static typename element_const_reference_type<P>::type max_(const P& p) { return semantic_at_c<0>(p); }
    -
    465  template <typename P> static typename element_reference_type<P>::type max_( P& p) { return semantic_at_c<0>(p); }
    -
    466  template <typename P> static typename element_const_reference_type<P>::type min_(const P& p) { return semantic_at_c<0>(p); }
    -
    467  template <typename P> static typename element_reference_type<P>::type min_( P& p) { return semantic_at_c<0>(p); }
    -
    468 };
    -
    469 } // namespace detail
    -
    470 
    +
    279 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
    +
    280 #pragma GCC diagnostic pop
    +
    281 #endif
    +
    282 
    +
    283  //static_for_each with one source
    +
    284  template <typename P1,typename Op>
    +
    285  static Op static_for_each(P1& p1, Op op) {
    +
    286  Op op2(element_recursion<N-1>::static_for_each(p1,op));
    +
    287  op2(semantic_at_c<N-1>(p1));
    +
    288  return op2;
    +
    289  }
    +
    290  template <typename P1,typename Op>
    +
    291  static Op static_for_each(const P1& p1, Op op) {
    +
    292  Op op2(element_recursion<N-1>::static_for_each(p1,op));
    +
    293  op2(semantic_at_c<N-1>(p1));
    +
    294  return op2;
    +
    295  }
    +
    296  //static_for_each with two sources
    +
    297  template <typename P1,typename P2,typename Op>
    +
    298  static Op static_for_each(P1& p1, P2& p2, Op op) {
    +
    299  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    +
    300  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    +
    301  return op2;
    +
    302  }
    +
    303  template <typename P1,typename P2,typename Op>
    +
    304  static Op static_for_each(P1& p1, const P2& p2, Op op) {
    +
    305  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    +
    306  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    +
    307  return op2;
    +
    308  }
    +
    309  template <typename P1,typename P2,typename Op>
    +
    310  static Op static_for_each(const P1& p1, P2& p2, Op op) {
    +
    311  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    +
    312  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    +
    313  return op2;
    +
    314  }
    +
    315  template <typename P1,typename P2,typename Op>
    +
    316  static Op static_for_each(const P1& p1, const P2& p2, Op op) {
    +
    317  Op op2(element_recursion<N-1>::static_for_each(p1,p2,op));
    +
    318  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2));
    +
    319  return op2;
    +
    320  }
    +
    321  //static_for_each with three sources
    +
    322  template <typename P1,typename P2,typename P3,typename Op>
    +
    323  static Op static_for_each(P1& p1, P2& p2, P3& p3, Op op) {
    +
    324  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    325  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    326  return op2;
    +
    327  }
    +
    328  template <typename P1,typename P2,typename P3,typename Op>
    +
    329  static Op static_for_each(P1& p1, P2& p2, const P3& p3, Op op) {
    +
    330  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    331  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    332  return op2;
    +
    333  }
    +
    334  template <typename P1,typename P2,typename P3,typename Op>
    +
    335  static Op static_for_each(P1& p1, const P2& p2, P3& p3, Op op) {
    +
    336  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    337  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    338  return op2;
    +
    339  }
    +
    340  template <typename P1,typename P2,typename P3,typename Op>
    +
    341  static Op static_for_each(P1& p1, const P2& p2, const P3& p3, Op op) {
    +
    342  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    343  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    344  return op2;
    +
    345  }
    +
    346  template <typename P1,typename P2,typename P3,typename Op>
    +
    347  static Op static_for_each(const P1& p1, P2& p2, P3& p3, Op op) {
    +
    348  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    349  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    350  return op2;
    +
    351  }
    +
    352  template <typename P1,typename P2,typename P3,typename Op>
    +
    353  static Op static_for_each(const P1& p1, P2& p2, const P3& p3, Op op) {
    +
    354  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    355  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    356  return op2;
    +
    357  }
    +
    358  template <typename P1,typename P2,typename P3,typename Op>
    +
    359  static Op static_for_each(const P1& p1, const P2& p2, P3& p3, Op op) {
    +
    360  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    361  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    362  return op2;
    +
    363  }
    +
    364  template <typename P1,typename P2,typename P3,typename Op>
    +
    365  static Op static_for_each(const P1& p1, const P2& p2, const P3& p3, Op op) {
    +
    366  Op op2(element_recursion<N-1>::static_for_each(p1,p2,p3,op));
    +
    367  op2(semantic_at_c<N-1>(p1), semantic_at_c<N-1>(p2), semantic_at_c<N-1>(p3));
    +
    368  return op2;
    +
    369  }
    +
    370  //static_transform with one source
    +
    371  template <typename P1,typename Dst,typename Op>
    +
    372  static Op static_transform(P1& src, Dst& dst, Op op) {
    +
    373  Op op2(element_recursion<N-1>::static_transform(src,dst,op));
    +
    374  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src));
    +
    375  return op2;
    +
    376  }
    +
    377  template <typename P1,typename Dst,typename Op>
    +
    378  static Op static_transform(const P1& src, Dst& dst, Op op) {
    +
    379  Op op2(element_recursion<N-1>::static_transform(src,dst,op));
    +
    380  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src));
    +
    381  return op2;
    +
    382  }
    +
    383  //static_transform with two sources
    +
    384  template <typename P1,typename P2,typename Dst,typename Op>
    +
    385  static Op static_transform(P1& src1, P2& src2, Dst& dst, Op op) {
    +
    386  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    +
    387  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    +
    388  return op2;
    +
    389  }
    +
    390  template <typename P1,typename P2,typename Dst,typename Op>
    +
    391  static Op static_transform(P1& src1, const P2& src2, Dst& dst, Op op) {
    +
    392  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    +
    393  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    +
    394  return op2;
    +
    395  }
    +
    396  template <typename P1,typename P2,typename Dst,typename Op>
    +
    397  static Op static_transform(const P1& src1, P2& src2, Dst& dst, Op op) {
    +
    398  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    +
    399  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    +
    400  return op2;
    +
    401  }
    +
    402  template <typename P1,typename P2,typename Dst,typename Op>
    +
    403  static Op static_transform(const P1& src1, const P2& src2, Dst& dst, Op op) {
    +
    404  Op op2(element_recursion<N-1>::static_transform(src1,src2,dst,op));
    +
    405  semantic_at_c<N-1>(dst)=op2(semantic_at_c<N-1>(src1), semantic_at_c<N-1>(src2));
    +
    406  return op2;
    +
    407  }
    +
    408 };
    +
    409 
    +
    410 // Termination condition of the compile-time recursion for element operations on a color base
    +
    411 template<> struct element_recursion<0> {
    +
    412  //static_equal
    +
    413  template <typename P1,typename P2>
    +
    414  static bool static_equal(const P1&, const P2&) { return true; }
    +
    415  //static_copy
    +
    416  template <typename P1,typename P2>
    +
    417  static void static_copy(const P1&, const P2&) {}
    +
    418  //static_fill
    +
    419  template <typename P, typename T2>
    +
    420  static void static_fill(const P&, T2) {}
    +
    421  //static_generate
    +
    422  template <typename Dst,typename Op>
    +
    423  static void static_generate(const Dst&,Op){}
    +
    424  //static_for_each with one source
    +
    425  template <typename P1,typename Op>
    +
    426  static Op static_for_each(const P1&,Op op){return op;}
    +
    427  //static_for_each with two sources
    +
    428  template <typename P1,typename P2,typename Op>
    +
    429  static Op static_for_each(const P1&,const P2&,Op op){return op;}
    +
    430  //static_for_each with three sources
    +
    431  template <typename P1,typename P2,typename P3,typename Op>
    +
    432  static Op static_for_each(const P1&,const P2&,const P3&,Op op){return op;}
    +
    433  //static_transform with one source
    +
    434  template <typename P1,typename Dst,typename Op>
    +
    435  static Op static_transform(const P1&,const Dst&,Op op){return op;}
    +
    436  //static_transform with two sources
    +
    437  template <typename P1,typename P2,typename Dst,typename Op>
    +
    438  static Op static_transform(const P1&,const P2&,const Dst&,Op op){return op;}
    +
    439 };
    +
    440 
    +
    441 // std::min and std::max don't have the mutable overloads...
    +
    442 template <typename Q>
    +
    443 inline auto mutable_min(Q const& x, Q const& y) -> Q const& { return x<y ? x : y; }
    +
    444 
    +
    445 template <typename Q>
    +
    446 inline auto mutable_min(Q& x, Q& y) -> Q& { return x<y ? x : y; }
    +
    447 
    +
    448 template <typename Q>
    +
    449 inline auto mutable_max(Q const& x, Q const& y) -> Q const& { return x<y ? y : x; }
    +
    450 
    +
    451 template <typename Q>
    +
    452 inline auto mutable_max(Q& x, Q& y) -> Q& { return x<y ? y : x; }
    +
    453 
    +
    454 
    +
    455 // compile-time recursion for min/max element
    +
    456 template <int N>
    +
    457 struct min_max_recur
    +
    458 {
    +
    459  template <typename P>
    +
    460  static auto max_(P const& p) -> typename element_const_reference_type<P>::type
    +
    461  {
    +
    462  return mutable_max(min_max_recur<N-1>::max_(p),semantic_at_c<N-1>(p));
    +
    463  }
    +
    464 
    +
    465  template <typename P>
    +
    466  static auto max_(P& p) -> typename element_reference_type<P>::type
    +
    467  {
    +
    468  return mutable_max(min_max_recur<N-1>::max_(p),semantic_at_c<N-1>(p));
    +
    469  }
    +
    470 
    +
    471  template <typename P>
    +
    472  static auto min_(P const& p) -> typename element_const_reference_type<P>::type
    +
    473  {
    +
    474  return mutable_min(min_max_recur<N-1>::min_(p),semantic_at_c<N-1>(p));
    +
    475  }
    +
    476 
    +
    477  template <typename P>
    +
    478  static auto min_(P& p) -> typename element_reference_type<P>::type
    +
    479  {
    +
    480  return mutable_min(min_max_recur<N-1>::min_(p),semantic_at_c<N-1>(p));
    +
    481  }
    +
    482 };
    483 
    -
    484 template <typename P>
    -
    485 BOOST_FORCEINLINE
    -
    486 typename element_const_reference_type<P>::type static_max(const P& p) { return detail::min_max_recur<size<P>::value>::max_(p); }
    -
    487 
    -
    488 template <typename P>
    -
    489 BOOST_FORCEINLINE
    -
    490 typename element_reference_type<P>::type static_max( P& p) { return detail::min_max_recur<size<P>::value>::max_(p); }
    -
    491 
    -
    492 template <typename P>
    -
    493 BOOST_FORCEINLINE
    -
    494 typename element_const_reference_type<P>::type static_min(const P& p) { return detail::min_max_recur<size<P>::value>::min_(p); }
    -
    495 
    -
    496 template <typename P>
    -
    497 BOOST_FORCEINLINE
    -
    498 typename element_reference_type<P>::type static_min( P& p) { return detail::min_max_recur<size<P>::value>::min_(p); }
    -
    500 
    -
    515 
    -
    516 template <typename P1,typename P2>
    -
    517 BOOST_FORCEINLINE
    -
    518 bool static_equal(const P1& p1, const P2& p2) { return detail::element_recursion<size<P1>::value>::static_equal(p1,p2); }
    -
    519 
    -
    521 
    -
    536 
    -
    537 template <typename Src,typename Dst>
    -
    538 BOOST_FORCEINLINE
    -
    539 void static_copy(const Src& src, Dst& dst)
    -
    540 {
    -
    541  detail::element_recursion<size<Dst>::value>::static_copy(src, dst);
    -
    542 }
    -
    543 
    -
    545 
    -
    557 
    -
    558 template <typename P,typename V>
    -
    559 BOOST_FORCEINLINE
    -
    560 void static_fill(P& p, const V& v)
    -
    561 {
    -
    562  detail::element_recursion<size<P>::value>::static_fill(p,v);
    -
    563 }
    -
    564 
    -
    566 
    -
    585 
    -
    586 template <typename P1,typename Op>
    -
    587 BOOST_FORCEINLINE
    -
    588 void static_generate(P1& dst,Op op) { detail::element_recursion<size<P1>::value>::static_generate(dst,op); }
    -
    590 
    +
    484 // termination condition of the compile-time recursion for min/max element
    +
    485 template <>
    +
    486 struct min_max_recur<1>
    +
    487 {
    +
    488  template <typename P>
    +
    489  static auto max_(P const& p) -> typename element_const_reference_type<P>::type { return semantic_at_c<0>(p); }
    +
    490 
    +
    491  template <typename P>
    +
    492  static auto max_(P& p) -> typename element_reference_type<P>::type { return semantic_at_c<0>(p); }
    +
    493 
    +
    494  template <typename P>
    +
    495  static auto min_(P const& p) -> typename element_const_reference_type<P>::type { return semantic_at_c<0>(p); }
    +
    496 
    +
    497  template <typename P>
    +
    498  static auto min_(P& p) -> typename element_reference_type<P>::type { return semantic_at_c<0>(p); }
    +
    499 };
    +
    500 } // namespace detail
    +
    501 
    +
    514 
    +
    515 template <typename P>
    +
    516 BOOST_FORCEINLINE
    +
    517 auto static_max(P const& p) -> typename element_const_reference_type<P>::type { return detail::min_max_recur<size<P>::value>::max_(p); }
    +
    518 
    +
    519 template <typename P>
    +
    520 BOOST_FORCEINLINE
    +
    521 auto static_max(P& p) -> typename element_reference_type<P>::type { return detail::min_max_recur<size<P>::value>::max_(p); }
    +
    522 
    +
    523 template <typename P>
    +
    524 BOOST_FORCEINLINE
    +
    525 auto static_min(P const& p) -> typename element_const_reference_type<P>::type { return detail::min_max_recur<size<P>::value>::min_(p); }
    +
    526 
    +
    527 template <typename P>
    +
    528 BOOST_FORCEINLINE
    +
    529 auto static_min(P& p) -> typename element_reference_type<P>::type { return detail::min_max_recur<size<P>::value>::min_(p); }
    +
    531 
    +
    546 
    +
    547 template <typename P1,typename P2>
    +
    548 BOOST_FORCEINLINE
    +
    549 bool static_equal(P1 const& p1, const P2& p2) { return detail::element_recursion<size<P1>::value>::static_equal(p1,p2); }
    +
    550 
    +
    552 
    +
    567 
    +
    568 template <typename Src,typename Dst>
    +
    569 BOOST_FORCEINLINE
    +
    570 void static_copy(const Src& src, Dst& dst)
    +
    571 {
    +
    572  detail::element_recursion<size<Dst>::value>::static_copy(src, dst);
    +
    573 }
    +
    574 
    +
    576 
    +
    588 
    +
    589 template <typename P,typename V>
    +
    590 BOOST_FORCEINLINE
    +
    591 void static_fill(P& p, const V& v)
    +
    592 {
    +
    593  detail::element_recursion<size<P>::value>::static_fill(p,v);
    +
    594 }
    +
    595 
    +
    597 
    616 
    -
    617 //static_transform with one source
    -
    618 template <typename Src,typename Dst,typename Op>
    -
    619 BOOST_FORCEINLINE
    -
    620 Op static_transform(Src& src,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(src,dst,op); }
    -
    621 template <typename Src,typename Dst,typename Op>
    -
    622 BOOST_FORCEINLINE
    -
    623 Op static_transform(const Src& src,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(src,dst,op); }
    -
    624 //static_transform with two sources
    -
    625 template <typename P2,typename P3,typename Dst,typename Op>
    -
    626 BOOST_FORCEINLINE
    -
    627 Op static_transform(P2& p2,P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    -
    628 template <typename P2,typename P3,typename Dst,typename Op>
    -
    629 BOOST_FORCEINLINE
    -
    630 Op static_transform(P2& p2,const P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    -
    631 template <typename P2,typename P3,typename Dst,typename Op>
    -
    632 BOOST_FORCEINLINE
    -
    633 Op static_transform(const P2& p2,P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    -
    634 template <typename P2,typename P3,typename Dst,typename Op>
    -
    635 BOOST_FORCEINLINE
    -
    636 Op static_transform(const P2& p2,const P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    -
    638 
    -
    663 
    -
    664 //static_for_each with one source
    -
    665 template <typename P1,typename Op>
    +
    617 template <typename P1,typename Op>
    +
    618 BOOST_FORCEINLINE
    +
    619 void static_generate(P1& dst,Op op) { detail::element_recursion<size<P1>::value>::static_generate(dst,op); }
    +
    621 
    +
    647 
    +
    648 //static_transform with one source
    +
    649 template <typename Src,typename Dst,typename Op>
    +
    650 BOOST_FORCEINLINE
    +
    651 Op static_transform(Src& src,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(src,dst,op); }
    +
    652 template <typename Src,typename Dst,typename Op>
    +
    653 BOOST_FORCEINLINE
    +
    654 Op static_transform(const Src& src,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(src,dst,op); }
    +
    655 //static_transform with two sources
    +
    656 template <typename P2,typename P3,typename Dst,typename Op>
    +
    657 BOOST_FORCEINLINE
    +
    658 Op static_transform(P2& p2,P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    +
    659 template <typename P2,typename P3,typename Dst,typename Op>
    +
    660 BOOST_FORCEINLINE
    +
    661 Op static_transform(P2& p2,const P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    +
    662 template <typename P2,typename P3,typename Dst,typename Op>
    +
    663 BOOST_FORCEINLINE
    +
    664 Op static_transform(const P2& p2,P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    +
    665 template <typename P2,typename P3,typename Dst,typename Op>
    666 BOOST_FORCEINLINE
    -
    667 Op static_for_each( P1& p1, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,op); }
    -
    668 template <typename P1,typename Op>
    -
    669 BOOST_FORCEINLINE
    -
    670 Op static_for_each(const P1& p1, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,op); }
    -
    671 //static_for_each with two sources
    -
    672 template <typename P1,typename P2,typename Op>
    -
    673 BOOST_FORCEINLINE
    -
    674 Op static_for_each(P1& p1, P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    -
    675 template <typename P1,typename P2,typename Op>
    -
    676 BOOST_FORCEINLINE
    -
    677 Op static_for_each(P1& p1,const P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    -
    678 template <typename P1,typename P2,typename Op>
    -
    679 BOOST_FORCEINLINE
    -
    680 Op static_for_each(const P1& p1, P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    -
    681 template <typename P1,typename P2,typename Op>
    -
    682 BOOST_FORCEINLINE
    -
    683 Op static_for_each(const P1& p1,const P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    -
    684 //static_for_each with three sources
    -
    685 template <typename P1,typename P2,typename P3,typename Op>
    -
    686 BOOST_FORCEINLINE
    -
    687 Op static_for_each(P1& p1,P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    688 template <typename P1,typename P2,typename P3,typename Op>
    -
    689 BOOST_FORCEINLINE
    -
    690 Op static_for_each(P1& p1,P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    691 template <typename P1,typename P2,typename P3,typename Op>
    -
    692 BOOST_FORCEINLINE
    -
    693 Op static_for_each(P1& p1,const P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    694 template <typename P1,typename P2,typename P3,typename Op>
    -
    695 BOOST_FORCEINLINE
    -
    696 Op static_for_each(P1& p1,const P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    697 template <typename P1,typename P2,typename P3,typename Op>
    -
    698 BOOST_FORCEINLINE
    -
    699 Op static_for_each(const P1& p1,P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    700 template <typename P1,typename P2,typename P3,typename Op>
    -
    701 BOOST_FORCEINLINE
    -
    702 Op static_for_each(const P1& p1,P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    703 template <typename P1,typename P2,typename P3,typename Op>
    +
    667 Op static_transform(const P2& p2,const P3& p3,Dst& dst,Op op) { return detail::element_recursion<size<Dst>::value>::static_transform(p2,p3,dst,op); }
    +
    669 
    +
    694 
    +
    695 //static_for_each with one source
    +
    696 template <typename P1,typename Op>
    +
    697 BOOST_FORCEINLINE
    +
    698 Op static_for_each( P1& p1, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,op); }
    +
    699 template <typename P1,typename Op>
    +
    700 BOOST_FORCEINLINE
    +
    701 Op static_for_each(const P1& p1, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,op); }
    +
    702 //static_for_each with two sources
    +
    703 template <typename P1,typename P2,typename Op>
    704 BOOST_FORCEINLINE
    -
    705 Op static_for_each(const P1& p1,const P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    706 template <typename P1,typename P2,typename P3,typename Op>
    +
    705 Op static_for_each(P1& p1, P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    +
    706 template <typename P1,typename P2,typename Op>
    707 BOOST_FORCEINLINE
    -
    708 Op static_for_each(const P1& p1,const P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    -
    710 
    -
    711 } } // namespace boost::gil
    -
    712 
    -
    713 #endif
    +
    708 Op static_for_each(P1& p1,const P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    +
    709 template <typename P1,typename P2,typename Op>
    +
    710 BOOST_FORCEINLINE
    +
    711 Op static_for_each(const P1& p1, P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    +
    712 template <typename P1,typename P2,typename Op>
    +
    713 BOOST_FORCEINLINE
    +
    714 Op static_for_each(const P1& p1,const P2& p2, Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,op); }
    +
    715 //static_for_each with three sources
    +
    716 template <typename P1,typename P2,typename P3,typename Op>
    +
    717 BOOST_FORCEINLINE
    +
    718 Op static_for_each(P1& p1,P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    719 template <typename P1,typename P2,typename P3,typename Op>
    +
    720 BOOST_FORCEINLINE
    +
    721 Op static_for_each(P1& p1,P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    722 template <typename P1,typename P2,typename P3,typename Op>
    +
    723 BOOST_FORCEINLINE
    +
    724 Op static_for_each(P1& p1,const P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    725 template <typename P1,typename P2,typename P3,typename Op>
    +
    726 BOOST_FORCEINLINE
    +
    727 Op static_for_each(P1& p1,const P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    728 template <typename P1,typename P2,typename P3,typename Op>
    +
    729 BOOST_FORCEINLINE
    +
    730 Op static_for_each(const P1& p1,P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    731 template <typename P1,typename P2,typename P3,typename Op>
    +
    732 BOOST_FORCEINLINE
    +
    733 Op static_for_each(const P1& p1,P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    734 template <typename P1,typename P2,typename P3,typename Op>
    +
    735 BOOST_FORCEINLINE
    +
    736 Op static_for_each(const P1& p1,const P2& p2,P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    737 template <typename P1,typename P2,typename P3,typename Op>
    +
    738 BOOST_FORCEINLINE
    +
    739 Op static_for_each(const P1& p1,const P2& p2,const P3& p3,Op op) { return detail::element_recursion<size<P1>::value>::static_for_each(p1,p2,p3,op); }
    +
    741 
    +
    742 }} // namespace boost::gil
    +
    743 
    +
    744 #endif
    Specifies the return type of the constant semantic_at_c<K>(color_base);.
    Definition: color_base_algorithm.hpp:104
    A predicate metafunction determining whether a given color base contains a given color.
    Definition: color_base_algorithm.hpp:165
    -
    color_element_const_reference_type< ColorBase, Color >::type get_color(const ColorBase &cb, Color=Color())
    Constant accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:197
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Specifies the return type of the mutable element accessor by color name, get_color(color_base,...
    Definition: color_base_algorithm.hpp:180
    Specifies the type of the element associated with a given color tag.
    Definition: color_base_algorithm.hpp:175
    Specifies the type of the K-th semantic element of a color base.
    Definition: color_base_algorithm.hpp:77
    -
    Returns the index corresponding to the first occurrance of a given given type in.
    Definition: utilities.hpp:249
    -
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:221
    +
    Returns the index corresponding to the first occurrance of a given given type in.
    Definition: utilities.hpp:250
    +
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:225
    Specifies the return type of the mutable semantic_at_c<K>(color_base);.
    Definition: color_base_algorithm.hpp:90
    Specifies the return type of the mutable element accessor at_c of a homogeneous color base.
    Definition: color_base.hpp:40
    +
    auto get_color(const ColorBase &cb, Color=Color()) -> typename color_element_const_reference_type< ColorBase, Color >::type
    Constant accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:199
    Specifies the return type of the constant element accessor by color name, get_color(color_base,...
    Definition: color_base_algorithm.hpp:185
    +
    auto semantic_at_c(ColorBase &p) -> typename std::enable_if< !std::is_const< ColorBase >::value, typename kth_semantic_element_reference_type< ColorBase, K >::type >::type
    A mutable accessor to the K-th semantic element of a color base.
    Definition: color_base_algorithm.hpp:119
    Returns an integral constant type specifying the number of elements in a color base.
    Definition: color_base_algorithm.hpp:42
    -
    auto semantic_at_c(ColorBase const &p) -> typename kth_semantic_element_const_reference_type< ColorBase, K >::type
    A constant accessor to the K-th semantic element of a color base.
    Definition: color_base_algorithm.hpp:133
    diff --git a/html/reference/color__convert_8hpp_source.html b/html/reference/color__convert_8hpp_source.html index b59a3ae05..763f5ac5a 100644 --- a/html/reference/color__convert_8hpp_source.html +++ b/html/reference/color__convert_8hpp_source.html @@ -71,7 +71,7 @@ $(function() {
    22 #include <functional>
    23 #include <type_traits>
    24 
    -
    25 namespace boost { namespace gil {
    +
    25 namespace boost { namespace gil {
    26 
    29 
    30 // Forward-declare
    @@ -100,259 +100,263 @@ $(function() {
    63 // The default implementation of to_luminance uses float0..1 as the intermediate channel type
    64 template <typename RedChannel, typename GreenChannel, typename BlueChannel, typename GrayChannelValue>
    -
    66  GrayChannelValue operator()(const RedChannel& red, const GreenChannel& green, const BlueChannel& blue) const {
    -
    67  return channel_convert<GrayChannelValue>(float32_t(
    -
    68  channel_convert<float32_t>(red )*0.30f +
    -
    69  channel_convert<float32_t>(green)*0.59f +
    -
    70  channel_convert<float32_t>(blue )*0.11f) );
    -
    71  }
    -
    72 };
    -
    73 
    -
    74 // performance specialization for unsigned char
    -
    75 template <typename GrayChannelValue>
    -
    76 struct rgb_to_luminance_fn<uint8_t,uint8_t,uint8_t, GrayChannelValue> {
    -
    77  GrayChannelValue operator()(uint8_t red, uint8_t green, uint8_t blue) const {
    -
    78  return channel_convert<GrayChannelValue>(uint8_t(
    -
    79  ((uint32_t(red )*4915 + uint32_t(green)*9667 + uint32_t(blue )*1802) + 8192) >> 14));
    -
    80  }
    -
    81 };
    -
    82 
    -
    83 template <typename GrayChannel, typename RedChannel, typename GreenChannel, typename BlueChannel>
    -
    84 typename channel_traits<GrayChannel>::value_type rgb_to_luminance(const RedChannel& red, const GreenChannel& green, const BlueChannel& blue) {
    -
    85  return rgb_to_luminance_fn<RedChannel,GreenChannel,BlueChannel,
    -
    86  typename channel_traits<GrayChannel>::value_type>()(red,green,blue);
    -
    87 }
    -
    88 
    -
    89 } // namespace detail
    -
    90 
    -
    93 template <>
    - -
    95  template <typename P1, typename P2>
    -
    96  void operator()(const P1& src, P2& dst) const {
    -
    97  get_color(dst,red_t()) =
    -
    98  channel_convert<typename color_element_type<P2, red_t >::type>(get_color(src,gray_color_t()));
    -
    99  get_color(dst,green_t())=
    -
    100  channel_convert<typename color_element_type<P2, green_t>::type>(get_color(src,gray_color_t()));
    -
    101  get_color(dst,blue_t()) =
    -
    102  channel_convert<typename color_element_type<P2, blue_t >::type>(get_color(src,gray_color_t()));
    -
    103  }
    -
    104 };
    -
    105 
    -
    110 template <>
    - -
    112  template <typename P1, typename P2>
    -
    113  void operator()(const P1& src, P2& dst) const {
    -
    114  get_color(dst,cyan_t())=
    -
    115  channel_traits<typename color_element_type<P2, cyan_t >::type>::min_value();
    -
    116  get_color(dst,magenta_t())=
    -
    117  channel_traits<typename color_element_type<P2, magenta_t>::type>::min_value();
    -
    118  get_color(dst,yellow_t())=
    -
    119  channel_traits<typename color_element_type<P2, yellow_t >::type>::min_value();
    -
    120  get_color(dst,black_t())=
    -
    121  channel_convert<typename color_element_type<P2, black_t >::type>(get_color(src,gray_color_t()));
    -
    122  }
    -
    123 };
    -
    124 
    -
    127 template <>
    - -
    129  template <typename P1, typename P2>
    -
    130  void operator()(const P1& src, P2& dst) const {
    -
    131  get_color(dst,gray_color_t()) =
    -
    132  detail::rgb_to_luminance<typename color_element_type<P2,gray_color_t>::type>(
    -
    133  get_color(src,red_t()), get_color(src,green_t()), get_color(src,blue_t())
    -
    134  );
    -
    135  }
    -
    136 };
    -
    137 
    -
    138 
    -
    153 template <>
    - -
    155 {
    -
    156  template <typename SrcPixel, typename DstPixel>
    -
    157  void operator()(SrcPixel const& src, DstPixel& dst) const
    -
    158  {
    -
    159  using src_t = typename channel_type<SrcPixel>::type;
    -
    160  src_t const r = get_color(src, red_t());
    -
    161  src_t const g = get_color(src, green_t());
    -
    162  src_t const b = get_color(src, blue_t());
    -
    163 
    -
    164  using uint_t = typename channel_type<cmyk8_pixel_t>::type;
    -
    165  uint_t c = channel_invert(channel_convert<uint_t>(r)); // c = 1 - r
    -
    166  uint_t m = channel_invert(channel_convert<uint_t>(g)); // m = 1 - g
    -
    167  uint_t y = channel_invert(channel_convert<uint_t>(b)); // y = 1 - b
    -
    168  uint_t k = (std::min)(c,(std::min)(m,y)); // k = minimum(c, m, y)
    -
    169 
    -
    170  // Apply color correction, strengthening, reducing non-zero components by
    -
    171  // s = 1 / (1 - k) for k < 1, where 1 denotes dst_t max, otherwise s = 1 (literal).
    -
    172  uint_t const dst_max = channel_traits<uint_t>::max_value();
    -
    173  uint_t const s_div = static_cast<uint_t>(dst_max - k);
    -
    174  if (s_div != 0)
    -
    175  {
    -
    176  double const s = dst_max / static_cast<double>(s_div);
    -
    177  c = static_cast<uint_t>((c - k) * s);
    -
    178  m = static_cast<uint_t>((m - k) * s);
    -
    179  y = static_cast<uint_t>((y - k) * s);
    -
    180  }
    -
    181  else
    -
    182  {
    -
    183  // Black only for k = 1 (max of dst_t)
    -
    184  c = channel_traits<uint_t>::min_value();
    -
    185  m = channel_traits<uint_t>::min_value();
    -
    186  y = channel_traits<uint_t>::min_value();
    -
    187  }
    -
    188  using dst_t = typename channel_type<DstPixel>::type;
    -
    189  get_color(dst, cyan_t()) = channel_convert<dst_t>(c);
    -
    190  get_color(dst, magenta_t()) = channel_convert<dst_t>(m);
    -
    191  get_color(dst, yellow_t()) = channel_convert<dst_t>(y);
    -
    192  get_color(dst, black_t()) = channel_convert<dst_t>(k);
    -
    193  }
    -
    194 };
    -
    195 
    -
    196 
    -
    203 template <>
    - -
    205  template <typename P1, typename P2>
    -
    206  void operator()(const P1& src, P2& dst) const {
    -
    207  using T1 = typename channel_type<P1>::type;
    -
    208  get_color(dst,red_t()) =
    -
    209  channel_convert<typename color_element_type<P2,red_t>::type>(
    -
    210  channel_invert<T1>(
    -
    211  (std::min)(channel_traits<T1>::max_value(),
    - -
    213  get_color(dst,green_t())=
    -
    214  channel_convert<typename color_element_type<P2,green_t>::type>(
    -
    215  channel_invert<T1>(
    -
    216  (std::min)(channel_traits<T1>::max_value(),
    - -
    218  get_color(dst,blue_t()) =
    -
    219  channel_convert<typename color_element_type<P2,blue_t>::type>(
    -
    220  channel_invert<T1>(
    -
    221  (std::min)(channel_traits<T1>::max_value(),
    - -
    223  }
    -
    224 };
    -
    225 
    -
    226 
    -
    231 template <>
    - -
    233  template <typename P1, typename P2>
    -
    234  void operator()(const P1& src, P2& dst) const {
    -
    235  get_color(dst,gray_color_t())=
    -
    236  channel_convert<typename color_element_type<P2,gray_color_t>::type>(
    - - -
    239  detail::rgb_to_luminance<typename color_element_type<P1,black_t>::type>(
    -
    240  get_color(src,cyan_t()),
    -
    241  get_color(src,magenta_t()),
    -
    242  get_color(src,yellow_t())
    -
    243  )
    -
    244  ),
    -
    245  channel_invert(get_color(src,black_t()))));
    -
    246  }
    -
    247 };
    -
    248 
    -
    249 namespace detail {
    -
    250 
    -
    251 template <typename Pixel>
    -
    252 auto alpha_or_max_impl(Pixel const& p, std::true_type) -> typename channel_type<Pixel>::type
    -
    253 {
    -
    254  return get_color(p,alpha_t());
    -
    255 }
    -
    256 template <typename Pixel>
    -
    257 auto alpha_or_max_impl(Pixel const&, std::false_type) -> typename channel_type<Pixel>::type
    -
    258 {
    -
    259  return channel_traits<typename channel_type<Pixel>::type>::max_value();
    -
    260 }
    -
    261 
    -
    262 } // namespace detail
    -
    263 
    -
    264 // Returns max_value if the pixel has no alpha channel. Otherwise returns the alpha.
    -
    265 template <typename Pixel>
    -
    266 auto alpha_or_max(Pixel const& p) -> typename channel_type<Pixel>::type
    -
    267 {
    -
    268  return detail::alpha_or_max_impl(
    -
    269  p,
    -
    270  mp11::mp_contains<typename color_space_type<Pixel>::type, alpha_t>());
    -
    271 }
    -
    272 
    -
    273 
    -
    276 template <typename C1>
    - -
    278  template <typename P1, typename P2>
    -
    279  void operator()(const P1& src, P2& dst) const {
    -
    280  using T2 = typename channel_type<P2>::type;
    - - -
    283  get_color(dst,red_t()) =get_color(tmp,red_t());
    -
    284  get_color(dst,green_t())=get_color(tmp,green_t());
    -
    285  get_color(dst,blue_t()) =get_color(tmp,blue_t());
    -
    286  get_color(dst,alpha_t())=channel_convert<T2>(alpha_or_max(src));
    -
    287  }
    -
    288 };
    -
    289 
    -
    296 template <typename C2>
    - -
    298  template <typename P1, typename P2>
    -
    299  void operator()(const P1& src, P2& dst) const {
    -
    300  using T1 = typename channel_type<P1>::type;
    - - - - -
    305  ,dst);
    -
    306  }
    -
    307 };
    -
    308 
    -
    311 template <>
    - -
    313  template <typename P1, typename P2>
    -
    314  void operator()(const P1& src, P2& dst) const {
    -
    315  static_for_each(src,dst,default_channel_converter());
    -
    316  }
    -
    317 };
    -
    318 
    -
    322 
    - -
    326  template <typename SrcP, typename DstP>
    -
    327  void operator()(const SrcP& src,DstP& dst) const {
    -
    328  using SrcColorSpace = typename color_space_type<SrcP>::type;
    -
    329  using DstColorSpace = typename color_space_type<DstP>::type;
    - -
    331  }
    -
    332 };
    -
    333 
    -
    338 template <typename SrcP, typename DstP>
    -
    339 inline void color_convert(const SrcP& src, DstP& dst) {
    -
    340  default_color_converter()(src,dst);
    -
    341 }
    -
    342 
    -
    343 } } // namespace boost::gil
    -
    344 
    -
    345 #endif
    +
    66  auto operator()(const RedChannel& red, const GreenChannel& green, const BlueChannel& blue) const -> GrayChannelValue
    +
    67  {
    +
    68  return channel_convert<GrayChannelValue>(float32_t(
    +
    69  channel_convert<float32_t>(red )*0.30f +
    +
    70  channel_convert<float32_t>(green)*0.59f +
    +
    71  channel_convert<float32_t>(blue )*0.11f) );
    +
    72  }
    +
    73 };
    +
    74 
    +
    75 // performance specialization for unsigned char
    +
    76 template <typename GrayChannelValue>
    +
    77 struct rgb_to_luminance_fn<uint8_t,uint8_t,uint8_t, GrayChannelValue> {
    +
    78  auto operator()(uint8_t red, uint8_t green, uint8_t blue) const -> GrayChannelValue
    +
    79  {
    +
    80  return channel_convert<GrayChannelValue>(uint8_t(
    +
    81  ((uint32_t(red )*4915 + uint32_t(green)*9667 + uint32_t(blue )*1802) + 8192) >> 14));
    +
    82  }
    +
    83 };
    +
    84 
    +
    85 template <typename GrayChannel, typename RedChannel, typename GreenChannel, typename BlueChannel>
    +
    86 auto rgb_to_luminance(const RedChannel& red, const GreenChannel& green, const BlueChannel& blue) -> typename channel_traits<GrayChannel>::value_type
    +
    87 {
    +
    88  return rgb_to_luminance_fn<RedChannel,GreenChannel,BlueChannel,
    +
    89  typename channel_traits<GrayChannel>::value_type>()(red,green,blue);
    +
    90 }
    +
    91 
    +
    92 } // namespace detail
    +
    93 
    +
    96 template <>
    + +
    98  template <typename P1, typename P2>
    +
    99  void operator()(const P1& src, P2& dst) const {
    +
    100  get_color(dst,red_t()) =
    +
    101  channel_convert<typename color_element_type<P2, red_t >::type>(get_color(src,gray_color_t()));
    +
    102  get_color(dst,green_t())=
    +
    103  channel_convert<typename color_element_type<P2, green_t>::type>(get_color(src,gray_color_t()));
    +
    104  get_color(dst,blue_t()) =
    +
    105  channel_convert<typename color_element_type<P2, blue_t >::type>(get_color(src,gray_color_t()));
    +
    106  }
    +
    107 };
    +
    108 
    +
    113 template <>
    + +
    115  template <typename P1, typename P2>
    +
    116  void operator()(const P1& src, P2& dst) const {
    +
    117  get_color(dst,cyan_t())=
    +
    118  channel_traits<typename color_element_type<P2, cyan_t >::type>::min_value();
    +
    119  get_color(dst,magenta_t())=
    +
    120  channel_traits<typename color_element_type<P2, magenta_t>::type>::min_value();
    +
    121  get_color(dst,yellow_t())=
    +
    122  channel_traits<typename color_element_type<P2, yellow_t >::type>::min_value();
    +
    123  get_color(dst,black_t())=
    +
    124  channel_convert<typename color_element_type<P2, black_t >::type>(get_color(src,gray_color_t()));
    +
    125  }
    +
    126 };
    +
    127 
    +
    130 template <>
    + +
    132  template <typename P1, typename P2>
    +
    133  void operator()(const P1& src, P2& dst) const {
    +
    134  get_color(dst,gray_color_t()) =
    +
    135  detail::rgb_to_luminance<typename color_element_type<P2,gray_color_t>::type>(
    +
    136  get_color(src,red_t()), get_color(src,green_t()), get_color(src,blue_t())
    +
    137  );
    +
    138  }
    +
    139 };
    +
    140 
    +
    141 
    +
    156 template <>
    + +
    158 {
    +
    159  template <typename SrcPixel, typename DstPixel>
    +
    160  void operator()(SrcPixel const& src, DstPixel& dst) const
    +
    161  {
    +
    162  using src_t = typename channel_type<SrcPixel>::type;
    +
    163  src_t const r = get_color(src, red_t());
    +
    164  src_t const g = get_color(src, green_t());
    +
    165  src_t const b = get_color(src, blue_t());
    +
    166 
    +
    167  using uint_t = typename channel_type<cmyk8_pixel_t>::type;
    +
    168  uint_t c = channel_invert(channel_convert<uint_t>(r)); // c = 1 - r
    +
    169  uint_t m = channel_invert(channel_convert<uint_t>(g)); // m = 1 - g
    +
    170  uint_t y = channel_invert(channel_convert<uint_t>(b)); // y = 1 - b
    +
    171  uint_t k = (std::min)(c,(std::min)(m,y)); // k = minimum(c, m, y)
    +
    172 
    +
    173  // Apply color correction, strengthening, reducing non-zero components by
    +
    174  // s = 1 / (1 - k) for k < 1, where 1 denotes dst_t max, otherwise s = 1 (literal).
    +
    175  uint_t const dst_max = channel_traits<uint_t>::max_value();
    +
    176  uint_t const s_div = static_cast<uint_t>(dst_max - k);
    +
    177  if (s_div != 0)
    +
    178  {
    +
    179  double const s = dst_max / static_cast<double>(s_div);
    +
    180  c = static_cast<uint_t>((c - k) * s);
    +
    181  m = static_cast<uint_t>((m - k) * s);
    +
    182  y = static_cast<uint_t>((y - k) * s);
    +
    183  }
    +
    184  else
    +
    185  {
    +
    186  // Black only for k = 1 (max of dst_t)
    +
    187  c = channel_traits<uint_t>::min_value();
    +
    188  m = channel_traits<uint_t>::min_value();
    +
    189  y = channel_traits<uint_t>::min_value();
    +
    190  }
    +
    191  using dst_t = typename channel_type<DstPixel>::type;
    +
    192  get_color(dst, cyan_t()) = channel_convert<dst_t>(c);
    +
    193  get_color(dst, magenta_t()) = channel_convert<dst_t>(m);
    +
    194  get_color(dst, yellow_t()) = channel_convert<dst_t>(y);
    +
    195  get_color(dst, black_t()) = channel_convert<dst_t>(k);
    +
    196  }
    +
    197 };
    +
    198 
    +
    199 
    +
    206 template <>
    + +
    208  template <typename P1, typename P2>
    +
    209  void operator()(const P1& src, P2& dst) const {
    +
    210  using T1 = typename channel_type<P1>::type;
    +
    211  get_color(dst,red_t()) =
    +
    212  channel_convert<typename color_element_type<P2,red_t>::type>(
    +
    213  channel_invert<T1>(
    +
    214  (std::min)(channel_traits<T1>::max_value(),
    + +
    216  get_color(dst,green_t())=
    +
    217  channel_convert<typename color_element_type<P2,green_t>::type>(
    +
    218  channel_invert<T1>(
    +
    219  (std::min)(channel_traits<T1>::max_value(),
    + +
    221  get_color(dst,blue_t()) =
    +
    222  channel_convert<typename color_element_type<P2,blue_t>::type>(
    +
    223  channel_invert<T1>(
    +
    224  (std::min)(channel_traits<T1>::max_value(),
    + +
    226  }
    +
    227 };
    +
    228 
    +
    229 
    +
    234 template <>
    + +
    236  template <typename P1, typename P2>
    +
    237  void operator()(const P1& src, P2& dst) const {
    +
    238  get_color(dst,gray_color_t())=
    +
    239  channel_convert<typename color_element_type<P2,gray_color_t>::type>(
    + + +
    242  detail::rgb_to_luminance<typename color_element_type<P1,black_t>::type>(
    +
    243  get_color(src,cyan_t()),
    +
    244  get_color(src,magenta_t()),
    +
    245  get_color(src,yellow_t())
    +
    246  )
    +
    247  ),
    +
    248  channel_invert(get_color(src,black_t()))));
    +
    249  }
    +
    250 };
    +
    251 
    +
    252 namespace detail {
    +
    253 
    +
    254 template <typename Pixel>
    +
    255 auto alpha_or_max_impl(Pixel const& p, std::true_type) -> typename channel_type<Pixel>::type
    +
    256 {
    +
    257  return get_color(p,alpha_t());
    +
    258 }
    +
    259 template <typename Pixel>
    +
    260 auto alpha_or_max_impl(Pixel const&, std::false_type) -> typename channel_type<Pixel>::type
    +
    261 {
    +
    262  return channel_traits<typename channel_type<Pixel>::type>::max_value();
    +
    263 }
    +
    264 
    +
    265 } // namespace detail
    +
    266 
    +
    267 // Returns max_value if the pixel has no alpha channel. Otherwise returns the alpha.
    +
    268 template <typename Pixel>
    +
    269 auto alpha_or_max(Pixel const& p) -> typename channel_type<Pixel>::type
    +
    270 {
    +
    271  return detail::alpha_or_max_impl(
    +
    272  p,
    +
    273  mp11::mp_contains<typename color_space_type<Pixel>::type, alpha_t>());
    +
    274 }
    +
    275 
    +
    276 
    +
    279 template <typename C1>
    + +
    281  template <typename P1, typename P2>
    +
    282  void operator()(const P1& src, P2& dst) const {
    +
    283  using T2 = typename channel_type<P2>::type;
    + + +
    286  get_color(dst,red_t()) =get_color(tmp,red_t());
    +
    287  get_color(dst,green_t())=get_color(tmp,green_t());
    +
    288  get_color(dst,blue_t()) =get_color(tmp,blue_t());
    +
    289  get_color(dst,alpha_t())=channel_convert<T2>(alpha_or_max(src));
    +
    290  }
    +
    291 };
    +
    292 
    +
    299 template <typename C2>
    + +
    301  template <typename P1, typename P2>
    +
    302  void operator()(const P1& src, P2& dst) const {
    +
    303  using T1 = typename channel_type<P1>::type;
    + + + + +
    308  ,dst);
    +
    309  }
    +
    310 };
    +
    311 
    +
    314 template <>
    + +
    316  template <typename P1, typename P2>
    +
    317  void operator()(const P1& src, P2& dst) const {
    +
    318  static_for_each(src,dst,default_channel_converter());
    +
    319  }
    +
    320 };
    +
    321 
    +
    325 
    + +
    329  template <typename SrcP, typename DstP>
    +
    330  void operator()(const SrcP& src,DstP& dst) const {
    +
    331  using SrcColorSpace = typename color_space_type<SrcP>::type;
    +
    332  using DstColorSpace = typename color_space_type<DstP>::type;
    + +
    334  }
    +
    335 };
    +
    336 
    +
    341 template <typename SrcP, typename DstP>
    +
    342 inline void color_convert(const SrcP& src, DstP& dst) {
    +
    343  default_color_converter()(src,dst);
    +
    344 }
    +
    345 
    +
    346 } } // namespace boost::gil
    +
    347 
    +
    348 #endif
    -
    color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    +
    auto channel_invert(Channel x) -> typename channel_traits< Channel >::value_type
    Default implementation. Provide overloads for performance.
    Definition: channel_algorithm.hpp:582
    Yellow.
    Definition: cmyk.hpp:28
    +
    auto get_color(ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Blue.
    Definition: rgb.hpp:30
    -
    Same as channel_converter, except it takes the destination channel by reference, which allows us to m...
    Definition: channel_algorithm.hpp:460
    +
    Same as channel_converter, except it takes the destination channel by reference, which allows us to m...
    Definition: channel_algorithm.hpp:471
    Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept,...
    Definition: metafunctions.hpp:24
    Color Convertion function object. To be specialized for every src/dst color space.
    Definition: color_convert.hpp:42
    Gray.
    Definition: gray.hpp:18
    -
    channel_traits< Channel >::value_type channel_multiply(Channel a, Channel b)
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:539
    +
    auto channel_multiply(Channel a, Channel b) -> typename channel_traits< Channel >::value_type
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:561
    Green.
    Definition: rgb.hpp:27
    mp11::mp_list< red_t, green_t, blue_t, alpha_t > rgba_t
    Definition: rgba.hpp:25
    mp11::mp_list< gray_color_t > gray_t
    Definition: gray.hpp:21
    -
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:339
    +
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:342
    Alpha.
    Definition: rgba.hpp:22
    Black.
    Definition: cmyk.hpp:31
    mp11::mp_list< red_t, green_t, blue_t > rgb_t
    Definition: rgb.hpp:34
    Cyan.
    Definition: cmyk.hpp:22
    mp11::mp_list< cyan_t, magenta_t, yellow_t, black_t > cmyk_t
    Definition: cmyk.hpp:35
    -
    channel_traits< Channel >::value_type channel_invert(Channel x)
    Default implementation. Provide overloads for performance.
    Definition: channel_algorithm.hpp:559
    Magenta.
    Definition: cmyk.hpp:25
    Definition: color_convert.hpp:31
    -
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:124
    +
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:153
    red * .3 + green * .59 + blue * .11 + .5
    Definition: color_convert.hpp:65
    -
    class for color-converting one pixel to another
    Definition: color_convert.hpp:325
    +
    class for color-converting one pixel to another
    Definition: color_convert.hpp:328
    Red.
    Definition: rgb.hpp:24
    diff --git a/html/reference/concept__check_8hpp_source.html b/html/reference/concept__check_8hpp_source.html index e44d4e8be..3838858b7 100644 --- a/html/reference/concept__check_8hpp_source.html +++ b/html/reference/concept__check_8hpp_source.html @@ -86,7 +86,7 @@ $(function() {
    37 
    38 // TODO: Document BOOST_GIL_USE_CONCEPT_CHECK here
    39 
    -
    40 namespace boost { namespace gil {
    +
    40 namespace boost { namespace gil {
    41 
    42 // TODO: What is BOOST_GIL_CLASS_REQUIRE for; Why not use BOOST_CLASS_REQUIRE?
    43 // TODO: What is gil_function_requires for; Why not function_requires?
    @@ -108,6 +108,7 @@ $(function() {
    59 
    60 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/concepts_2channel_8hpp_source.html b/html/reference/concepts_2channel_8hpp_source.html index a29324494..bcdbc80e0 100644 --- a/html/reference/concepts_2channel_8hpp_source.html +++ b/html/reference/concepts_2channel_8hpp_source.html @@ -77,14 +77,14 @@ $(function() {
    28 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    29 #endif
    30 
    -
    31 namespace boost { namespace gil {
    +
    31 namespace boost { namespace gil {
    32 
    33 // Forward declarations
    34 template <typename T>
    35 struct channel_traits;
    36 
    37 template <typename DstT, typename SrcT>
    -
    38 auto channel_convert(SrcT const& val)
    +
    38 auto channel_convert(SrcT const& val)
    39  -> typename channel_traits<DstT>::value_type;
    40 
    73 template <typename T>
    @@ -192,13 +192,14 @@ $(function() {
    A channel is convertible to another one if the channel_convert algorithm is defined for the two chann...
    Definition: concepts/channel.hpp:193
    A channel that allows for modifying its value.
    Definition: concepts/channel.hpp:118
    -
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:529
    +
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:583
    Predicate metafunction returning whether two channels are compatible.
    Definition: concepts/channel.hpp:154
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    A channel is the building block of a color. Color is defined as a mixture of primary colors and a cha...
    Definition: concepts/channel.hpp:74
    A channel that supports default construction.
    Definition: concepts/channel.hpp:133
    -
    channel_traits< DstChannel >::value_type channel_convert(const SrcChannel &src)
    Converting from one channel type to another.
    Definition: channel_algorithm.hpp:451
    Channels are compatible if their associated value types (ignoring constness and references) are the s...
    Definition: concepts/channel.hpp:173
    Definition: concepts/channel.hpp:98
    +
    auto channel_convert(SrcChannel const &src) -> typename channel_traits< DstChannel >::value_type
    Converting from one channel type to another.
    Definition: channel_algorithm.hpp:461
    diff --git a/html/reference/concepts_2color__base_8hpp_source.html b/html/reference/concepts_2color__base_8hpp_source.html index f0e2b6a31..dc8f851a6 100644 --- a/html/reference/concepts_2color__base_8hpp_source.html +++ b/html/reference/concepts_2color__base_8hpp_source.html @@ -76,7 +76,7 @@ $(function() {
    27 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    28 #endif
    29 
    -
    30 namespace boost { namespace gil {
    +
    30 namespace boost { namespace gil {
    31 
    32 // Forward declarations of at_c
    33 namespace detail {
    @@ -264,6 +264,7 @@ $(function() {
    Two color bases are compatible if they have the same color space and their elements are compatible,...
    Definition: concepts/color_base.hpp:303
    Homogeneous color base that allows for modifying its elements.
    Definition: concepts/color_base.hpp:257
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Color base that also has a default-constructor. Refines Regular.
    Definition: concepts/color_base.hpp:207
    auto at_c(detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< E >::type
    Provides mutable access to the K-th element, in physical order.
    Definition: color_base.hpp:632
    Homogeneous color base that also has a default constructor. Refines Regular.
    Definition: concepts/color_base.hpp:282
    diff --git a/html/reference/concepts_2dynamic__step_8hpp_source.html b/html/reference/concepts_2dynamic__step_8hpp_source.html index a8d40e83d..75d892e70 100644 --- a/html/reference/concepts_2dynamic__step_8hpp_source.html +++ b/html/reference/concepts_2dynamic__step_8hpp_source.html @@ -71,7 +71,7 @@ $(function() {
    22 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    23 #endif
    24 
    -
    25 namespace boost { namespace gil {
    +
    25 namespace boost { namespace gil {
    26 
    38 template <typename T>
    @@ -106,6 +106,7 @@ $(function() {
    78 #endif
    Concept for iterators, locators and views that can define a type just like the given iterator,...
    Definition: concepts/dynamic_step.hpp:39
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    Concept for locators and views that can define a type just like the given locator or view,...
    Definition: concepts/dynamic_step.hpp:59
    Base template for types that model HasDynamicYStepTypeConcept.
    Definition: dynamic_step.hpp:21
    diff --git a/html/reference/concepts_2image_8hpp_source.html b/html/reference/concepts_2image_8hpp_source.html index 9aa5c38f6..64f739912 100644 --- a/html/reference/concepts_2image_8hpp_source.html +++ b/html/reference/concepts_2image_8hpp_source.html @@ -77,7 +77,7 @@ $(function() {
    28 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    29 #endif
    30 
    -
    31 namespace boost { namespace gil {
    +
    31 namespace boost { namespace gil {
    32 
    56 template <typename Image>
    @@ -94,9 +94,9 @@ $(function() {
    68  using point_t = typename Image::point_t;
    69  gil_function_requires<PointNDConcept<point_t>>();
    70 
    -
    71  const_view_t cv = const_view(image);
    +
    71  const_view_t cv = const_view(image);
    72  ignore_unused_variable_warning(cv);
    -
    73  view_t v = view(image);
    +
    73  view_t v = view(image);
    74  ignore_unused_variable_warning(v);
    75 
    76  pixel_t fill_value;
    @@ -167,12 +167,13 @@ $(function() {
    2-dimensional image whose value type models PixelValueConcept
    Definition: concepts/image.hpp:144
    container interface over image view. Models ImageConcept, PixelBasedConcept
    Definition: image.hpp:42
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto const_view(const image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::const_view_t const
    Returns the constant-pixel view of an image.
    Definition: image.hpp:573
    N-dimensional container of values.
    Definition: concepts/image.hpp:57
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    -
    const image< Pixel, IsPlanar, Alloc >::const_view_t const_view(const image< Pixel, IsPlanar, Alloc > &img)
    Returns the constant-pixel view of an image.
    Definition: image.hpp:553
    Returns the number of channels of a pixel-based GIL construct.
    Definition: locator.hpp:38
    2-dimensional container of values
    Definition: concepts/image.hpp:109
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/concepts_2image__view_8hpp_source.html b/html/reference/concepts_2image__view_8hpp_source.html index 5824339d7..3a34fae37 100644 --- a/html/reference/concepts_2image__view_8hpp_source.html +++ b/html/reference/concepts_2image__view_8hpp_source.html @@ -83,7 +83,7 @@ $(function() {
    34 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
    35 #endif
    36 
    -
    37 namespace boost { namespace gil {
    +
    37 namespace boost { namespace gil {
    38 
    42 
    46 
    @@ -440,6 +440,7 @@ $(function() {
    GIL's 2-dimensional view over mutable GIL pixels.
    Definition: concepts/image_view.hpp:504
    GIL view as ForwardCollection.
    Definition: concepts/image_view.hpp:313
    N-dimensional view over immutable values.
    Definition: concepts/image_view.hpp:103
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    2-dimensional view over mutable values
    Definition: concepts/image_view.hpp:487
    Returns whether two views are compatible.
    Definition: concepts/image_view.hpp:522
    diff --git a/html/reference/concepts_2pixel_8hpp_source.html b/html/reference/concepts_2pixel_8hpp_source.html index 00918ea3e..b6c5a5460 100644 --- a/html/reference/concepts_2pixel_8hpp_source.html +++ b/html/reference/concepts_2pixel_8hpp_source.html @@ -81,7 +81,7 @@ $(function() {
    32 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    33 #endif
    34 
    -
    35 namespace boost { namespace gil {
    +
    35 namespace boost { namespace gil {
    36 
    62 template <typename P>
    @@ -246,14 +246,15 @@ $(function() {
    Homogeneous pixel concept that allows for changing its channels.
    Definition: concepts/pixel.hpp:148
    Pixel concept - A color base whose elements are channels.
    Definition: concepts/pixel.hpp:63
    Pixel concept that allows for changing its channels.
    Definition: concepts/pixel.hpp:101
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Homogeneous pixel concept that is a Regular type.
    Definition: concepts/pixel.hpp:188
    Homogeneous pixel concept.
    Definition: concepts/pixel.hpp:123
    Pixel convertible concept Convertibility is non-symmetric and implies that one pixel can be converted...
    Definition: concepts/pixel.hpp:277
    Concept for pixel compatibility Pixels are compatible if their channels and color space types are com...
    Definition: concepts/pixel.hpp:256
    Returns whether two pixels are compatible Pixels are compatible if their channels and color space typ...
    Definition: concepts/pixel.hpp:226
    -
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:221
    +
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:225
    Pixel concept that is a Regular type.
    Definition: concepts/pixel.hpp:170
    -
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:339
    +
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:342
    diff --git a/html/reference/concepts_2pixel__iterator_8hpp_source.html b/html/reference/concepts_2pixel__iterator_8hpp_source.html index 942a98801..d60ac0c11 100644 --- a/html/reference/concepts_2pixel__iterator_8hpp_source.html +++ b/html/reference/concepts_2pixel__iterator_8hpp_source.html @@ -81,7 +81,7 @@ $(function() {
    32 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    33 #endif
    34 
    -
    35 namespace boost { namespace gil {
    +
    35 namespace boost { namespace gil {
    36 
    37 // Forward declarations
    38 template <typename It> struct const_iterator_type;
    @@ -305,9 +305,10 @@ $(function() {
    Iterator adaptor is a forward iterator adapting another forward iterator.
    Definition: concepts/pixel_iterator.hpp:317
    Metafunction predicate returning whether the given iterator allows for changing its values.
    Definition: pixel_iterator.hpp:49
    Returns the type of an iterator just like the input iterator, except operating over immutable values.
    Definition: pixel_iterator.hpp:40
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Concept for locators and views that can define a type just like the given locator or view,...
    Definition: concepts/pixel_iterator.hpp:137
    metafunction predicate determining whether the given iterator is a plain one or an adaptor over anoth...
    Definition: metafunctions.hpp:35
    -
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:221
    +
    Specifies the element type of a homogeneous color base.
    Definition: color_base_algorithm.hpp:225
    Step iterator concept.
    Definition: concepts/pixel_iterator.hpp:257
    Pixel iterator that allows for changing its pixel.
    Definition: concepts/pixel_iterator.hpp:209
    Iterator adaptor that is mutable.
    Definition: concepts/pixel_iterator.hpp:342
    diff --git a/html/reference/concepts_2point_8hpp_source.html b/html/reference/concepts_2point_8hpp_source.html index cf7dd1df9..eccd9887d 100644 --- a/html/reference/concepts_2point_8hpp_source.html +++ b/html/reference/concepts_2point_8hpp_source.html @@ -73,7 +73,7 @@ $(function() {
    24 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    25 #endif
    26 
    -
    27 namespace boost { namespace gil {
    +
    27 namespace boost { namespace gil {
    28 
    29 // Forward declarations
    30 template <typename T>
    @@ -136,6 +136,7 @@ $(function() {
    125 #endif
    T & axis_value(point< T > &p)
    Definition: point.hpp:234
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    2-dimensional point concept
    Definition: concepts/point.hpp:103
    N-dimensional point concept.
    Definition: concepts/point.hpp:61
    2D point both axes of which have the same dimension type
    Definition: locator.hpp:28
    diff --git a/html/reference/conversion__policies_8hpp_source.html b/html/reference/conversion__policies_8hpp_source.html index 237f3a4d2..d1063bbe9 100644 --- a/html/reference/conversion__policies_8hpp_source.html +++ b/html/reference/conversion__policies_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 #include <iterator>
    17 #include <type_traits>
    18 
    -
    19 namespace boost{ namespace gil { namespace detail {
    +
    19 namespace boost{ namespace gil { namespace detail {
    20 
    21 struct read_and_no_convert
    22 {
    @@ -153,6 +153,7 @@ $(function() {
    106 #endif
    BOOST_FORCEINLINE auto copy(boost::gil::pixel< T, CS > *first, boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > *
    Copy when both src and dst are interleaved and of the same type can be just memmove.
    Definition: algorithm.hpp:145
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Determines if reader type is read only ( no conversion ).
    Definition: conversion_policies.hpp:97
    diff --git a/html/reference/convolve_8hpp_source.html b/html/reference/convolve_8hpp_source.html index 00a691917..c1097ed77 100644 --- a/html/reference/convolve_8hpp_source.html +++ b/html/reference/convolve_8hpp_source.html @@ -74,7 +74,7 @@ $(function() {
    25 #include <type_traits>
    26 #include <vector>
    27 
    -
    28 namespace boost { namespace gil {
    +
    28 namespace boost { namespace gil {
    29 
    30 // 2D spatial seperable convolutions and cross-correlations
    31 
    @@ -242,7 +242,7 @@ $(function() {
    231  boundary_option option = boundary_option::extend_zero)
    232 {
    233  correlate_rows<PixelAccum>(
    -
    234  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    +
    234  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    235 }
    236 
    244 template <typename PixelAccum, typename SrcView, typename Kernel, typename DstView>
    @@ -265,7 +265,7 @@ $(function() {
    269  boundary_option option = boundary_option::extend_zero)
    270 {
    271  convolve_rows<PixelAccum>(
    -
    272  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    +
    272  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    273 }
    274 
    282 template <typename PixelAccum, typename SrcView, typename Kernel, typename DstView>
    @@ -289,7 +289,7 @@ $(function() {
    308  boundary_option option = boundary_option::extend_zero)
    309 {
    310  correlate_rows_fixed<PixelAccum>(
    -
    311  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    +
    311  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    312 }
    313 
    321 template <typename PixelAccum, typename SrcView, typename Kernel, typename DstView>
    @@ -312,7 +312,7 @@ $(function() {
    346  boundary_option option = boundary_option::extend_zero)
    347 {
    348  convolve_rows_fixed<PixelAccum>(
    -
    349  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    +
    349  transposed_view(src_view), kernel, transposed_view(dst_view), option);
    350 }
    351 
    352 namespace detail
    @@ -384,8 +384,8 @@ $(function() {
    433  for (std::size_t i = 0; i < src_view.num_channels(); i++)
    434  {
    435  detail::convolve_2d_impl(
    -
    436  nth_channel_view(src_view, i),
    -
    437  nth_channel_view(dst_view, i),
    +
    436  nth_channel_view(src_view, i),
    +
    437  nth_channel_view(dst_view, i),
    438  kernel
    439  );
    440  }
    @@ -395,11 +395,12 @@ $(function() {
    444 
    445 #endif
    -
    BOOST_FORCEINLINE void fill_pixels(View const &view, Value const &value)
    std::fill for image views
    Definition: algorithm.hpp:416
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    auto transposed_view(View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
    Definition: image_view_factory.hpp:231
    +
    BOOST_FORCEINLINE void fill_pixels(View const &view, Value const &value)
    std::fill for image views
    Definition: algorithm.hpp:420
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Provides functionality for performing 1D correlation between the kernel and a buffer storing row pixe...
    Definition: convolve.hpp:159
    -
    dynamic_xy_step_transposed_type< View >::type transposed_view(const View &src)
    Definition: image_view_factory.hpp:210
    Provides functionality for performing 1D correlation between the kernel and a buffer storing row pixe...
    Definition: convolve.hpp:182
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    Returns an integral constant type specifying the number of elements in a color base.
    Definition: color_base_algorithm.hpp:42
    diff --git a/html/reference/device_8hpp_source.html b/html/reference/device_8hpp_source.html index 49d284e86..9d0746024 100644 --- a/html/reference/device_8hpp_source.html +++ b/html/reference/device_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 #include <memory>
    16 #include <type_traits>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    20 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
    21 #pragma warning(push)
    @@ -143,8 +143,8 @@ $(function() {
    120  )
    121  {}
    122 
    -
    123  FILE* get() { return _file.get(); }
    -
    124  const FILE* get() const { return _file.get(); }
    +
    123  auto get() -> FILE* { return _file.get(); }
    +
    124  auto get() const -> FILE const* { return _file.get(); }
    125 
    126  int getc_unchecked()
    127  {
    @@ -162,596 +162,591 @@ $(function() {
    139  return ( char ) ch;
    140  }
    141 
    -
    143  std::size_t read( byte_t* data
    -
    144  , std::size_t count
    -
    145  )
    -
    146  {
    -
    147  std::size_t num_elements = fread( data
    -
    148  , 1
    -
    149  , static_cast<int>( count )
    -
    150  , get()
    -
    151  );
    -
    152 
    -
    154  io_error_if( ferror( get() )
    -
    155  , "file_stream_device: file read error"
    -
    156  );
    -
    157 
    -
    158  //libjpeg sometimes reads blocks in 4096 bytes even when the file is smaller than that.
    -
    159  //return value indicates how much was actually read
    -
    160  //returning less than "count" is not an error
    -
    161  return num_elements;
    -
    162  }
    -
    163 
    -
    165  template< typename T
    -
    166  , int N
    -
    167  >
    -
    168  void read( T (&buf)[N] )
    -
    169  {
    -
    170  io_error_if( read( buf, N ) < N
    -
    171  , "file_stream_device: file read error"
    -
    172  );
    -
    173  }
    -
    174 
    -
    176  uint8_t read_uint8()
    -
    177  {
    -
    178  byte_t m[1];
    +
    143  auto read(byte_t* data, std::size_t count) -> std::size_t
    +
    144  {
    +
    145  std::size_t num_elements = fread( data
    +
    146  , 1
    +
    147  , static_cast<int>( count )
    +
    148  , get()
    +
    149  );
    +
    150 
    +
    152  io_error_if( ferror( get() )
    +
    153  , "file_stream_device: file read error"
    +
    154  );
    +
    155 
    +
    156  //libjpeg sometimes reads blocks in 4096 bytes even when the file is smaller than that.
    +
    157  //return value indicates how much was actually read
    +
    158  //returning less than "count" is not an error
    +
    159  return num_elements;
    +
    160  }
    +
    161 
    +
    163  template< typename T, int N>
    +
    164  void read( T (&buf)[N] )
    +
    165  {
    +
    166  io_error_if( read( buf, N ) < N
    +
    167  , "file_stream_device: file read error"
    +
    168  );
    +
    169  }
    +
    170 
    +
    172  uint8_t read_uint8()
    +
    173  {
    +
    174  byte_t m[1];
    +
    175 
    +
    176  read( m );
    +
    177  return m[0];
    +
    178  }
    179 
    -
    180  read( m );
    -
    181  return m[0];
    -
    182  }
    -
    183 
    -
    185  uint16_t read_uint16()
    -
    186  {
    -
    187  byte_t m[2];
    +
    181  uint16_t read_uint16()
    +
    182  {
    +
    183  byte_t m[2];
    +
    184 
    +
    185  read( m );
    +
    186  return (m[1] << 8) | m[0];
    +
    187  }
    188 
    -
    189  read( m );
    -
    190  return (m[1] << 8) | m[0];
    -
    191  }
    -
    192 
    -
    194  uint32_t read_uint32()
    -
    195  {
    -
    196  byte_t m[4];
    +
    190  uint32_t read_uint32()
    +
    191  {
    +
    192  byte_t m[4];
    +
    193 
    +
    194  read( m );
    +
    195  return (m[3] << 24) | (m[2] << 16) | (m[1] << 8) | m[0];
    +
    196  }
    197 
    -
    198  read( m );
    -
    199  return (m[3] << 24) | (m[2] << 16) | (m[1] << 8) | m[0];
    -
    200  }
    -
    201 
    -
    203  template < typename T >
    -
    204  std::size_t write( const T* buf
    -
    205  , std::size_t count
    -
    206  )
    -
    207  {
    -
    208  std::size_t num_elements = fwrite( buf
    -
    209  , buff_item<T>::size
    -
    210  , count
    -
    211  , get()
    -
    212  );
    -
    213 
    -
    214  //return value indicates how much was actually written
    -
    215  //returning less than "count" is not an error
    -
    216  return num_elements;
    -
    217  }
    -
    218 
    -
    220  template < typename T
    -
    221  , std::size_t N
    -
    222  >
    -
    223  void write( const T (&buf)[N] )
    -
    224  {
    -
    225  io_error_if( write( buf, N ) < N
    -
    226  , "file_stream_device: file write error"
    -
    227  );
    -
    228  return ;
    -
    229  }
    -
    230 
    -
    232  void write_uint8( uint8_t x )
    -
    233  {
    -
    234  byte_t m[1] = { x };
    -
    235  write(m);
    -
    236  }
    -
    237 
    -
    239  void write_uint16( uint16_t x )
    -
    240  {
    -
    241  byte_t m[2];
    +
    199  template < typename T >
    +
    200  auto write(T const* buf, std::size_t count) -> std::size_t
    +
    201  {
    +
    202  std::size_t num_elements = fwrite( buf
    +
    203  , buff_item<T>::size
    +
    204  , count
    +
    205  , get()
    +
    206  );
    +
    207 
    +
    208  //return value indicates how much was actually written
    +
    209  //returning less than "count" is not an error
    +
    210  return num_elements;
    +
    211  }
    +
    212 
    +
    214  template < typename T
    +
    215  , std::size_t N
    +
    216  >
    +
    217  void write( const T (&buf)[N] )
    +
    218  {
    +
    219  io_error_if( write( buf, N ) < N
    +
    220  , "file_stream_device: file write error"
    +
    221  );
    +
    222  return ;
    +
    223  }
    +
    224 
    +
    226  void write_uint8( uint8_t x )
    +
    227  {
    +
    228  byte_t m[1] = { x };
    +
    229  write(m);
    +
    230  }
    +
    231 
    +
    233  void write_uint16( uint16_t x )
    +
    234  {
    +
    235  byte_t m[2];
    +
    236 
    +
    237  m[0] = byte_t( x >> 0 );
    +
    238  m[1] = byte_t( x >> 8 );
    +
    239 
    +
    240  write( m );
    +
    241  }
    242 
    -
    243  m[0] = byte_t( x >> 0 );
    -
    244  m[1] = byte_t( x >> 8 );
    -
    245 
    -
    246  write( m );
    -
    247  }
    -
    248 
    -
    250  void write_uint32( uint32_t x )
    -
    251  {
    -
    252  byte_t m[4];
    -
    253 
    -
    254  m[0] = byte_t( x >> 0 );
    -
    255  m[1] = byte_t( x >> 8 );
    -
    256  m[2] = byte_t( x >> 16 );
    -
    257  m[3] = byte_t( x >> 24 );
    -
    258 
    -
    259  write( m );
    -
    260  }
    -
    261 
    -
    262  void seek( long count, int whence = SEEK_SET )
    -
    263  {
    -
    264  io_error_if( fseek( get()
    -
    265  , count
    -
    266  , whence
    -
    267  ) != 0
    -
    268  , "file_stream_device: file seek error"
    -
    269  );
    -
    270  }
    -
    271 
    -
    272  long int tell()
    -
    273  {
    -
    274  long int pos = ftell( get() );
    -
    275 
    -
    276  io_error_if( pos == -1L
    -
    277  , "file_stream_device: file position error"
    -
    278  );
    -
    279 
    -
    280  return pos;
    -
    281  }
    -
    282 
    -
    283  void flush()
    +
    244  void write_uint32( uint32_t x )
    +
    245  {
    +
    246  byte_t m[4];
    +
    247 
    +
    248  m[0] = byte_t( x >> 0 );
    +
    249  m[1] = byte_t( x >> 8 );
    +
    250  m[2] = byte_t( x >> 16 );
    +
    251  m[3] = byte_t( x >> 24 );
    +
    252 
    +
    253  write( m );
    +
    254  }
    +
    255 
    +
    256  void seek( long count, int whence = SEEK_SET )
    +
    257  {
    +
    258  io_error_if( fseek( get()
    +
    259  , count
    +
    260  , whence
    +
    261  ) != 0
    +
    262  , "file_stream_device: file seek error"
    +
    263  );
    +
    264  }
    +
    265 
    +
    266  long int tell()
    +
    267  {
    +
    268  long int pos = ftell( get() );
    +
    269 
    +
    270  io_error_if( pos == -1L
    +
    271  , "file_stream_device: file position error"
    +
    272  );
    +
    273 
    +
    274  return pos;
    +
    275  }
    +
    276 
    +
    277  void flush()
    +
    278  {
    +
    279  fflush( get() );
    +
    280  }
    +
    281 
    +
    283  void print_line( const std::string& line )
    284  {
    -
    285  fflush( get() );
    -
    286  }
    -
    287 
    -
    289  void print_line( const std::string& line )
    -
    290  {
    -
    291  std::size_t num_elements = fwrite( line.c_str()
    -
    292  , sizeof( char )
    -
    293  , line.size()
    -
    294  , get()
    -
    295  );
    -
    296 
    -
    297  io_error_if( num_elements < line.size()
    -
    298  , "file_stream_device: line print error"
    -
    299  );
    -
    300  }
    -
    301 
    -
    302  int error()
    -
    303  {
    -
    304  return ferror( get() );
    -
    305  }
    -
    306 
    -
    307 private:
    -
    308 
    -
    309  static void file_deleter( FILE* file )
    -
    310  {
    -
    311  if( file )
    -
    312  {
    -
    313  fclose( file );
    -
    314  }
    -
    315  }
    +
    285  std::size_t num_elements = fwrite( line.c_str()
    +
    286  , sizeof( char )
    +
    287  , line.size()
    +
    288  , get()
    +
    289  );
    +
    290 
    +
    291  io_error_if( num_elements < line.size()
    +
    292  , "file_stream_device: line print error"
    +
    293  );
    +
    294  }
    +
    295 
    +
    296  int error()
    +
    297  {
    +
    298  return ferror( get() );
    +
    299  }
    +
    300 
    +
    301 private:
    +
    302 
    +
    303  static void file_deleter( FILE* file )
    +
    304  {
    +
    305  if( file )
    +
    306  {
    +
    307  fclose( file );
    +
    308  }
    +
    309  }
    +
    310 
    +
    311 private:
    +
    312 
    +
    313  using file_ptr_t = std::shared_ptr<FILE> ;
    +
    314  file_ptr_t _file;
    +
    315 };
    316 
    -
    317 private:
    -
    318 
    -
    319  using file_ptr_t = std::shared_ptr<FILE> ;
    -
    320  file_ptr_t _file;
    -
    321 };
    -
    322 
    -
    326 template< typename FormatTag >
    - -
    328 {
    -
    329 public:
    -
    330  istream_device( std::istream& in )
    -
    331  : _in( in )
    -
    332  {
    -
    333  // does the file exists?
    -
    334  io_error_if( !in
    -
    335  , "istream_device: Stream is not valid."
    -
    336  );
    -
    337  }
    -
    338 
    -
    339  int getc_unchecked()
    -
    340  {
    -
    341  return _in.get();
    -
    342  }
    -
    343 
    -
    344  char getc()
    -
    345  {
    -
    346  int ch;
    -
    347 
    -
    348  io_error_if( ( ch = _in.get() ) == EOF
    -
    349  , "istream_device: unexpected EOF"
    -
    350  );
    -
    351 
    -
    352  return ( char ) ch;
    -
    353  }
    -
    354 
    -
    355  std::size_t read( byte_t* data
    -
    356  , std::size_t count )
    -
    357  {
    -
    358  std::streamsize cr = 0;
    +
    320 template< typename FormatTag >
    + +
    322 {
    +
    323 public:
    +
    324  istream_device( std::istream& in )
    +
    325  : _in( in )
    +
    326  {
    +
    327  // does the file exists?
    +
    328  io_error_if( !in
    +
    329  , "istream_device: Stream is not valid."
    +
    330  );
    +
    331  }
    +
    332 
    +
    333  int getc_unchecked()
    +
    334  {
    +
    335  return _in.get();
    +
    336  }
    +
    337 
    +
    338  char getc()
    +
    339  {
    +
    340  int ch;
    +
    341 
    +
    342  io_error_if( ( ch = _in.get() ) == EOF
    +
    343  , "istream_device: unexpected EOF"
    +
    344  );
    +
    345 
    +
    346  return ( char ) ch;
    +
    347  }
    +
    348 
    +
    349  std::size_t read( byte_t* data
    +
    350  , std::size_t count )
    +
    351  {
    +
    352  std::streamsize cr = 0;
    +
    353 
    +
    354  do
    +
    355  {
    +
    356  _in.peek();
    +
    357  std::streamsize c = _in.readsome( reinterpret_cast< char* >( data )
    +
    358  , static_cast< std::streamsize >( count ));
    359 
    -
    360  do
    -
    361  {
    -
    362  _in.peek();
    -
    363  std::streamsize c = _in.readsome( reinterpret_cast< char* >( data )
    -
    364  , static_cast< std::streamsize >( count ));
    +
    360  count -= static_cast< std::size_t >( c );
    +
    361  data += c;
    +
    362  cr += c;
    +
    363 
    +
    364  } while( count && _in );
    365 
    -
    366  count -= static_cast< std::size_t >( c );
    -
    367  data += c;
    -
    368  cr += c;
    -
    369 
    -
    370  } while( count && _in );
    -
    371 
    -
    372  return static_cast< std::size_t >( cr );
    -
    373  }
    -
    374 
    -
    376  template<typename T, int N>
    -
    377  void read(T (&buf)[N])
    +
    366  return static_cast< std::size_t >( cr );
    +
    367  }
    +
    368 
    +
    370  template<typename T, int N>
    +
    371  void read(T (&buf)[N])
    +
    372  {
    +
    373  read(buf, N);
    +
    374  }
    +
    375 
    +
    377  uint8_t read_uint8()
    378  {
    -
    379  read(buf, N);
    -
    380  }
    -
    381 
    -
    383  uint8_t read_uint8()
    -
    384  {
    -
    385  byte_t m[1];
    -
    386 
    -
    387  read( m );
    -
    388  return m[0];
    -
    389  }
    -
    390 
    -
    392  uint16_t read_uint16()
    -
    393  {
    -
    394  byte_t m[2];
    -
    395 
    -
    396  read( m );
    -
    397  return (m[1] << 8) | m[0];
    -
    398  }
    -
    399 
    -
    401  uint32_t read_uint32()
    -
    402  {
    -
    403  byte_t m[4];
    -
    404 
    -
    405  read( m );
    -
    406  return (m[3] << 24) | (m[2] << 16) | (m[1] << 8) | m[0];
    -
    407  }
    -
    408 
    -
    409  void seek( long count, int whence = SEEK_SET )
    -
    410  {
    -
    411  _in.seekg( count
    -
    412  , whence == SEEK_SET ? std::ios::beg
    -
    413  :( whence == SEEK_CUR ? std::ios::cur
    -
    414  : std::ios::end )
    -
    415  );
    -
    416  }
    -
    417 
    -
    418  void write(const byte_t*, std::size_t)
    -
    419  {
    -
    420  io_error( "istream_device: Bad io error." );
    -
    421  }
    -
    422 
    -
    423  void flush() {}
    -
    424 
    -
    425 private:
    -
    426 
    -
    427  std::istream& _in;
    -
    428 };
    -
    429 
    -
    433 template< typename FormatTag >
    - -
    435 {
    -
    436 public:
    -
    437  ostream_device( std::ostream & out )
    -
    438  : _out( out )
    -
    439  {
    +
    379  byte_t m[1];
    +
    380 
    +
    381  read( m );
    +
    382  return m[0];
    +
    383  }
    +
    384 
    +
    386  uint16_t read_uint16()
    +
    387  {
    +
    388  byte_t m[2];
    +
    389 
    +
    390  read( m );
    +
    391  return (m[1] << 8) | m[0];
    +
    392  }
    +
    393 
    +
    395  uint32_t read_uint32()
    +
    396  {
    +
    397  byte_t m[4];
    +
    398 
    +
    399  read( m );
    +
    400  return (m[3] << 24) | (m[2] << 16) | (m[1] << 8) | m[0];
    +
    401  }
    +
    402 
    +
    403  void seek( long count, int whence = SEEK_SET )
    +
    404  {
    +
    405  _in.seekg( count
    +
    406  , whence == SEEK_SET ? std::ios::beg
    +
    407  :( whence == SEEK_CUR ? std::ios::cur
    +
    408  : std::ios::end )
    +
    409  );
    +
    410  }
    +
    411 
    +
    412  void write(const byte_t*, std::size_t)
    +
    413  {
    +
    414  io_error( "istream_device: Bad io error." );
    +
    415  }
    +
    416 
    +
    417  void flush() {}
    +
    418 
    +
    419 private:
    +
    420 
    +
    421  std::istream& _in;
    +
    422 };
    +
    423 
    +
    427 template< typename FormatTag >
    + +
    429 {
    +
    430 public:
    +
    431  ostream_device( std::ostream & out )
    +
    432  : _out( out )
    +
    433  {
    +
    434  }
    +
    435 
    +
    436  std::size_t read(byte_t *, std::size_t)
    +
    437  {
    +
    438  io_error( "ostream_device: Bad io error." );
    +
    439  return 0;
    440  }
    441 
    -
    442  std::size_t read(byte_t *, std::size_t)
    +
    442  void seek( long count, int whence )
    443  {
    -
    444  io_error( "ostream_device: Bad io error." );
    -
    445  return 0;
    -
    446  }
    -
    447 
    -
    448  void seek( long count, int whence )
    -
    449  {
    -
    450  _out.seekp( count
    -
    451  , whence == SEEK_SET
    -
    452  ? std::ios::beg
    -
    453  : ( whence == SEEK_CUR
    -
    454  ?std::ios::cur
    -
    455  :std::ios::end )
    -
    456  );
    -
    457  }
    -
    458 
    -
    459  void write( const byte_t* data
    -
    460  , std::size_t count )
    -
    461  {
    -
    462  _out.write( reinterpret_cast<char const*>( data )
    -
    463  , static_cast<std::streamsize>( count )
    -
    464  );
    -
    465  }
    -
    466 
    -
    468  template < typename T
    -
    469  , std::size_t N
    -
    470  >
    -
    471  void write( const T (&buf)[N] )
    +
    444  _out.seekp( count
    +
    445  , whence == SEEK_SET
    +
    446  ? std::ios::beg
    +
    447  : ( whence == SEEK_CUR
    +
    448  ?std::ios::cur
    +
    449  :std::ios::end )
    +
    450  );
    +
    451  }
    +
    452 
    +
    453  void write( const byte_t* data
    +
    454  , std::size_t count )
    +
    455  {
    +
    456  _out.write( reinterpret_cast<char const*>( data )
    +
    457  , static_cast<std::streamsize>( count )
    +
    458  );
    +
    459  }
    +
    460 
    +
    462  template < typename T
    +
    463  , std::size_t N
    +
    464  >
    +
    465  void write( const T (&buf)[N] )
    +
    466  {
    +
    467  write( buf, N );
    +
    468  }
    +
    469 
    +
    471  void write_uint8( uint8_t x )
    472  {
    -
    473  write( buf, N );
    -
    474  }
    -
    475 
    -
    477  void write_uint8( uint8_t x )
    -
    478  {
    -
    479  byte_t m[1] = { x };
    -
    480  write(m);
    -
    481  }
    -
    482 
    -
    484  void write_uint16( uint16_t x )
    -
    485  {
    -
    486  byte_t m[2];
    +
    473  byte_t m[1] = { x };
    +
    474  write(m);
    +
    475  }
    +
    476 
    +
    478  void write_uint16( uint16_t x )
    +
    479  {
    +
    480  byte_t m[2];
    +
    481 
    +
    482  m[0] = byte_t( x >> 0 );
    +
    483  m[1] = byte_t( x >> 8 );
    +
    484 
    +
    485  write( m );
    +
    486  }
    487 
    -
    488  m[0] = byte_t( x >> 0 );
    -
    489  m[1] = byte_t( x >> 8 );
    -
    490 
    -
    491  write( m );
    -
    492  }
    -
    493 
    -
    495  void write_uint32( uint32_t x )
    -
    496  {
    -
    497  byte_t m[4];
    -
    498 
    -
    499  m[0] = byte_t( x >> 0 );
    -
    500  m[1] = byte_t( x >> 8 );
    -
    501  m[2] = byte_t( x >> 16 );
    -
    502  m[3] = byte_t( x >> 24 );
    -
    503 
    -
    504  write( m );
    -
    505  }
    -
    506 
    -
    507  void flush()
    +
    489  void write_uint32( uint32_t x )
    +
    490  {
    +
    491  byte_t m[4];
    +
    492 
    +
    493  m[0] = byte_t( x >> 0 );
    +
    494  m[1] = byte_t( x >> 8 );
    +
    495  m[2] = byte_t( x >> 16 );
    +
    496  m[3] = byte_t( x >> 24 );
    +
    497 
    +
    498  write( m );
    +
    499  }
    +
    500 
    +
    501  void flush()
    +
    502  {
    +
    503  _out << std::flush;
    +
    504  }
    +
    505 
    +
    507  void print_line( const std::string& line )
    508  {
    -
    509  _out << std::flush;
    +
    509  _out << line;
    510  }
    511 
    -
    513  void print_line( const std::string& line )
    -
    514  {
    -
    515  _out << line;
    -
    516  }
    -
    517 
    +
    512 
    +
    513 
    +
    514 private:
    +
    515 
    +
    516  std::ostream& _out;
    +
    517 };
    518 
    519 
    -
    520 private:
    -
    521 
    -
    522  std::ostream& _out;
    -
    523 };
    -
    524 
    -
    525 
    -
    530 template< typename IODevice > struct is_input_device : std::false_type{};
    -
    531 template< typename FormatTag > struct is_input_device< file_stream_device< FormatTag > > : std::true_type{};
    -
    532 template< typename FormatTag > struct is_input_device< istream_device< FormatTag > > : std::true_type{};
    +
    524 template< typename IODevice > struct is_input_device : std::false_type{};
    +
    525 template< typename FormatTag > struct is_input_device< file_stream_device< FormatTag > > : std::true_type{};
    +
    526 template< typename FormatTag > struct is_input_device< istream_device< FormatTag > > : std::true_type{};
    +
    527 
    +
    528 template< typename FormatTag
    +
    529  , typename T
    +
    530  , typename D = void
    +
    531  >
    +
    532 struct is_adaptable_input_device : std::false_type{};
    533 
    -
    534 template< typename FormatTag
    -
    535  , typename T
    -
    536  , typename D = void
    -
    537  >
    -
    538 struct is_adaptable_input_device : std::false_type{};
    -
    539 
    -
    540 template <typename FormatTag, typename T>
    -
    541 struct is_adaptable_input_device
    -
    542 <
    -
    543  FormatTag,
    -
    544  T,
    -
    545  typename std::enable_if
    -
    546  <
    -
    547  mp11::mp_or
    -
    548  <
    -
    549  std::is_base_of<std::istream, T>,
    -
    550  std::is_same<std::istream, T>
    -
    551  >::value
    -
    552  >::type
    -
    553 > : std::true_type
    -
    554 {
    -
    555  using device_type = istream_device<FormatTag>;
    -
    556 };
    -
    557 
    -
    558 template< typename FormatTag >
    -
    559 struct is_adaptable_input_device< FormatTag
    -
    560  , FILE*
    -
    561  , void
    -
    562  >
    -
    563  : std::true_type
    -
    564 {
    -
    565  using device_type = file_stream_device<FormatTag>;
    -
    566 };
    -
    567 
    -
    571 template< typename FormatTag
    -
    572  , typename T
    -
    573  , typename D = void
    -
    574  >
    -
    575 struct is_read_device : std::false_type
    -
    576 {};
    -
    577 
    -
    578 template <typename FormatTag, typename T>
    -
    579 struct is_read_device
    -
    580 <
    -
    581  FormatTag,
    -
    582  T,
    -
    583  typename std::enable_if
    -
    584  <
    -
    585  mp11::mp_or
    -
    586  <
    -
    587  is_input_device<FormatTag>,
    -
    588  is_adaptable_input_device<FormatTag, T>
    -
    589  >::value
    -
    590  >::type
    -
    591 > : std::true_type
    -
    592 {
    -
    593 };
    -
    594 
    +
    534 template <typename FormatTag, typename T>
    +
    535 struct is_adaptable_input_device
    +
    536 <
    +
    537  FormatTag,
    +
    538  T,
    +
    539  typename std::enable_if
    +
    540  <
    +
    541  mp11::mp_or
    +
    542  <
    +
    543  std::is_base_of<std::istream, T>,
    +
    544  std::is_same<std::istream, T>
    +
    545  >::value
    +
    546  >::type
    +
    547 > : std::true_type
    +
    548 {
    +
    549  using device_type = istream_device<FormatTag>;
    +
    550 };
    +
    551 
    +
    552 template< typename FormatTag >
    +
    553 struct is_adaptable_input_device< FormatTag
    +
    554  , FILE*
    +
    555  , void
    +
    556  >
    +
    557  : std::true_type
    +
    558 {
    +
    559  using device_type = file_stream_device<FormatTag>;
    +
    560 };
    +
    561 
    +
    565 template< typename FormatTag
    +
    566  , typename T
    +
    567  , typename D = void
    +
    568  >
    +
    569 struct is_read_device : std::false_type
    +
    570 {};
    +
    571 
    +
    572 template <typename FormatTag, typename T>
    +
    573 struct is_read_device
    +
    574 <
    +
    575  FormatTag,
    +
    576  T,
    +
    577  typename std::enable_if
    +
    578  <
    +
    579  mp11::mp_or
    +
    580  <
    +
    581  is_input_device<FormatTag>,
    +
    582  is_adaptable_input_device<FormatTag, T>
    +
    583  >::value
    +
    584  >::type
    +
    585 > : std::true_type
    +
    586 {
    +
    587 };
    +
    588 
    +
    589 
    +
    594 template<typename IODevice> struct is_output_device : std::false_type{};
    595 
    -
    600 template<typename IODevice> struct is_output_device : std::false_type{};
    -
    601 
    -
    602 template< typename FormatTag > struct is_output_device< file_stream_device< FormatTag > > : std::true_type{};
    -
    603 template< typename FormatTag > struct is_output_device< ostream_device < FormatTag > > : std::true_type{};
    +
    596 template< typename FormatTag > struct is_output_device< file_stream_device< FormatTag > > : std::true_type{};
    +
    597 template< typename FormatTag > struct is_output_device< ostream_device < FormatTag > > : std::true_type{};
    +
    598 
    +
    599 template< typename FormatTag
    +
    600  , typename IODevice
    +
    601  , typename D = void
    +
    602  >
    +
    603 struct is_adaptable_output_device : std::false_type {};
    604 
    -
    605 template< typename FormatTag
    -
    606  , typename IODevice
    -
    607  , typename D = void
    -
    608  >
    -
    609 struct is_adaptable_output_device : std::false_type {};
    -
    610 
    -
    611 template <typename FormatTag, typename T>
    -
    612 struct is_adaptable_output_device
    -
    613 <
    -
    614  FormatTag,
    -
    615  T,
    -
    616  typename std::enable_if
    -
    617  <
    -
    618  mp11::mp_or
    -
    619  <
    -
    620  std::is_base_of<std::ostream, T>,
    -
    621  std::is_same<std::ostream, T>
    -
    622  >::value
    -
    623  >::type
    -
    624 > : std::true_type
    +
    605 template <typename FormatTag, typename T>
    +
    606 struct is_adaptable_output_device
    +
    607 <
    +
    608  FormatTag,
    +
    609  T,
    +
    610  typename std::enable_if
    +
    611  <
    +
    612  mp11::mp_or
    +
    613  <
    +
    614  std::is_base_of<std::ostream, T>,
    +
    615  std::is_same<std::ostream, T>
    +
    616  >::value
    +
    617  >::type
    +
    618 > : std::true_type
    +
    619 {
    +
    620  using device_type = ostream_device<FormatTag>;
    +
    621 };
    +
    622 
    +
    623 template<typename FormatTag> struct is_adaptable_output_device<FormatTag,FILE*,void>
    +
    624  : std::true_type
    625 {
    -
    626  using device_type = ostream_device<FormatTag>;
    +
    626  using device_type = file_stream_device<FormatTag>;
    627 };
    628 
    -
    629 template<typename FormatTag> struct is_adaptable_output_device<FormatTag,FILE*,void>
    -
    630  : std::true_type
    -
    631 {
    -
    632  using device_type = file_stream_device<FormatTag>;
    -
    633 };
    -
    634 
    -
    635 
    -
    639 template< typename FormatTag
    -
    640  , typename T
    -
    641  , typename D = void
    -
    642  >
    -
    643 struct is_write_device : std::false_type
    -
    644 {};
    -
    645 
    -
    646 template <typename FormatTag, typename T>
    -
    647 struct is_write_device
    -
    648 <
    -
    649  FormatTag,
    -
    650  T,
    -
    651  typename std::enable_if
    -
    652  <
    -
    653  mp11::mp_or
    -
    654  <
    -
    655  is_output_device<FormatTag>,
    -
    656  is_adaptable_output_device<FormatTag, T>
    -
    657  >::value
    -
    658  >::type
    -
    659 > : std::true_type
    -
    660 {
    -
    661 };
    -
    662 
    -
    663 } // namespace detail
    -
    664 
    -
    665 template< typename Device, typename FormatTag > class scanline_reader;
    -
    666 template< typename Device, typename FormatTag, typename ConversionPolicy > class reader;
    +
    629 
    +
    633 template< typename FormatTag
    +
    634  , typename T
    +
    635  , typename D = void
    +
    636  >
    +
    637 struct is_write_device : std::false_type
    +
    638 {};
    +
    639 
    +
    640 template <typename FormatTag, typename T>
    +
    641 struct is_write_device
    +
    642 <
    +
    643  FormatTag,
    +
    644  T,
    +
    645  typename std::enable_if
    +
    646  <
    +
    647  mp11::mp_or
    +
    648  <
    +
    649  is_output_device<FormatTag>,
    +
    650  is_adaptable_output_device<FormatTag, T>
    +
    651  >::value
    +
    652  >::type
    +
    653 > : std::true_type
    +
    654 {
    +
    655 };
    +
    656 
    +
    657 } // namespace detail
    +
    658 
    +
    659 template< typename Device, typename FormatTag > class scanline_reader;
    +
    660 template< typename Device, typename FormatTag, typename ConversionPolicy > class reader;
    +
    661 
    +
    662 template< typename Device, typename FormatTag, typename Log = no_log > class writer;
    +
    663 
    +
    664 template< typename Device, typename FormatTag > class dynamic_image_reader;
    +
    665 template< typename Device, typename FormatTag, typename Log = no_log > class dynamic_image_writer;
    +
    666 
    667 
    -
    668 template< typename Device, typename FormatTag, typename Log = no_log > class writer;
    +
    668 namespace detail {
    669 
    -
    670 template< typename Device, typename FormatTag > class dynamic_image_reader;
    -
    671 template< typename Device, typename FormatTag, typename Log = no_log > class dynamic_image_writer;
    -
    672 
    +
    670 template< typename T >
    +
    671 struct is_reader : std::false_type
    +
    672 {};
    673 
    -
    674 namespace detail {
    -
    675 
    -
    676 template< typename T >
    -
    677 struct is_reader : std::false_type
    -
    678 {};
    -
    679 
    -
    680 template< typename Device
    -
    681  , typename FormatTag
    -
    682  , typename ConversionPolicy
    -
    683  >
    -
    684 struct is_reader< reader< Device
    -
    685  , FormatTag
    -
    686  , ConversionPolicy
    -
    687  >
    -
    688  > : std::true_type
    -
    689 {};
    -
    690 
    -
    691 template< typename T >
    -
    692 struct is_dynamic_image_reader : std::false_type
    -
    693 {};
    -
    694 
    -
    695 template< typename Device
    -
    696  , typename FormatTag
    -
    697  >
    -
    698 struct is_dynamic_image_reader< dynamic_image_reader< Device
    -
    699  , FormatTag
    -
    700  >
    -
    701  > : std::true_type
    -
    702 {};
    -
    703 
    -
    704 template< typename T >
    -
    705 struct is_writer : std::false_type
    -
    706 {};
    -
    707 
    -
    708 template< typename Device
    -
    709  , typename FormatTag
    -
    710  >
    -
    711 struct is_writer< writer< Device
    -
    712  , FormatTag
    -
    713  >
    -
    714  > : std::true_type
    -
    715 {};
    -
    716 
    -
    717 template< typename T >
    -
    718 struct is_dynamic_image_writer : std::false_type
    -
    719 {};
    -
    720 
    -
    721 template< typename Device
    -
    722  , typename FormatTag
    -
    723  >
    -
    724 struct is_dynamic_image_writer< dynamic_image_writer< Device
    -
    725  , FormatTag
    -
    726  >
    -
    727  > : std::true_type
    -
    728 {};
    +
    674 template< typename Device
    +
    675  , typename FormatTag
    +
    676  , typename ConversionPolicy
    +
    677  >
    +
    678 struct is_reader< reader< Device
    +
    679  , FormatTag
    +
    680  , ConversionPolicy
    +
    681  >
    +
    682  > : std::true_type
    +
    683 {};
    +
    684 
    +
    685 template< typename T >
    +
    686 struct is_dynamic_image_reader : std::false_type
    +
    687 {};
    +
    688 
    +
    689 template< typename Device
    +
    690  , typename FormatTag
    +
    691  >
    +
    692 struct is_dynamic_image_reader< dynamic_image_reader< Device
    +
    693  , FormatTag
    +
    694  >
    +
    695  > : std::true_type
    +
    696 {};
    +
    697 
    +
    698 template< typename T >
    +
    699 struct is_writer : std::false_type
    +
    700 {};
    +
    701 
    +
    702 template< typename Device
    +
    703  , typename FormatTag
    +
    704  >
    +
    705 struct is_writer< writer< Device
    +
    706  , FormatTag
    +
    707  >
    +
    708  > : std::true_type
    +
    709 {};
    +
    710 
    +
    711 template< typename T >
    +
    712 struct is_dynamic_image_writer : std::false_type
    +
    713 {};
    +
    714 
    +
    715 template< typename Device
    +
    716  , typename FormatTag
    +
    717  >
    +
    718 struct is_dynamic_image_writer< dynamic_image_writer< Device
    +
    719  , FormatTag
    +
    720  >
    +
    721  > : std::true_type
    +
    722 {};
    +
    723 
    +
    724 } // namespace detail
    +
    725 
    +
    726 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
    +
    727 #pragma warning(pop)
    +
    728 #endif
    729 
    -
    730 } // namespace detail
    -
    731 
    -
    732 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
    -
    733 #pragma warning(pop)
    -
    734 #endif
    -
    735 
    -
    736 } // namespace gil
    -
    737 } // namespace boost
    -
    738 
    -
    739 #endif
    +
    730 } // namespace gil
    +
    731 } // namespace boost
    +
    732 
    +
    733 #endif
    -
    uint8_t read_uint8()
    Reads byte.
    Definition: device.hpp:176
    +
    uint8_t read_uint8()
    Reads byte.
    Definition: device.hpp:172
    Used to overload the constructor.
    Definition: device.hpp:57
    file_stream_device(const std::string &file_name, read_tag tag=read_tag())
    Definition: device.hpp:63
    -
    uint32_t read_uint32()
    Reads 32 bit little endian integer.
    Definition: device.hpp:401
    -
    Definition: device.hpp:575
    -
    uint16_t read_uint16()
    Reads 16 bit little endian integer.
    Definition: device.hpp:392
    -
    void print_line(const std::string &line)
    Prints formatted ASCII text.
    Definition: device.hpp:513
    -
    void read(T(&buf)[N])
    Reads array.
    Definition: device.hpp:168
    +
    uint32_t read_uint32()
    Reads 32 bit little endian integer.
    Definition: device.hpp:395
    +
    Definition: device.hpp:569
    +
    uint16_t read_uint16()
    Reads 16 bit little endian integer.
    Definition: device.hpp:386
    +
    void print_line(const std::string &line)
    Prints formatted ASCII text.
    Definition: device.hpp:507
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    void read(T(&buf)[N])
    Reads array.
    Definition: device.hpp:164
    file_stream_device(FILE *file)
    Definition: device.hpp:117
    file_stream_device(const char *file_name, write_tag)
    Definition: device.hpp:99
    -
    Definition: device.hpp:530
    -
    void write_uint32(uint32_t x)
    Writes 32 bit little endian integer.
    Definition: device.hpp:495
    +
    Definition: device.hpp:524
    +
    void write_uint32(uint32_t x)
    Writes 32 bit little endian integer.
    Definition: device.hpp:489
    file_stream_device(const std::string &file_name, write_tag tag)
    Definition: device.hpp:90
    -
    Definition: device.hpp:600
    -
    std::size_t read(byte_t *data, std::size_t count)
    Definition: device.hpp:143
    -
    uint8_t read_uint8()
    Reads byte.
    Definition: device.hpp:383
    -
    void write_uint16(uint16_t x)
    Writes 16 bit little endian integer.
    Definition: device.hpp:484
    -
    uint16_t read_uint16()
    Reads 16 bit little endian integer.
    Definition: device.hpp:185
    -
    void write_uint32(uint32_t x)
    Writes 32 bit little endian integer.
    Definition: device.hpp:250
    -
    void print_line(const std::string &line)
    Prints formatted ASCII text.
    Definition: device.hpp:289
    -
    Definition: device.hpp:434
    -
    Definition: device.hpp:327
    -
    std::size_t write(const T *buf, std::size_t count)
    Writes number of elements from a buffer.
    Definition: device.hpp:204
    -
    uint32_t read_uint32()
    Reads 32 bit little endian integer.
    Definition: device.hpp:194
    -
    void write_uint8(uint8_t x)
    Writes byte.
    Definition: device.hpp:477
    -
    void write_uint8(uint8_t x)
    Writes byte.
    Definition: device.hpp:232
    -
    void write(const T(&buf)[N])
    Writes array.
    Definition: device.hpp:471
    -
    void write(const T(&buf)[N])
    Writes array.
    Definition: device.hpp:223
    -
    void write_uint16(uint16_t x)
    Writes 16 bit little endian integer.
    Definition: device.hpp:239
    -
    void read(T(&buf)[N])
    Reads array.
    Definition: device.hpp:377
    -
    Definition: device.hpp:643
    +
    Definition: device.hpp:594
    +
    auto read(byte_t *data, std::size_t count) -> std::size_t
    Definition: device.hpp:143
    +
    uint8_t read_uint8()
    Reads byte.
    Definition: device.hpp:377
    +
    void write_uint16(uint16_t x)
    Writes 16 bit little endian integer.
    Definition: device.hpp:478
    +
    uint16_t read_uint16()
    Reads 16 bit little endian integer.
    Definition: device.hpp:181
    +
    void write_uint32(uint32_t x)
    Writes 32 bit little endian integer.
    Definition: device.hpp:244
    +
    void print_line(const std::string &line)
    Prints formatted ASCII text.
    Definition: device.hpp:283
    +
    Definition: device.hpp:428
    +
    Definition: device.hpp:321
    +
    auto write(T const *buf, std::size_t count) -> std::size_t
    Writes number of elements from a buffer.
    Definition: device.hpp:200
    +
    uint32_t read_uint32()
    Reads 32 bit little endian integer.
    Definition: device.hpp:190
    +
    void write_uint8(uint8_t x)
    Writes byte.
    Definition: device.hpp:471
    +
    void write_uint8(uint8_t x)
    Writes byte.
    Definition: device.hpp:226
    +
    void write(const T(&buf)[N])
    Writes array.
    Definition: device.hpp:465
    +
    void write(const T(&buf)[N])
    Writes array.
    Definition: device.hpp:217
    +
    void write_uint16(uint16_t x)
    Writes 16 bit little endian integer.
    Definition: device.hpp:233
    +
    void read(T(&buf)[N])
    Reads array.
    Definition: device.hpp:371
    +
    Definition: device.hpp:637
    file_stream_device(const char *file_name, read_tag=read_tag())
    Definition: device.hpp:72
    diff --git a/html/reference/device__n_8hpp_source.html b/html/reference/device__n_8hpp_source.html index fde648f56..4c1d0beb7 100644 --- a/html/reference/device__n_8hpp_source.html +++ b/html/reference/device__n_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 #include <cstddef>
    18 #include <type_traits>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    22 
    23 // TODO: Document the DeviceN Color Space and Color Model
    @@ -137,7 +137,8 @@ $(function() {
    103 
    104 #endif
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    Given a pixel iterator defining access to pixels along a row, returns the types of the corresponding ...
    Definition: metafunctions.hpp:302
    Unnamed color space of 1, 2, 3, 4, or 5 channels.
    Definition: device_n.hpp:33
    unnamed color layout of up to five channels
    Definition: device_n.hpp:56
    diff --git a/html/reference/dynamic__at__c_8hpp_source.html b/html/reference/dynamic__at__c_8hpp_source.html index 39fe1db62..45925c600 100644 --- a/html/reference/dynamic__at__c_8hpp_source.html +++ b/html/reference/dynamic__at__c_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 
    16 #include <stdexcept>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    20 // Constructs for static-to-dynamic integer convesion
    21 
    @@ -160,6 +160,7 @@ $(function() {
    118 
    119 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    auto at_c(detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< E >::type
    Provides mutable access to the K-th element, in physical order.
    Definition: color_base.hpp:632
    diff --git a/html/reference/dynamic__step_8hpp_source.html b/html/reference/dynamic__step_8hpp_source.html index b336a8931..26c07b6f1 100644 --- a/html/reference/dynamic__step_8hpp_source.html +++ b/html/reference/dynamic__step_8hpp_source.html @@ -59,7 +59,7 @@ $(function() {
    10 
    11 #include <boost/gil/concepts/dynamic_step.hpp>
    12 
    -
    13 namespace boost { namespace gil {
    +
    13 namespace boost { namespace gil {
    14 
    16 template <typename IteratorOrLocatorOrView>
    @@ -74,6 +74,7 @@ $(function() {
    30 
    31 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    Returns the type of a view that has a dynamic step along both X and Y.
    Definition: dynamic_step.hpp:27
    Base template for types that model HasDynamicYStepTypeConcept.
    Definition: dynamic_step.hpp:21
    diff --git a/html/reference/error_8hpp_source.html b/html/reference/error_8hpp_source.html index b2a072f4e..6640304c3 100644 --- a/html/reference/error_8hpp_source.html +++ b/html/reference/error_8hpp_source.html @@ -59,7 +59,7 @@ $(function() {
    10 
    11 #include <ios>
    12 
    -
    13 namespace boost { namespace gil {
    +
    13 namespace boost { namespace gil {
    14 
    15 inline void io_error(const char* descr)
    16 {
    @@ -77,6 +77,7 @@ $(function() {
    28 
    29 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/extension_2dynamic__image_2algorithm_8hpp.html b/html/reference/extension_2dynamic__image_2algorithm_8hpp.html index 1be4b9759..c7eb1ecbd 100644 --- a/html/reference/extension_2dynamic__image_2algorithm_8hpp.html +++ b/html/reference/extension_2dynamic__image_2algorithm_8hpp.html @@ -44,6 +44,7 @@ $(function() {
    extension/dynamic_image/algorithm.hpp File Reference
    @@ -60,6 +61,12 @@ $(function() {

    Go to the source code of this file.

    axis_iterator() (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    axis_iterator() const (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    axis_iterator(const point_t &p) const (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    axis_iterator(point_t const &p) const (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    cache_location(const difference_type &d) const (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    cache_location(x_coord_t dx, y_coord_t dy) const (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >inline
    cached_location_t typedef (defined in pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >)pixel_2d_locator_base< virtual_2d_locator< DerefFn, IsTransposed >, position_iterator< DerefFn, IsTransposed >, position_iterator< DerefFn, 1-IsTransposed > >
    axis< D >::iterator const & axis_iterator () const
     
    -axis< D >::iterator axis_iterator (const point_t &p) const
     
    +axis< D >::iterator axis_iterator (point_t const &p) const
     
    reference operator() (x_coord_t dx, y_coord_t dy) const
     
    + + + + +

    +Namespaces

     boost
     defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
     
    diff --git a/html/reference/extension_2dynamic__image_2algorithm_8hpp_source.html b/html/reference/extension_2dynamic__image_2algorithm_8hpp_source.html index 42e10e036..bdaaa776f 100644 --- a/html/reference/extension_2dynamic__image_2algorithm_8hpp_source.html +++ b/html/reference/extension_2dynamic__image_2algorithm_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
    19 #include <utility>
    20 
    29 
    -
    30 namespace boost { namespace gil {
    +
    30 namespace boost { namespace gil {
    31 
    32 namespace detail {
    33 
    @@ -210,7 +210,7 @@ $(function() {
    208 
    209  using result_type = void;
    210  template <typename V>
    -
    211  result_type operator()(V const& view) const
    +
    211  result_type operator()(V const& view) const
    212  {
    213  fill_pixels_fn1
    214  <
    @@ -219,7 +219,7 @@ $(function() {
    217  typename V::value_type,
    218  Value
    219  >::value
    -
    220  >::apply(view, val_);
    +
    220  >::apply(view, val_);
    221  }
    222 
    223  Value val_;
    @@ -228,9 +228,9 @@ $(function() {
    226 } // namespace detail
    227 
    231 template <typename ...Types, typename Value>
    -
    232 void fill_pixels(any_image_view<Types...> const& view, Value const& val)
    +
    232 void fill_pixels(any_image_view<Types...> const& view, Value const& val)
    233 {
    -
    234  variant2::visit(detail::fill_pixels_fn<Value>(val), view);
    +
    234  variant2::visit(detail::fill_pixels_fn<Value>(val), view);
    235 }
    236 
    237 namespace detail {
    @@ -241,9 +241,9 @@ $(function() {
    242  for_each_pixel_fn(F&& fun) : fun_(std::move(fun)) {}
    243 
    244  template <typename View>
    -
    245  auto operator()(View const& view) -> F
    +
    245  auto operator()(View const& view) -> F
    246  {
    -
    247  return for_each_pixel(view, fun_);
    +
    247  return for_each_pixel(view, fun_);
    248  }
    249 
    250  F fun_;
    @@ -252,9 +252,9 @@ $(function() {
    253 } // namespace detail
    254 
    260 template <typename ...Types, typename F>
    -
    261 auto for_each_pixel(any_image_view<Types...> const& view, F fun) -> F
    +
    261 auto for_each_pixel(any_image_view<Types...> const& view, F fun) -> F
    262 {
    -
    263  return variant2::visit(detail::for_each_pixel_fn<F>(std::move(fun)), view);
    +
    263  return variant2::visit(detail::for_each_pixel_fn<F>(std::move(fun)), view);
    264 }
    265 
    266 }} // namespace boost::gil
    @@ -264,10 +264,11 @@ $(function() {
    void copy_pixels(any_image_view< Types1... > const &src, any_image_view< Types2... > const &dst)
    Definition: extension/dynamic_image/algorithm.hpp:113
    void fill_pixels(any_image_view< Types... > const &view, Value const &val)
    fill_pixels for any image view. The pixel to fill with must be compatible with the current view
    Definition: extension/dynamic_image/algorithm.hpp:232
    auto equal_pixels(any_image_view< Types1... > const &src, any_image_view< Types2... > const &dst) -> bool
    Definition: extension/dynamic_image/algorithm.hpp:72
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void copy_and_convert_pixels(any_image_view< Types1... > const &src, any_image_view< Types2... > const &dst)
    Definition: extension/dynamic_image/algorithm.hpp:179
    Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
    Definition: any_image_view.hpp:75
    -
    F for_each_pixel(View const &view, F fun)
    Definition: algorithm.hpp:874
    +
    F for_each_pixel(View const &view, F fun)
    Definition: algorithm.hpp:878
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/extension_2dynamic__image_2image__view__factory_8hpp_source.html b/html/reference/extension_2dynamic__image_2image__view__factory_8hpp_source.html index 2c14aacec..94af2b3ba 100644 --- a/html/reference/extension_2dynamic__image_2image__view__factory_8hpp_source.html +++ b/html/reference/extension_2dynamic__image_2image__view__factory_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 
    18 #include <cstdint>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    22 // Methods for constructing any image views from other any image views
    23 // Extends image view factory to runtime type-specified views (any_image_view)
    @@ -414,9 +414,10 @@ $(function() {
    408 #endif
    auto transposed_view(any_image_view< Views... > const &src) -> typename dynamic_xy_step_transposed_type< any_image_view< Views... >>::type
    Definition: extension/dynamic_image/image_view_factory.hpp:195
    -
    Returns the type of a view that does color conversion upon dereferencing its pixels.
    Definition: image_view_factory.hpp:159
    +
    Returns the type of a view that does color conversion upon dereferencing its pixels.
    Definition: image_view_factory.hpp:173
    auto any_color_converted_view(const any_image_view< Views... > &src) -> typename color_converted_view_type< any_image_view< Views... >, DstP >::type
    overload of generic color_converted_view with the default color-converter These are workarounds for G...
    Definition: extension/dynamic_image/image_view_factory.hpp:398
    auto flipped_left_right_view(any_image_view< Views... > const &src) -> typename dynamic_x_step_type< any_image_view< Views... >>::type
    Definition: extension/dynamic_image/image_view_factory.hpp:184
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    auto flipped_up_down_view(any_image_view< Views... > const &src) -> typename dynamic_y_step_type< any_image_view< Views... >>::type
    Definition: extension/dynamic_image/image_view_factory.hpp:173
    Returns the type of a transposed view that has a dynamic step along both X and Y.
    Definition: image_view_factory.hpp:51
    @@ -428,11 +429,11 @@ $(function() {
    auto rotated90ccw_view(any_image_view< Views... > const &src) -> typename dynamic_xy_step_transposed_type< any_image_view< Views... >>::type
    Definition: extension/dynamic_image/image_view_factory.hpp:217
    auto nth_channel_view(any_image_view< Views... > const &src, int n) -> typename nth_channel_view_type< any_image_view< Views... >>::type
    Definition: extension/dynamic_image/image_view_factory.hpp:308
    -
    Given a source image view type View, returns the type of an image view over a single channel of View.
    Definition: image_view_factory.hpp:406
    +
    Given a source image view type View, returns the type of an image view over a single channel of View.
    Definition: image_view_factory.hpp:437
    auto subimage_view(any_image_view< Views... > const &src, std::ptrdiff_t x_min, std::ptrdiff_t y_min, std::ptrdiff_t width, std::ptrdiff_t height) -> any_image_view< Views... >
    Definition: extension/dynamic_image/image_view_factory.hpp:253
    Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
    Definition: any_image_view.hpp:75
    Base template for types that model HasDynamicYStepTypeConcept.
    Definition: dynamic_step.hpp:21
    -
    class for color-converting one pixel to another
    Definition: color_convert.hpp:325
    +
    class for color-converting one pixel to another
    Definition: color_convert.hpp:328
    diff --git a/html/reference/filter_8hpp_source.html b/html/reference/filter_8hpp_source.html index 7dac6eec2..03380aaca 100644 --- a/html/reference/filter_8hpp_source.html +++ b/html/reference/filter_8hpp_source.html @@ -70,129 +70,127 @@ $(function() {
    21 #include <cstddef>
    22 #include <vector>
    23 
    -
    24 
    +
    24 namespace boost { namespace gil {
    25 
    -
    26 
    -
    27 namespace boost { namespace gil {
    -
    28 
    -
    29 template <typename SrcView, typename DstView>
    -
    30 void box_filter(
    -
    31  SrcView const& src_view,
    -
    32  DstView const& dst_view,
    -
    33  std::size_t kernel_size,
    -
    34  long int anchor = -1,
    -
    35  bool normalize=true,
    -
    36  boundary_option option = boundary_option::extend_zero
    -
    37 )
    -
    38 {
    -
    39  gil_function_requires<ImageViewConcept<SrcView>>();
    -
    40  gil_function_requires<MutableImageViewConcept<DstView>>();
    -
    41  static_assert(color_spaces_are_compatible
    -
    42  <
    -
    43  typename color_space_type<SrcView>::type,
    -
    44  typename color_space_type<DstView>::type
    -
    45  >::value, "Source and destination views must have pixels with the same color space");
    -
    46 
    -
    47  std::vector<float> kernel_values;
    -
    48  if (normalize) { kernel_values.resize(kernel_size, 1.0f / float(kernel_size)); }
    -
    49  else { kernel_values.resize(kernel_size, 1.0f); }
    +
    26 template <typename SrcView, typename DstView>
    +
    27 void box_filter(
    +
    28  SrcView const& src_view,
    +
    29  DstView const& dst_view,
    +
    30  std::size_t kernel_size,
    +
    31  long int anchor = -1,
    +
    32  bool normalize=true,
    +
    33  boundary_option option = boundary_option::extend_zero
    +
    34 )
    +
    35 {
    +
    36  gil_function_requires<ImageViewConcept<SrcView>>();
    +
    37  gil_function_requires<MutableImageViewConcept<DstView>>();
    +
    38  static_assert(color_spaces_are_compatible
    +
    39  <
    +
    40  typename color_space_type<SrcView>::type,
    +
    41  typename color_space_type<DstView>::type
    +
    42  >::value, "Source and destination views must have pixels with the same color space");
    +
    43 
    +
    44  std::vector<float> kernel_values;
    +
    45  if (normalize) { kernel_values.resize(kernel_size, 1.0f / float(kernel_size)); }
    +
    46  else { kernel_values.resize(kernel_size, 1.0f); }
    +
    47 
    +
    48  if (anchor == -1) anchor = static_cast<int>(kernel_size / 2);
    +
    49  kernel_1d<float> kernel(kernel_values.begin(), kernel_size, anchor);
    50 
    -
    51  if (anchor == -1) anchor = static_cast<int>(kernel_size / 2);
    -
    52  kernel_1d<float> kernel(kernel_values.begin(), kernel_size, anchor);
    -
    53 
    -
    54  detail::convolve_1d
    -
    55  <
    -
    56  pixel<float, typename SrcView::value_type::layout_t>
    -
    57  >(src_view, kernel, dst_view, option);
    -
    58 }
    -
    59 
    -
    60 template <typename SrcView, typename DstView>
    -
    61 void blur(
    -
    62  SrcView const& src_view,
    -
    63  DstView const& dst_view,
    -
    64  std::size_t kernel_size,
    -
    65  long int anchor = -1,
    -
    66  boundary_option option = boundary_option::extend_zero
    -
    67 )
    -
    68 {
    -
    69  box_filter(src_view, dst_view, kernel_size, anchor, true, option);
    -
    70 }
    -
    71 
    -
    72 
    -
    73 namespace detail
    +
    51  detail::convolve_1d
    +
    52  <
    +
    53  pixel<float, typename SrcView::value_type::layout_t>
    +
    54  >(src_view, kernel, dst_view, option);
    +
    55 }
    +
    56 
    +
    57 template <typename SrcView, typename DstView>
    +
    58 void blur(
    +
    59  SrcView const& src_view,
    +
    60  DstView const& dst_view,
    +
    61  std::size_t kernel_size,
    +
    62  long int anchor = -1,
    +
    63  boundary_option option = boundary_option::extend_zero
    +
    64 )
    +
    65 {
    +
    66  box_filter(src_view, dst_view, kernel_size, anchor, true, option);
    +
    67 }
    +
    68 
    +
    69 
    +
    70 namespace detail
    +
    71 {
    +
    72 template <typename SrcView, typename DstView>
    +
    73 void filter_median_impl(SrcView const& src_view, DstView const& dst_view, std::size_t kernel_size)
    74 {
    -
    75 template <typename SrcView, typename DstView>
    -
    76 void filter_median_impl(SrcView const& src_view, DstView const& dst_view, std::size_t kernel_size)
    -
    77 {
    -
    78  std::size_t half_kernel_size = kernel_size / 2;
    +
    75  std::size_t half_kernel_size = kernel_size / 2;
    +
    76 
    +
    77  // deciding output channel type and creating functor
    +
    78  using src_channel_t = typename channel_type<SrcView>::type;
    79 
    -
    80  // deciding output channel type and creating functor
    -
    81  using src_channel_t = typename channel_type<SrcView>::type;
    +
    80  std::vector<src_channel_t> values;
    +
    81  values.reserve(kernel_size * kernel_size);
    82 
    -
    83  std::vector<src_channel_t> values;
    -
    84  values.reserve(kernel_size * kernel_size);
    -
    85 
    -
    86  for (std::ptrdiff_t y = 0; y < src_view.height(); y++)
    -
    87  {
    -
    88  typename DstView::x_iterator dst_it = dst_view.row_begin(y);
    -
    89 
    -
    90  for (std::ptrdiff_t x = 0; x < src_view.width(); x++)
    -
    91  {
    -
    92  auto sub_view = subimage_view(
    -
    93  src_view,
    -
    94  x - half_kernel_size, y - half_kernel_size,
    -
    95  kernel_size,
    -
    96  kernel_size
    -
    97  );
    -
    98  values.assign(sub_view.begin(), sub_view.end());
    -
    99 
    -
    100  std::nth_element(values.begin(), values.begin() + (values.size() / 2), values.end());
    -
    101  dst_it[x] = values[values.size() / 2];
    -
    102  }
    -
    103  }
    -
    104 }
    -
    105 } // namespace detail
    -
    106 
    -
    107 template <typename SrcView, typename DstView>
    -
    108 void median_filter(SrcView const& src_view, DstView const& dst_view, std::size_t kernel_size)
    -
    109 {
    -
    110  static_assert(color_spaces_are_compatible
    -
    111  <
    -
    112  typename color_space_type<SrcView>::type,
    -
    113  typename color_space_type<DstView>::type
    -
    114  >::value, "Source and destination views must have pixels with the same color space");
    -
    115 
    -
    116  std::size_t half_kernel_size = kernel_size / 2;
    -
    117  auto extended_img = extend_boundary(
    -
    118  src_view,
    -
    119  half_kernel_size,
    -
    120  boundary_option::extend_constant
    -
    121  );
    -
    122  auto extended_view = subimage_view(
    -
    123  view(extended_img),
    -
    124  half_kernel_size,
    -
    125  half_kernel_size,
    -
    126  src_view.width(),
    -
    127  src_view.height()
    -
    128  );
    -
    129 
    -
    130  for (std::size_t channel = 0; channel < extended_view.num_channels(); channel++)
    -
    131  {
    -
    132  detail::filter_median_impl(
    -
    133  nth_channel_view(extended_view, channel),
    -
    134  nth_channel_view(dst_view, channel),
    -
    135  kernel_size
    -
    136  );
    -
    137  }
    -
    138 }
    -
    139 
    -
    140 }} //namespace boost::gil
    -
    141 
    -
    142 #endif // !BOOST_GIL_IMAGE_PROCESSING_FILTER_HPP
    +
    83  for (std::ptrdiff_t y = 0; y < src_view.height(); y++)
    +
    84  {
    +
    85  typename DstView::x_iterator dst_it = dst_view.row_begin(y);
    +
    86 
    +
    87  for (std::ptrdiff_t x = 0; x < src_view.width(); x++)
    +
    88  {
    +
    89  auto sub_view = subimage_view(
    +
    90  src_view,
    +
    91  x - half_kernel_size, y - half_kernel_size,
    +
    92  kernel_size,
    +
    93  kernel_size
    +
    94  );
    +
    95  values.assign(sub_view.begin(), sub_view.end());
    +
    96 
    +
    97  std::nth_element(values.begin(), values.begin() + (values.size() / 2), values.end());
    +
    98  dst_it[x] = values[values.size() / 2];
    +
    99  }
    +
    100  }
    +
    101 }
    +
    102 } // namespace detail
    +
    103 
    +
    104 template <typename SrcView, typename DstView>
    +
    105 void median_filter(SrcView const& src_view, DstView const& dst_view, std::size_t kernel_size)
    +
    106 {
    +
    107  static_assert(color_spaces_are_compatible
    +
    108  <
    +
    109  typename color_space_type<SrcView>::type,
    +
    110  typename color_space_type<DstView>::type
    +
    111  >::value, "Source and destination views must have pixels with the same color space");
    +
    112 
    +
    113  std::size_t half_kernel_size = kernel_size / 2;
    +
    114  auto extended_img = extend_boundary(
    +
    115  src_view,
    +
    116  half_kernel_size,
    +
    117  boundary_option::extend_constant
    +
    118  );
    +
    119  auto extended_view = subimage_view(
    +
    120  view(extended_img),
    +
    121  half_kernel_size,
    +
    122  half_kernel_size,
    +
    123  src_view.width(),
    +
    124  src_view.height()
    +
    125  );
    +
    126 
    +
    127  for (std::size_t channel = 0; channel < extended_view.num_channels(); channel++)
    +
    128  {
    +
    129  detail::filter_median_impl(
    +
    130  nth_channel_view(extended_view, channel),
    +
    131  nth_channel_view(dst_view, channel),
    +
    132  kernel_size
    +
    133  );
    +
    134  }
    +
    135 }
    +
    136 
    +
    137 }} //namespace boost::gil
    +
    138 
    +
    139 #endif // !BOOST_GIL_IMAGE_PROCESSING_FILTER_HPP
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    -
    View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
    Definition: image_view_factory.hpp:254
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    +
    View subimage_view(View const &src, typename View::point_t const &topleft, typename View::point_t const &dimensions)
    Definition: image_view_factory.hpp:283
    diff --git a/html/reference/functions.html b/html/reference/functions.html index 1888d0ef9..d5f7868ab 100644 --- a/html/reference/functions.html +++ b/html/reference/functions.html @@ -137,12 +137,12 @@ $(function() { , histogram< T >
  • operator[]() -: bit_aligned_pixel_iterator< NonAlignedPixelReference > +: bit_aligned_pixel_iterator< NonAlignedPixelReference > , dereference_iterator_adaptor< Iterator, DFn > , iterator_from_2d< Loc2 > -, memory_based_step_iterator +, memory_based_step_iterator , planar_pixel_iterator< ChannelPtr, ColorSpace > -, position_iterator< Deref, Dim > +, position_iterator< Deref, Dim >
  • @@ -160,7 +160,7 @@ $(function() {

    - r -

    • read() -: file_stream_device< FormatTag > +: file_stream_device< FormatTag > , istream_device< FormatTag >
    • read_uint16() @@ -199,7 +199,7 @@ $(function() {

      - w -

      @@ -160,7 +160,7 @@ $(function() {

      - r -

      • read() -: file_stream_device< FormatTag > +: file_stream_device< FormatTag > , istream_device< FormatTag >
      • read_uint16() @@ -199,7 +199,7 @@ $(function() {

        - w -

        • write() -: file_stream_device< FormatTag > +: file_stream_device< FormatTag > , ostream_device< FormatTag >
        • write_uint16() diff --git a/html/reference/fwd_8hpp_source.html b/html/reference/fwd_8hpp_source.html index 100a37df7..86c7ffc54 100644 --- a/html/reference/fwd_8hpp_source.html +++ b/html/reference/fwd_8hpp_source.html @@ -57,7 +57,7 @@ $(function() {
          8 #ifndef BOOST_GIL_CONCEPTS_FWD_HPP
          9 #define BOOST_GIL_CONCEPTS_FWD_HPP
          10 
          -
          11 namespace boost { namespace gil {
          +
          11 namespace boost { namespace gil {
          12 
          13 // Forward declarations used by concepts
          14 
          @@ -84,6 +84,7 @@ $(function() {
          35 
          36 #endif
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          diff --git a/html/reference/get__read__device_8hpp_source.html b/html/reference/get__read__device_8hpp_source.html index d7ac4a769..c783cba7e 100644 --- a/html/reference/get__read__device_8hpp_source.html +++ b/html/reference/get__read__device_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
          14 
          15 #include <type_traits>
          16 
          -
          17 namespace boost { namespace gil {
          +
          17 namespace boost { namespace gil {
          18 
          19 template< typename T
          20  , typename FormatTag
          @@ -117,6 +117,7 @@ $(function() {
          68 
          69 #endif
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          diff --git a/html/reference/get__reader_8hpp_source.html b/html/reference/get__reader_8hpp_source.html index 77446c5d2..fd718adde 100644 --- a/html/reference/get__reader_8hpp_source.html +++ b/html/reference/get__reader_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
          13 
          14 #include <type_traits>
          15 
          -
          16 namespace boost { namespace gil {
          +
          16 namespace boost { namespace gil {
          17 
          19 template
          20 <
          @@ -211,6 +211,7 @@ $(function() {
          166 
          167 #endif
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          Helper metafunction to generate image backend type.
          Definition: get_reader.hpp:114
          Helper metafunction to generate image reader type.
          Definition: get_reader.hpp:26
          Helper metafunction to generate image scanline_reader type.
          Definition: get_reader.hpp:158
          diff --git a/html/reference/get__write__device_8hpp_source.html b/html/reference/get__write__device_8hpp_source.html index db0476f8a..dddfc6888 100644 --- a/html/reference/get__write__device_8hpp_source.html +++ b/html/reference/get__write__device_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
          14 
          15 #include <type_traits>
          16 
          -
          17 namespace boost { namespace gil {
          +
          17 namespace boost { namespace gil {
          18 
          19 template <typename T, typename FormatTag, class Enable = void>
          20 struct get_write_device {};
          @@ -109,6 +109,7 @@ $(function() {
          60 
          61 #endif
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          diff --git a/html/reference/get__writer_8hpp_source.html b/html/reference/get__writer_8hpp_source.html index 1977b5283..5d66dedb4 100644 --- a/html/reference/get__writer_8hpp_source.html +++ b/html/reference/get__writer_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
          13 
          14 #include <type_traits>
          15 
          -
          16 namespace boost { namespace gil {
          +
          16 namespace boost { namespace gil {
          17 
          19 template <typename T, typename FormatTag, class Enable = void>
          20 struct get_writer {};
          @@ -152,6 +152,7 @@ $(function() {
          105 #endif
          Helper metafunction to generate writer type.
          Definition: get_writer.hpp:20
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          Helper metafunction to generate dynamic image writer type.
          Definition: get_writer.hpp:63
          diff --git a/html/reference/gray_8hpp_source.html b/html/reference/gray_8hpp_source.html index fda5cb2ac..4009f3776 100644 --- a/html/reference/gray_8hpp_source.html +++ b/html/reference/gray_8hpp_source.html @@ -60,7 +60,7 @@ $(function() {
          11 #include <boost/gil/utilities.hpp>
          12 #include <boost/gil/detail/mp11.hpp>
          13 
          -
          14 namespace boost { namespace gil {
          +
          14 namespace boost { namespace gil {
          15 
          18 struct gray_color_t {};
          19 
          @@ -73,7 +73,8 @@ $(function() {
          28 #endif
          29 
          -
          Represents a color space and ordering of channels in memory.
          Definition: utilities.hpp:266
          +
          defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
          Definition: algorithm.hpp:36
          +
          Represents a color space and ordering of channels in memory.
          Definition: utilities.hpp:267
          Gray.
          Definition: gray.hpp:18
          mp11::mp_list< gray_color_t > gray_t
          Definition: gray.hpp:21
          diff --git a/html/reference/group___channel_convert_algorithm.html b/html/reference/group___channel_convert_algorithm.html index 8b24f3db0..2218cbb02 100644 --- a/html/reference/group___channel_convert_algorithm.html +++ b/html/reference/group___channel_convert_algorithm.html @@ -68,11 +68,11 @@ Classes

    Functions

    template<typename ... Types, typename View >
    - - - - + + +

    Functions

    +
    template<typename DstChannel , typename SrcChannel >
    channel_traits< DstChannel >::value_type channel_convert (const SrcChannel &src)
     Converting from one channel type to another.
     
    auto channel_convert (SrcChannel const &src) -> typename channel_traits< DstChannel >::value_type
     Converting from one channel type to another.
     

    Detailed Description

    Converting from one channel type to another.

    @@ -86,7 +86,7 @@ template<typename DstChannel , typename SrcChannel >
    uint8_t dst_channel = channel_convert<uint8_t>(src_channel);
    assert(dst_channel == 255); // max value goes to max value
    -
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:124
    +
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:153
    diff --git a/html/reference/group___channel_invert_algorithm.html b/html/reference/group___channel_invert_algorithm.html index efb3fcfc5..3bd5522a8 100644 --- a/html/reference/group___channel_invert_algorithm.html +++ b/html/reference/group___channel_invert_algorithm.html @@ -51,20 +51,20 @@ $(function() { - - - - + + + +

    Functions

    template<typename Channel >
    channel_traits< Channel >::value_type channel_invert (Channel x)
     Default implementation. Provide overloads for performance. More...
     
    template<typename Channel >
    auto channel_invert (Channel x) -> typename channel_traits< Channel >::value_type
     Default implementation. Provide overloads for performance. More...
     

    Detailed Description

    Returns the inverse of a channel. result = max_value - x + min_value.

    Example:

    // uint8_t == uint8_t == unsigned char
    uint8_t x=255;
    -
    uint8_t inv = channel_invert(x);
    +
    uint8_t inv = channel_invert(x);
    assert(inv == 0);

    Function Documentation

    - -

    ◆ channel_invert()

    + +

    ◆ channel_invert()

    @@ -73,11 +73,12 @@ Functions - + - +
    channel_traits<Channel>::value_type boost::gil::channel_invert auto boost::gil::channel_invert ( Channel  x) -> typename channel_traits<Channel>::value_type +
    @@ -92,7 +93,7 @@ Functions
    -
    channel_traits< Channel >::value_type channel_invert(Channel x)
    Default implementation. Provide overloads for performance.
    Definition: channel_algorithm.hpp:559
    +
    auto channel_invert(Channel x) -> typename channel_traits< Channel >::value_type
    Default implementation. Provide overloads for performance.
    Definition: channel_algorithm.hpp:582
    diff --git a/html/reference/group___channel_multiply_algorithm.html b/html/reference/group___channel_multiply_algorithm.html index 83b332758..881c49180 100644 --- a/html/reference/group___channel_multiply_algorithm.html +++ b/html/reference/group___channel_multiply_algorithm.html @@ -70,20 +70,20 @@ Classes - - - - + + +

    Functions

    +
    template<typename Channel >
    channel_traits< Channel >::value_type channel_multiply (Channel a, Channel b)
     A function multiplying two channels. result = a * b / max_value.
     
    auto channel_multiply (Channel a, Channel b) -> typename channel_traits< Channel >::value_type
     A function multiplying two channels. result = a * b / max_value.
     

    Detailed Description

    Multiplying unsigned channel values of the same type. Performs scaled multiplication result = a * b / max_value.

    Example:

    uint8_t x=128;
    uint8_t y=128;
    -
    uint8_t mul = channel_multiply(x,y);
    +
    uint8_t mul = channel_multiply(x,y);
    assert(mul == 64); // 64 = 128 * 128 / 255
    -
    channel_traits< Channel >::value_type channel_multiply(Channel a, Channel b)
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:539
    +
    auto channel_multiply(Channel a, Channel b) -> typename channel_traits< Channel >::value_type
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:561
    diff --git a/html/reference/group___color_base_algorithm_color.html b/html/reference/group___color_base_algorithm_color.html index 93945ec8a..6bba77b9a 100644 --- a/html/reference/group___color_base_algorithm_color.html +++ b/html/reference/group___color_base_algorithm_color.html @@ -67,14 +67,14 @@ Classes - - - - - - - - + + + + + + + +

    Functions

    template<typename ColorBase , typename Color >
    color_element_reference_type< ColorBase, Color >::type get_color (ColorBase &cb, Color=Color())
     Mutable accessor to the element associated with a given color name. More...
     
    template<typename ColorBase , typename Color >
    color_element_const_reference_type< ColorBase, Color >::type get_color (const ColorBase &cb, Color=Color())
     Constant accessor to the element associated with a given color name. More...
     
    template<typename ColorBase , typename Color >
    auto get_color (ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
     Mutable accessor to the element associated with a given color name. More...
     
    template<typename ColorBase , typename Color >
    auto get_color (const ColorBase &cb, Color=Color()) -> typename color_element_const_reference_type< ColorBase, Color >::type
     Constant accessor to the element associated with a given color name. More...
     

    Detailed Description

    get_color: Named channel accessors

    @@ -86,17 +86,17 @@ Functions
    static_assert(contains_color<Pixel, red_t>::value, "");
    using red_channel_t = typename color_element_type<Pixel, red_t>::type;
    -
    get_color(pixel, red_t()) = channel_traits<red_channel_t>::max_value();
    +
    get_color(pixel, red_t()) = channel_traits<red_channel_t>::max_value();
    }

    Function Documentation

    - -

    ◆ get_color() [1/2]

    + +

    ◆ get_color() [1/2]

    - + @@ -110,7 +110,8 @@ Functions - +
    color_element_reference_type<ColorBase,Color>::type boost::gil::get_color auto boost::gil::get_color ( ColorBase &  cb,
    ) -> typename color_element_reference_type<ColorBase,Color>::type +
    @@ -119,14 +120,14 @@ Functions
    - -

    ◆ get_color() [2/2]

    + +

    ◆ get_color() [2/2]

    - + @@ -140,7 +141,8 @@ Functions - +
    color_element_const_reference_type<ColorBase,Color>::type boost::gil::get_color auto boost::gil::get_color ( const ColorBase &  cb,
    ) -> typename color_element_const_reference_type<ColorBase,Color>::type +
    @@ -150,7 +152,7 @@ Functions
    -
    color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    +
    auto get_color(ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    diff --git a/html/reference/group___color_base_algorithm_equal.html b/html/reference/group___color_base_algorithm_equal.html index c159ed684..1797d4656 100644 --- a/html/reference/group___color_base_algorithm_equal.html +++ b/html/reference/group___color_base_algorithm_equal.html @@ -51,10 +51,10 @@ $(function() { - - - + +

    Functions

    +
    template<typename P1 , typename P2 >
    BOOST_FORCEINLINE bool static_equal (const P1 &p1, const P2 &p2)
     
    BOOST_FORCEINLINE bool static_equal (P1 const &p1, const P2 &p2)
     

    Detailed Description

    Equivalent to std::equal. Pairs the elements semantically.

    diff --git a/html/reference/group___color_base_algorithm_min_max.html b/html/reference/group___color_base_algorithm_min_max.html index e153ebd44..b33f2a680 100644 --- a/html/reference/group___color_base_algorithm_min_max.html +++ b/html/reference/group___color_base_algorithm_min_max.html @@ -51,22 +51,22 @@ $(function() { - - - - + + - - - + + - - - + + - - + +

    Functions

    +
    template<typename P >
    BOOST_FORCEINLINE element_const_reference_type< P >::type static_max (const P &p)
     
    +
    BOOST_FORCEINLINE auto static_max (P const &p) -> typename element_const_reference_type< P >::type
     
    template<typename P >
    BOOST_FORCEINLINE element_reference_type< P >::type static_max (P &p)
     
    +
    BOOST_FORCEINLINE auto static_max (P &p) -> typename element_reference_type< P >::type
     
    template<typename P >
    BOOST_FORCEINLINE element_const_reference_type< P >::type static_min (const P &p)
     
    +
    BOOST_FORCEINLINE auto static_min (P const &p) -> typename element_const_reference_type< P >::type
     
    template<typename P >
    BOOST_FORCEINLINE element_reference_type< P >::type static_min (P &p)
     
    BOOST_FORCEINLINE auto static_min (P &p) -> typename element_reference_type< P >::type
     

    Detailed Description

    Equivalents to std::min_element and std::max_element for homogeneous color bases.

    diff --git a/html/reference/group___color_base_algorithm_semantic_at_c.html b/html/reference/group___color_base_algorithm_semantic_at_c.html index 29fd54345..702f71d93 100644 --- a/html/reference/group___color_base_algorithm_semantic_at_c.html +++ b/html/reference/group___color_base_algorithm_semantic_at_c.html @@ -68,10 +68,10 @@ Functions auto semantic_at_c (ColorBase &p) -> typename std::enable_if< !std::is_const< ColorBase >::value, typename kth_semantic_element_reference_type< ColorBase, K >::type >::type  A mutable accessor to the K-th semantic element of a color base. More...
      -template<int K, typename ColorBase > -auto semantic_at_c (ColorBase const &p) -> typename kth_semantic_element_const_reference_type< ColorBase, K >::type - A constant accessor to the K-th semantic element of a color base. More...
    -  +template<int K, typename ColorBase > +auto semantic_at_c (ColorBase const &p) -> typename kth_semantic_element_const_reference_type< ColorBase, K >::type + A constant accessor to the K-th semantic element of a color base. More...

    Detailed Description

    semantic_at_c: Semantic channel accessors

    @@ -118,8 +118,8 @@ Functions - -

    ◆ semantic_at_c() [2/2]

    + +

    ◆ semantic_at_c() [2/2]

    @@ -130,7 +130,7 @@ Functions auto semantic_at_c ( - ColorBase const &  + const ColorBase &  p) -> typename kth_semantic_element_const_reference_type< ColorBase, K >::type diff --git a/html/reference/group___histogram-_helpers.html b/html/reference/group___histogram-_helpers.html index df3cc4e25..feaaa3953 100644 --- a/html/reference/group___histogram-_helpers.html +++ b/html/reference/group___histogram-_helpers.html @@ -67,10 +67,10 @@ Classes - - - + + diff --git a/html/reference/group___image_model.html b/html/reference/group___image_model.html index 2cbc24322..3eca96d50 100644 --- a/html/reference/group___image_model.html +++ b/html/reference/group___image_model.html @@ -62,11 +62,11 @@ Classes view, const_view - - - - + + + @@ -75,11 +75,11 @@ template<typename Pixel , bool IsPlanar, typename Alloc > - - - - + + +

    Functions

    +
    template<std::size_t Index, typename... T>
    std::enable_if< Index==sizeof...(T), void >::type hash_tuple_impl (std::size_t &, std::tuple< T... > const &)
     
    auto hash_tuple_impl (std::size_t &, std::tuple< T... > const &) -> typename std::enable_if< Index==sizeof...(T), void >::type
     
    template<typename Pixel , std::size_t... I>
    auto pixel_to_tuple (Pixel const &p, boost::mp11::index_sequence< I... >) -> decltype(std::make_tuple(p[I]...))
     

    Get an image view from a run-time instantiated image

    +
    template<typename Pixel , bool IsPlanar, typename Alloc >
    const image< Pixel, IsPlanar, Alloc >::view_t & view (image< Pixel, IsPlanar, Alloc > &img)
     Returns the non-constant-pixel view of an image.
     
    auto view (image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
     Returns the non-constant-pixel view of an image.
     
    template<typename ... Images>
    BOOST_FORCEINLINE auto view (any_image< Images... > &img) -> typename any_image< Images... >::view_t
     Returns the non-constant-pixel view of any image. The returned view is any view. More...
    BOOST_FORCEINLINE auto const_view (any_image< Images... > const &img) -> typename any_image< Images... >::const_view_t
     Returns the constant-pixel view of any image. The returned view is any view. More...
     
    +
    template<typename Pixel , bool IsPlanar, typename Alloc >
    const image< Pixel, IsPlanar, Alloc >::const_view_t const_view (const image< Pixel, IsPlanar, Alloc > &img)
     Returns the constant-pixel view of an image.
     
    auto const_view (const image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::const_view_t const
     Returns the constant-pixel view of an image.
     

    Detailed Description

    Image models.

    diff --git a/html/reference/group___image_processing_math.html b/html/reference/group___image_processing_math.html index 5b9a3b005..2f5d10f35 100644 --- a/html/reference/group___image_processing_math.html +++ b/html/reference/group___image_processing_math.html @@ -54,34 +54,34 @@ Functions double lanczos (double x, std::ptrdiff_t a)  Lanczos response at point x. More...
      -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_normalized_mean (std::size_t side_length) - Generate mean kernel. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_unnormalized_mean (std::size_t side_length) - Generate kernel with all 1s. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_gaussian_kernel (std::size_t side_length, double sigma) - Generate Gaussian kernel. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_dx_sobel (unsigned int degree=1) - Generates Sobel operator in horizontal direction. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_dx_scharr (unsigned int degree=1) - Generate Scharr operator in horizontal direction. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_dy_sobel (unsigned int degree=1) - Generates Sobel operator in vertical direction. More...
    -  -template<typename T = float, typename Allocator = std::allocator<T>> -detail::kernel_2d< T, Allocator > generate_dy_scharr (unsigned int degree=1) - Generate Scharr operator in vertical direction. More...
    -  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_normalized_mean (std::size_t side_length) -> detail::kernel_2d< T, Allocator > + Generate mean kernel. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_unnormalized_mean (std::size_t side_length) -> detail::kernel_2d< T, Allocator > + Generate kernel with all 1s. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_gaussian_kernel (std::size_t side_length, double sigma) -> detail::kernel_2d< T, Allocator > + Generate Gaussian kernel. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_dx_sobel (unsigned int degree=1) -> detail::kernel_2d< T, Allocator > + Generates Sobel operator in horizontal direction. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_dx_scharr (unsigned int degree=1) -> detail::kernel_2d< T, Allocator > + Generate Scharr operator in horizontal direction. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_dy_sobel (unsigned int degree=1) -> detail::kernel_2d< T, Allocator > + Generates Sobel operator in vertical direction. More...
    +  +template<typename T = float, typename Allocator = std::allocator<T>> +auto generate_dy_scharr (unsigned int degree=1) -> detail::kernel_2d< T, Allocator > + Generate Scharr operator in vertical direction. More...
    +  template<typename GradientView , typename OutputView > void compute_hessian_entries (GradientView dx, GradientView dy, OutputView ddxx, OutputView dxdy, OutputView ddyy)  Compute xy gradient, and second order x and y gradients. More...
    @@ -150,8 +150,8 @@ Functions
    - -

    ◆ generate_dx_scharr()

    + +

    ◆ generate_dx_scharr()

    @@ -160,11 +160,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_dx_scharr auto boost::gil::generate_dx_scharr ( unsigned int  degree = 1) -> detail::kernel_2d<T, Allocator> +
    @@ -179,8 +180,8 @@ Functions
    - -

    ◆ generate_dx_sobel()

    + +

    ◆ generate_dx_sobel()

    @@ -189,11 +190,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_dx_sobel auto boost::gil::generate_dx_sobel ( unsigned int  degree = 1) -> detail::kernel_2d<T, Allocator> +
    @@ -208,8 +210,8 @@ Functions
    - -

    ◆ generate_dy_scharr()

    + +

    ◆ generate_dy_scharr()

    @@ -218,11 +220,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_dy_scharr auto boost::gil::generate_dy_scharr ( unsigned int  degree = 1) -> detail::kernel_2d<T, Allocator> +
    @@ -237,8 +240,8 @@ Functions
    - -

    ◆ generate_dy_sobel()

    + +

    ◆ generate_dy_sobel()

    @@ -247,11 +250,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_dy_sobel auto boost::gil::generate_dy_sobel ( unsigned int  degree = 1) -> detail::kernel_2d<T, Allocator> +
    @@ -266,8 +270,8 @@ Functions
    - -

    ◆ generate_gaussian_kernel()

    + +

    ◆ generate_gaussian_kernel()

    @@ -276,7 +280,7 @@ Functions - + @@ -290,7 +294,8 @@ Functions - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_gaussian_kernel auto boost::gil::generate_gaussian_kernel ( std::size_t  side_length,
    ) -> detail::kernel_2d<T, Allocator> +
    @@ -305,8 +310,8 @@ Functions
    - -

    ◆ generate_normalized_mean()

    + +

    ◆ generate_normalized_mean()

    @@ -315,11 +320,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_normalized_mean auto boost::gil::generate_normalized_mean ( std::size_t  side_length) -> detail::kernel_2d<T, Allocator> +
    @@ -334,8 +340,8 @@ Functions
    - -

    ◆ generate_unnormalized_mean()

    + +

    ◆ generate_unnormalized_mean()

    @@ -344,11 +350,12 @@ Functions - + - +
    detail::kernel_2d<T, Allocator> boost::gil::generate_unnormalized_mean auto boost::gil::generate_unnormalized_mean ( std::size_t  side_length) -> detail::kernel_2d<T, Allocator> +
    diff --git a/html/reference/group___image_view_constructors.html b/html/reference/group___image_view_constructors.html index d73253bda..724dbb8f4 100644 --- a/html/reference/group___image_view_constructors.html +++ b/html/reference/group___image_view_constructors.html @@ -51,11 +51,11 @@ $(function() { - - - - + + + @@ -76,26 +76,26 @@ template<typename IC > - - - - + + + - - - - - + + + - - - + + + diff --git a/html/reference/group___image_view_transformations180.html b/html/reference/group___image_view_transformations180.html index f54efbb70..7fbe4bebb 100644 --- a/html/reference/group___image_view_transformations180.html +++ b/html/reference/group___image_view_transformations180.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    +
    template<typename IC >
    type_from_x_iterator< planar_pixel_iterator< IC, cmyk_t > >::view_t planar_cmyk_view (std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes)
     from raw CMYK planar data
     
    auto planar_cmyk_view (std::size_t width, std::size_t height, IC c, IC m, IC y, IC k, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, cmyk_t >>::view_t
     from raw CMYK planar data
     
    template<typename IC >
    auto planar_devicen_view (std::size_t width, std::size_t height, IC c0, IC c1, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, devicen_t< 2 >>>::view_t
    auto planar_devicen_view (std::size_t width, std::size_t height, IC c0, IC c1, IC c2, IC c3, IC c4, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, devicen_t< 5 >>>::view_t
     from 5-channel planar data
     
    +
    template<typename Iterator >
    type_from_x_iterator< Iterator >::view_t interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes)
     Constructing image views from raw interleaved pixel data.
     
    auto interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< Iterator >::view_t
     Constructing image views from raw interleaved pixel data.
     
    template<typename Iterator >
    auto interleaved_view (point< std::ptrdiff_t > dim, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< Iterator >::view_t
     Constructing image views from raw interleaved pixel data.
     
    +
    template<typename HomogeneousView >
    detail::channel_pointer_type< HomogeneousView >::type interleaved_view_get_raw_data (const HomogeneousView &view)
     Returns C pointer to the the channels of an interleaved homogeneous view.
     
    +
    auto interleaved_view_get_raw_data (HomogeneousView const &view) -> typename detail::channel_pointer_type< HomogeneousView >::type
     Returns C pointer to the the channels of an interleaved homogeneous view.
     
    template<typename HomogeneousView >
    detail::channel_pointer_type< HomogeneousView >::type planar_view_get_raw_data (const HomogeneousView &view, int plane_index)
     Returns C pointer to the the channels of a given color plane of a planar homogeneous view.
     
    auto planar_view_get_raw_data (HomogeneousView const &view, int plane_index) -> typename detail::channel_pointer_type< HomogeneousView >::type
     Returns C pointer to the the channels of a given color plane of a planar homogeneous view.
     
    template<typename IC >
    auto planar_rgb_view (std::size_t width, std::size_t height, IC r, IC g, IC b, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, rgb_t > >::view_t
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ rotated180_view() [2/2]

    + +

    ◆ rotated180_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___image_view_transformations90_c_c_w.html b/html/reference/group___image_view_transformations90_c_c_w.html index c237ec1f5..407a670ae 100644 --- a/html/reference/group___image_view_transformations90_c_c_w.html +++ b/html/reference/group___image_view_transformations90_c_c_w.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    template<typename View >
    dynamic_xy_step_type< View >::type rotated180_view (const View &src)
     
    template<typename View >
    auto rotated180_view (View const &src) -> typename dynamic_xy_step_type< View >::type
     
    template<typename ... Views>
    auto rotated180_view (any_image_view< Views... > const &src) -> typename dynamic_xy_step_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_xy_step_type<View>::type boost::gil::rotated180_view auto boost::gil::rotated180_view (const View & View const &  src) -> typename dynamic_xy_step_type<View>::type +
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ rotated90ccw_view() [2/2]

    + +

    ◆ rotated90ccw_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___image_view_transformations90_c_w.html b/html/reference/group___image_view_transformations90_c_w.html index ccfaf805a..46cfbced4 100644 --- a/html/reference/group___image_view_transformations90_c_w.html +++ b/html/reference/group___image_view_transformations90_c_w.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    template<typename View >
    dynamic_xy_step_transposed_type< View >::type rotated90ccw_view (const View &src)
     
    template<typename View >
    auto rotated90ccw_view (View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
     
    template<typename ... Views>
    auto rotated90ccw_view (any_image_view< Views... > const &src) -> typename dynamic_xy_step_transposed_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_xy_step_transposed_type<View>::type boost::gil::rotated90ccw_view auto boost::gil::rotated90ccw_view (const View & View const &  src) -> typename dynamic_xy_step_transposed_type<View>::type +
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ rotated90cw_view() [2/2]

    + +

    ◆ rotated90cw_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___image_view_transformations_color_convert.html b/html/reference/group___image_view_transformations_color_convert.html index b0d3e57aa..6421a7449 100644 --- a/html/reference/group___image_view_transformations_color_convert.html +++ b/html/reference/group___image_view_transformations_color_convert.html @@ -67,16 +67,16 @@ Classes

    Functions

    template<typename View >
    dynamic_xy_step_transposed_type< View >::type rotated90cw_view (const View &src)
     
    template<typename View >
    auto rotated90cw_view (View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
     
    template<typename ... Views>
    auto rotated90cw_view (any_image_view< Views... > const &src) -> typename dynamic_xy_step_transposed_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_xy_step_transposed_type<View>::type boost::gil::rotated90cw_view auto boost::gil::rotated90cw_view (const View & View const &  src) -> typename dynamic_xy_step_transposed_type<View>::type +
    - - - - - + + + - - - + + + diff --git a/html/reference/group___image_view_transformations_flip_l_r.html b/html/reference/group___image_view_transformations_flip_l_r.html index 1b399e14c..2a0d10933 100644 --- a/html/reference/group___image_view_transformations_flip_l_r.html +++ b/html/reference/group___image_view_transformations_flip_l_r.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    +
    template<typename DstP , typename View , typename CC >
    color_converted_view_type< View, DstP, CC >::type color_converted_view (const View &src, CC cc)
     view of a different color space with a user defined color-converter
     
    +
    auto color_converted_view (View const &src, CC cc) -> typename color_converted_view_type< View, DstP, CC >::type
     view of a different color space with a user defined color-converter
     
    template<typename DstP , typename View >
    color_converted_view_type< View, DstP >::type color_converted_view (const View &src)
     overload of generic color_converted_view with the default color-converter
     
    auto color_converted_view (View const &src) -> typename color_converted_view_type< View, DstP >::type
     overload of generic color_converted_view with the default color-converter
     
    template<typename DstP , typename ... Views, typename CC >
    auto color_converted_view (any_image_view< Views... > const &src, CC) -> typename color_converted_view_type< any_image_view< Views... >, DstP, CC >::type
     overload of generic color_converted_view with user defined color-converter More...
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ flipped_left_right_view() [2/2]

    + +

    ◆ flipped_left_right_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___image_view_transformations_flip_u_d.html b/html/reference/group___image_view_transformations_flip_u_d.html index 1a27595de..13ab71589 100644 --- a/html/reference/group___image_view_transformations_flip_u_d.html +++ b/html/reference/group___image_view_transformations_flip_u_d.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    template<typename View >
    dynamic_x_step_type< View >::type flipped_left_right_view (const View &src)
     
    template<typename View >
    auto flipped_left_right_view (View const &src) -> typename dynamic_x_step_type< View >::type
     
    template<typename ... Views>
    auto flipped_left_right_view (any_image_view< Views... > const &src) -> typename dynamic_x_step_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_x_step_type<View>::type boost::gil::flipped_left_right_view auto boost::gil::flipped_left_right_view (const View & View const &  src) -> typename dynamic_x_step_type<View>::type +
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ flipped_up_down_view() [2/2]

    + +

    ◆ flipped_up_down_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___image_view_transformations_kth_channel.html b/html/reference/group___image_view_transformations_kth_channel.html index 3543e7eff..2862b39a6 100644 --- a/html/reference/group___image_view_transformations_kth_channel.html +++ b/html/reference/group___image_view_transformations_kth_channel.html @@ -58,25 +58,26 @@ Classes

    Functions

    template<typename View >
    dynamic_y_step_type< View >::type flipped_up_down_view (const View &src)
     
    template<typename View >
    auto flipped_up_down_view (View const &src) -> typename dynamic_y_step_type< View >::type
     
    template<typename ... Views>
    auto flipped_up_down_view (any_image_view< Views... > const &src) -> typename dynamic_y_step_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_y_step_type<View>::type boost::gil::flipped_up_down_view auto boost::gil::flipped_up_down_view (const View & View const &  src) -> typename dynamic_y_step_type<View>::type +
    - - - + + +

    Functions

    template<int K, typename View >
    kth_channel_view_type< K, View >::type kth_channel_view (const View &src)
     
    template<int K, typename View >
    auto kth_channel_view (View const &src) -> typename kth_channel_view_type< K, View >::type
     

    Detailed Description

    single-channel (grayscale) view of the K-th channel of a given image_view. The channel index is a template parameter

    Function Documentation

    - -

    ◆ kth_channel_view()

    + +

    ◆ kth_channel_view()

    - + - + - +
    kth_channel_view_type<K,View>::type boost::gil::kth_channel_view auto boost::gil::kth_channel_view (const View & View const &  src) -> typename kth_channel_view_type<K,View>::type +
    diff --git a/html/reference/group___image_view_transformations_nth_channel.html b/html/reference/group___image_view_transformations_nth_channel.html index 5f8677243..5124e910c 100644 --- a/html/reference/group___image_view_transformations_nth_channel.html +++ b/html/reference/group___image_view_transformations_nth_channel.html @@ -61,9 +61,9 @@ Classes - - - + + + @@ -114,8 +114,8 @@ Functions - -

    ◆ nth_channel_view() [2/2]

    + +

    ◆ nth_channel_view() [2/2]

    @@ -123,7 +123,7 @@ Functions
    - + diff --git a/html/reference/group___image_view_transformations_transposed.html b/html/reference/group___image_view_transformations_transposed.html index 43e56ca67..57c7dfa2d 100644 --- a/html/reference/group___image_view_transformations_transposed.html +++ b/html/reference/group___image_view_transformations_transposed.html @@ -51,9 +51,9 @@ $(function() {

    Functions

    template<typename View >
    nth_channel_view_type< View >::type nth_channel_view (const View &src, int n)
     
    template<typename View >
    nth_channel_view_type< View >::type nth_channel_view (View const &src, int n)
     
    template<typename ... Views>
    auto nth_channel_view (any_image_view< Views... > const &src, int n) -> typename nth_channel_view_type< any_image_view< Views... >>::type
     
    nth_channel_view_type<View>::type boost::gil::nth_channel_view (const View & View const &  src,
    - - - + + + @@ -94,8 +94,8 @@ Functions - -

    ◆ transposed_view() [2/2]

    + +

    ◆ transposed_view() [2/2]

    @@ -104,11 +104,12 @@ Functions
    diff --git a/html/reference/group___pixel_model_non_aligned_pixel.html b/html/reference/group___pixel_model_non_aligned_pixel.html index ecf51565e..fd81800ce 100644 --- a/html/reference/group___pixel_model_non_aligned_pixel.html +++ b/html/reference/group___pixel_model_non_aligned_pixel.html @@ -55,11 +55,11 @@ $(function() {
    // create the pixel reference at bit offset 2
    // (i.e. red = [2], green = [3,4], blue = [5,6,7] bits)
    rgb123_ref_t ref(&data, 2);
    -
    get_color(ref, red_t()) = 1;
    +
    get_color(ref, red_t()) = 1;
    assert(data == 0x04);
    -
    get_color(ref, green_t()) = 3;
    +
    get_color(ref, green_t()) = 3;
    assert(data == 0x1C);
    -
    get_color(ref, blue_t()) = 7;
    +
    get_color(ref, blue_t()) = 7;
    assert(data == 0xFC);

    Heterogeneous pixel reference corresponding to non-byte-aligned bit range. Models ColorBaseConcept, PixelConcept, PixelBasedConcept

    Template Parameters
    @@ -72,8 +72,8 @@ $(function() {
    -
    color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    layout< rgb_t > rgb_layout_t
    Definition: rgb.hpp:37
    +
    auto get_color(ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    diff --git a/html/reference/group___pixel_model_packed_pixel.html b/html/reference/group___pixel_model_packed_pixel.html index fd6c15b21..2d4715b70 100644 --- a/html/reference/group___pixel_model_packed_pixel.html +++ b/html/reference/group___pixel_model_packed_pixel.html @@ -61,13 +61,13 @@ Classes
    static_assert(sizeof(rgb565_pixel_t) == 2, "");
    rgb565_pixel_t r565;
    -
    get_color(r565,red_t()) = 31;
    -
    get_color(r565,green_t()) = 63;
    -
    get_color(r565,blue_t()) = 31;
    +
    get_color(r565,red_t()) = 31;
    +
    get_color(r565,green_t()) = 63;
    +
    get_color(r565,blue_t()) = 31;
    assert(r565 == rgb565_pixel_t((uint16_t)0xFFFF));
    -
    color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    layout< rgb_t > rgb_layout_t
    Definition: rgb.hpp:37
    +
    auto get_color(ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    diff --git a/html/reference/group___point_algorithm.html b/html/reference/group___point_algorithm.html index 4e7db4e16..505752a92 100644 --- a/html/reference/group___point_algorithm.html +++ b/html/reference/group___point_algorithm.html @@ -51,28 +51,28 @@ $(function() {

    Functions

    template<typename View >
    dynamic_xy_step_transposed_type< View >::type transposed_view (const View &src)
     
    template<typename View >
    auto transposed_view (View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
     
    template<typename ... Views>
    auto transposed_view (any_image_view< Views... > const &src) -> typename dynamic_xy_step_transposed_type< any_image_view< Views... >>::type
     
    - + - + - +
    dynamic_xy_step_transposed_type<View>::type boost::gil::transposed_view auto boost::gil::transposed_view (const View & View const &  src) -> typename dynamic_xy_step_transposed_type<View>::type +
    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +

    Functions

    template<typename T >
    point< std::ptrdiff_t > iround (point< T > const &p)
     
    point< std::ptrdiff_t > iround (point< float > const &p)
     
    point< std::ptrdiff_t > iround (point< double > const &p)
     
    point< std::ptrdiff_t > ifloor (point< float > const &p)
     
    point< std::ptrdiff_t > ifloor (point< double > const &p)
     
    point< std::ptrdiff_t > iceil (point< float > const &p)
     
    point< std::ptrdiff_t > iceil (point< double > const &p)
     
    template<typename T >
    auto iround (point< T > const &p) -> point< std::ptrdiff_t >
     
    auto iround (point< float > const &p) -> point< std::ptrdiff_t >
     
    auto iround (point< double > const &p) -> point< std::ptrdiff_t >
     
    auto ifloor (point< float > const &p) -> point< std::ptrdiff_t >
     
    auto ifloor (point< double > const &p) -> point< std::ptrdiff_t >
     
    auto iceil (point< float > const &p) -> point< std::ptrdiff_t >
     
    auto iceil (point< double > const &p) -> point< std::ptrdiff_t >
     

    Detailed Description

    Algorithms and Utility Functions for points.

    -

    Example:

    assert(iround(point<double>(3.1, 3.9)) == point<std::ptrdiff_t>(3,4));
    +

    Example:

    assert(iround(point<double>(3.1, 3.9)) == point<std::ptrdiff_t>(3,4));

    Function Documentation

    - -

    ◆ iceil() [1/2]

    + +

    ◆ iceil() [1/2]

    @@ -81,11 +81,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::iceil auto boost::gil::iceil ( point< double > const &  p) -> point<std::ptrdiff_t> +
    @@ -97,8 +98,8 @@ Functions
    - -

    ◆ iceil() [2/2]

    + +

    ◆ iceil() [2/2]

    @@ -107,11 +108,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::iceil auto boost::gil::iceil ( point< float > const &  p) -> point<std::ptrdiff_t> +
    @@ -123,8 +125,8 @@ Functions
    - -

    ◆ ifloor() [1/2]

    + +

    ◆ ifloor() [1/2]

    @@ -133,11 +135,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::ifloor auto boost::gil::ifloor ( point< double > const &  p) -> point<std::ptrdiff_t> +
    @@ -149,8 +152,8 @@ Functions
    - -

    ◆ ifloor() [2/2]

    + +

    ◆ ifloor() [2/2]

    @@ -159,11 +162,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::ifloor auto boost::gil::ifloor ( point< float > const &  p) -> point<std::ptrdiff_t> +
    @@ -175,8 +179,8 @@ Functions
    - -

    ◆ iround() [1/3]

    + +

    ◆ iround() [1/3]

    @@ -185,11 +189,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::iround auto boost::gil::iround ( point< double > const &  p) -> point<std::ptrdiff_t> +
    @@ -201,8 +206,8 @@ Functions
    - -

    ◆ iround() [2/3]

    + +

    ◆ iround() [2/3]

    @@ -211,11 +216,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::iround auto boost::gil::iround ( point< float > const &  p) -> point<std::ptrdiff_t> +
    @@ -227,8 +233,8 @@ Functions
    - -

    ◆ iround() [3/3]

    + +

    ◆ iround() [3/3]

    @@ -237,11 +243,12 @@ Functions - + - +
    point<std::ptrdiff_t> boost::gil::iround auto boost::gil::iround ( point< T > const &  p) -> point<std::ptrdiff_t> +
    @@ -254,7 +261,7 @@ Functions
    -
    point< std::ptrdiff_t > iround(point< T > const &p)
    Definition: point.hpp:249
    +
    auto iround(point< T > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:249
    diff --git a/html/reference/group___s_t_l_optimizations.html b/html/reference/group___s_t_l_optimizations.html index c6c05ec8c..6f8271137 100644 --- a/html/reference/group___s_t_l_optimizations.html +++ b/html/reference/group___s_t_l_optimizations.html @@ -56,21 +56,21 @@ template<typename T , typename CS > BOOST_FORCEINLINE auto copy (boost::gil::pixel< T, CS > *first, boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > *  Copy when both src and dst are interleaved and of the same type can be just memmove.
      - + template<typename T , typename CS > -BOOST_FORCEINLINE boost::gil::pixel< T, CS > * copy (const boost::gil::pixel< T, CS > *first, const boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) - Copy when both src and dst are interleaved and of the same type can be just memmove.
    -  - +BOOST_FORCEINLINE auto copy (const boost::gil::pixel< T, CS > *first, const boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > * + Copy when both src and dst are interleaved and of the same type can be just memmove.
    +  + template<typename CS , typename IC1 , typename IC2 > -BOOST_FORCEINLINE boost::gil::planar_pixel_iterator< IC2, CS > copy (boost::gil::planar_pixel_iterator< IC1, CS > first, boost::gil::planar_pixel_iterator< IC1, CS > last, boost::gil::planar_pixel_iterator< IC2, CS > dst) - Copy when both src and dst are planar pointers is copy for each channel.
    -  - +BOOST_FORCEINLINE auto copy (boost::gil::planar_pixel_iterator< IC1, CS > first, boost::gil::planar_pixel_iterator< IC1, CS > last, boost::gil::planar_pixel_iterator< IC2, CS > dst) -> boost::gil::planar_pixel_iterator< IC2, CS > + Copy when both src and dst are planar pointers is copy for each channel.
    +  + template<typename IL , typename OL > -BOOST_FORCEINLINE boost::gil::iterator_from_2d< OL > copy1 (boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, boost::gil::iterator_from_2d< OL > dst) - std::copy(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    -  +BOOST_FORCEINLINE auto copy1 (boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, boost::gil::iterator_from_2d< OL > dst) -> boost::gil::iterator_from_2d< OL > + std::copy(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    +  template<typename IL , typename V > void fill (boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)  std::fill(I,I,V) with I being a iterator_from_2d More...
    diff --git a/html/reference/harris_8hpp_source.html b/html/reference/harris_8hpp_source.html index bd3afecf2..eca5b0900 100644 --- a/html/reference/harris_8hpp_source.html +++ b/html/reference/harris_8hpp_source.html @@ -61,7 +61,7 @@ $(function() {
    12 #include <boost/gil/typedefs.hpp>
    13 #include <boost/gil/image_processing/kernel.hpp>
    14 
    -
    15 namespace boost { namespace gil {
    +
    15 namespace boost { namespace gil {
    21 
    22 
    33 template <typename T, typename Allocator>
    @@ -116,6 +116,7 @@ $(function() {
    82 #endif
    void compute_harris_responses(boost::gil::gray32f_view_t m11, boost::gil::gray32f_view_t m12_21, boost::gil::gray32f_view_t m22, boost::gil::detail::kernel_2d< T, Allocator > weights, float k, boost::gil::gray32f_view_t harris_response)
    function to record Harris responses
    Definition: harris.hpp:34
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    variable-size kernel
    Definition: kernel.hpp:272
    diff --git a/html/reference/hessian_8hpp_source.html b/html/reference/hessian_8hpp_source.html index 3aa8bdca4..7812f46ad 100644 --- a/html/reference/hessian_8hpp_source.html +++ b/html/reference/hessian_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 #include <boost/gil/image_processing/kernel.hpp>
    14 #include <stdexcept>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    26 template <typename GradientView, typename T, typename Allocator, typename OutputView>
    27 inline void compute_hessian_responses(
    @@ -120,6 +120,7 @@ $(function() {
    79 
    80 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/histogram_8hpp_source.html b/html/reference/histogram_8hpp_source.html index 95e9c52f6..b0c5b2b12 100644 --- a/html/reference/histogram_8hpp_source.html +++ b/html/reference/histogram_8hpp_source.html @@ -75,591 +75,593 @@ $(function() {
    26 #include <map>
    27 #include <unordered_map>
    28 
    -
    29 namespace boost { namespace gil {
    +
    29 namespace boost { namespace gil {
    30 
    39 
    40 namespace detail {
    41 
    44 
    47 template <std::size_t Index, typename... T>
    -
    48 inline typename std::enable_if<Index == sizeof...(T), void>::type
    -
    49  hash_tuple_impl(std::size_t&, std::tuple<T...> const&)
    +
    48 inline auto hash_tuple_impl(std::size_t&, std::tuple<T...> const&)
    +
    49  -> typename std::enable_if<Index == sizeof...(T), void>::type
    50 {
    -
    51 }
    -
    52 
    -
    55 template <std::size_t Index, typename... T>
    -
    56 inline typename std::enable_if<Index != sizeof...(T), void>::type
    -
    57  hash_tuple_impl(std::size_t& seed, std::tuple<T...> const& t)
    -
    58 {
    -
    59  boost::hash_combine(seed, std::get<Index>(t));
    -
    60  hash_tuple_impl<Index + 1>(seed, t);
    -
    61 }
    -
    62 
    -
    72 template <typename... T>
    -
    73 struct hash_tuple
    -
    74 {
    -
    75  std::size_t operator()(std::tuple<T...> const& t) const
    -
    76  {
    -
    77  std::size_t seed = 0;
    -
    78  hash_tuple_impl<0>(seed, t);
    -
    79  return seed;
    -
    80  }
    -
    81 };
    -
    82 
    -
    86 template <typename Pixel, std::size_t... I>
    -
    87 auto pixel_to_tuple(Pixel const& p, boost::mp11::index_sequence<I...>)
    -
    88  -> decltype(std::make_tuple(p[I]...))
    -
    89 {
    -
    90  return std::make_tuple(p[I]...);
    -
    91 }
    -
    92 
    -
    96 template <typename Tuple, std::size_t... I>
    -
    97 auto tuple_to_tuple(Tuple const& t, boost::mp11::index_sequence<I...>)
    -
    98  -> decltype(std::make_tuple(std::get<I>(t)...))
    -
    99 {
    -
    100  return std::make_tuple(std::get<I>(t)...);
    -
    101 }
    -
    102 
    -
    105 template <typename Tuple, std::size_t... I>
    -
    106 bool tuple_compare(Tuple const& t1, Tuple const& t2, boost::mp11::index_sequence<I...>)
    -
    107 {
    -
    108  std::array<bool, std::tuple_size<Tuple>::value> comp_list;
    -
    109  comp_list = {std::get<I>(t1) <= std::get<I>(t2)...};
    -
    110  bool comp = true;
    -
    111  for (std::size_t i = 0; i < comp_list.size(); i++)
    -
    112  {
    -
    113  comp = comp & comp_list[i];
    -
    114  }
    -
    115  return comp;
    -
    116 }
    -
    117 
    -
    123 template <typename Tuple>
    -
    124 bool tuple_compare(Tuple const& t1, Tuple const& t2)
    -
    125 {
    -
    126  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    -
    127  auto index_list = boost::mp11::make_index_sequence<tuple_size>{};
    -
    128  return tuple_compare(t1, t2, index_list);
    -
    129 }
    -
    130 
    -
    135 template <typename Tuple>
    - -
    137 {
    -
    138  static constexpr Tuple min()
    -
    139  {
    -
    140  return min_impl(boost::mp11::make_index_sequence<std::tuple_size<Tuple>::value>{});
    -
    141  }
    -
    142  static constexpr Tuple max()
    -
    143  {
    -
    144  return max_impl(boost::mp11::make_index_sequence<std::tuple_size<Tuple>::value>{});
    -
    145  }
    -
    146 
    -
    147 private:
    -
    148  template <std::size_t... I>
    -
    149  static constexpr Tuple min_impl(boost::mp11::index_sequence<I...>)
    -
    150  {
    -
    151  return std::make_tuple(
    -
    152  std::numeric_limits<typename std::tuple_element<I, Tuple>::type>::min()...);
    -
    153  }
    -
    154 
    -
    155  template <std::size_t... I>
    -
    156  static constexpr Tuple max_impl(boost::mp11::index_sequence<I...>)
    -
    157  {
    -
    158  return std::make_tuple(
    -
    159  std::numeric_limits<typename std::tuple_element<I, Tuple>::type>::max()...);
    -
    160  }
    -
    161 };
    -
    162 
    -
    170 template <std::size_t Dimension>
    -
    171 struct filler
    -
    172 {
    -
    173  template <typename Container, typename Tuple>
    -
    174  void operator()(Container&, Tuple&, Tuple&, std::size_t)
    -
    175  {
    -
    176  }
    -
    177 };
    -
    178 
    -
    181 template <>
    -
    182 struct filler<1>
    -
    183 {
    -
    184  template <typename Container, typename Tuple>
    -
    185  void operator()(Container& hist, Tuple& lower, Tuple& upper, std::size_t bin_width = 1)
    -
    186  {
    -
    187  for (auto i = std::get<0>(lower); static_cast<std::size_t>(std::get<0>(upper) - i) >= bin_width; i += bin_width)
    -
    188  {
    -
    189  hist(i / bin_width) = 0;
    -
    190  }
    -
    191  hist(std::get<0>(upper) / bin_width) = 0;
    -
    192  }
    -
    193 };
    -
    194 
    -
    195 } //namespace detail
    -
    196 
    -
    212 template <typename... T>
    -
    213 class histogram : public std::unordered_map<std::tuple<T...>, double, detail::hash_tuple<T...>>
    -
    214 {
    -
    215  using base_t = std::unordered_map<std::tuple<T...>, double, detail::hash_tuple<T...>>;
    -
    216  using bin_t = boost::mp11::mp_list<T...>;
    -
    217  using key_t = typename base_t::key_type;
    -
    218  using mapped_t = typename base_t::mapped_type;
    -
    219  using value_t = typename base_t::value_type;
    -
    220 
    -
    221 public:
    -
    222  histogram() = default;
    -
    223 
    -
    225  static constexpr std::size_t dimension()
    -
    226  {
    -
    227  return std::tuple_size<key_t>::value;
    -
    228  }
    -
    229 
    -
    231  mapped_t& operator()(T... indices)
    -
    232  {
    -
    233  auto key = std::make_tuple(indices...);
    -
    234  std::size_t const index_dimension = std::tuple_size<std::tuple<T...>>::value;
    -
    235  std::size_t const histogram_dimension = dimension();
    -
    236  static_assert(histogram_dimension == index_dimension, "Dimensions do not match.");
    -
    237 
    -
    238  return base_t::operator[](key);
    -
    239  }
    -
    240 
    -
    243  template <typename OtherType>
    -
    244  bool equals(OtherType const& otherhist) const
    -
    245  {
    -
    246  bool check = (dimension() == otherhist.dimension());
    -
    247 
    -
    248  using other_value_t = typename OtherType::value_type;
    -
    249  std::for_each(otherhist.begin(), otherhist.end(), [&](other_value_t const& v) {
    -
    250  key_t key = key_from_tuple(v.first);
    -
    251  if (base_t::find(key) != base_t::end())
    -
    252  {
    -
    253  check = check & (base_t::at(key) == otherhist.at(v.first));
    -
    254  }
    -
    255  else
    -
    256  {
    -
    257  check = false;
    -
    258  }
    -
    259  });
    -
    260  return check;
    -
    261  }
    -
    262 
    -
    265  static constexpr bool is_pixel_compatible()
    -
    266  {
    -
    267  using bin_types = boost::mp11::mp_list<T...>;
    -
    268  return boost::mp11::mp_all_of<bin_types, std::is_arithmetic>::value;
    -
    269  }
    -
    270 
    -
    273  template <typename Tuple>
    -
    274  bool is_tuple_compatible(Tuple const&)
    -
    275  {
    -
    276  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    -
    277  std::size_t const histogram_size = dimension();
    -
    278  // TODO : Explore consequence of using if-constexpr
    -
    279  using sequence_type = typename std::conditional
    -
    280  <
    -
    281  tuple_size >= histogram_size,
    -
    282  boost::mp11::make_index_sequence<histogram_size>,
    -
    283  boost::mp11::make_index_sequence<tuple_size>
    -
    284  >::type;
    -
    285 
    -
    286  if (is_tuple_size_compatible<Tuple>())
    -
    287  return is_tuple_type_compatible<Tuple>(sequence_type{});
    -
    288  else
    -
    289  return false;
    -
    290  }
    -
    291 
    -
    294  template <std::size_t... Dimensions, typename Tuple>
    -
    295  key_t key_from_tuple(Tuple const& t) const
    -
    296  {
    -
    297  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    -
    298  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    -
    299  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    -
    300  std::size_t const histogram_dimension = dimension();
    -
    301 
    -
    302  static_assert(
    -
    303  ((index_list_size != 0 && index_list_size == histogram_dimension) ||
    -
    304  (tuple_size == histogram_dimension)),
    -
    305  "Tuple and histogram key of different sizes");
    -
    306 
    -
    307  using new_index_list = typename std::conditional
    -
    308  <
    -
    309  index_list_size == 0,
    -
    310  boost::mp11::mp_list_c<std::size_t, 0>,
    -
    311  index_list
    -
    312  >::type;
    -
    313 
    -
    314  std::size_t const min =
    -
    315  boost::mp11::mp_min_element<new_index_list, boost::mp11::mp_less>::value;
    -
    316 
    -
    317  std::size_t const max =
    -
    318  boost::mp11::mp_max_element<new_index_list, boost::mp11::mp_less>::value;
    -
    319 
    -
    320  static_assert((0 <= min && max < tuple_size) || index_list_size == 0, "Index out of Range");
    -
    321 
    -
    322  using seq1 = boost::mp11::make_index_sequence<histogram_dimension>;
    -
    323  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    -
    324  // TODO : Explore consequence of using if-constexpr
    -
    325  using sequence_type = typename std::conditional<index_list_size == 0, seq1, seq2>::type;
    -
    326 
    -
    327  auto key = detail::tuple_to_tuple(t, sequence_type{});
    -
    328  static_assert(
    -
    329  is_tuple_type_compatible<Tuple>(seq1{}),
    -
    330  "Tuple type and histogram type not compatible.");
    -
    331 
    -
    332  return make_histogram_key(key, seq1{});
    -
    333  }
    -
    334 
    -
    337  template <std::size_t... Dimensions, typename Pixel>
    -
    338  key_t key_from_pixel(Pixel const& p) const
    -
    339  {
    -
    340  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    -
    341  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    -
    342  std::size_t const pixel_dimension = num_channels<Pixel>::value;
    -
    343  std::size_t const histogram_dimension = dimension();
    -
    344 
    -
    345  static_assert(
    -
    346  ((index_list_size != 0 && index_list_size == histogram_dimension) ||
    -
    347  (index_list_size == 0 && pixel_dimension == histogram_dimension)) &&
    -
    348  is_pixel_compatible(),
    -
    349  "Pixels and histogram key are not compatible.");
    -
    350 
    -
    351  using new_index_list = typename std::conditional
    -
    352  <
    -
    353  index_list_size == 0,
    -
    354  boost::mp11::mp_list_c<std::size_t, 0>,
    -
    355  index_list
    -
    356  >::type;
    -
    357 
    -
    358  std::size_t const min =
    -
    359  boost::mp11::mp_min_element<new_index_list, boost::mp11::mp_less>::value;
    -
    360 
    -
    361  std::size_t const max =
    -
    362  boost::mp11::mp_max_element<new_index_list, boost::mp11::mp_less>::value;
    -
    363 
    -
    364  static_assert(
    -
    365  (0 <= min && max < pixel_dimension) || index_list_size == 0, "Index out of Range");
    -
    366 
    -
    367  using seq1 = boost::mp11::make_index_sequence<histogram_dimension>;
    -
    368  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    -
    369  using sequence_type = typename std::conditional<index_list_size == 0, seq1, seq2>::type;
    -
    370 
    -
    371  auto key = detail::pixel_to_tuple(p, sequence_type{});
    -
    372  return make_histogram_key(key, seq1{});
    -
    373  }
    -
    374 
    -
    376  key_t nearest_key(key_t const& k) const
    -
    377  {
    -
    378  using check_list = boost::mp11::mp_list<boost::has_less<T>...>;
    -
    379  static_assert(
    -
    380  boost::mp11::mp_all_of<check_list, boost::mp11::mp_to_bool>::value,
    -
    381  "Keys are not comparable.");
    -
    382  auto nearest_k = k;
    -
    383  if (base_t::find(k) != base_t::end())
    -
    384  {
    -
    385  return nearest_k;
    -
    386  }
    -
    387  else
    -
    388  {
    -
    389  bool once = true;
    -
    390  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    391  if (v.first <= k)
    -
    392  {
    -
    393  if (once)
    -
    394  {
    -
    395  once = !once;
    -
    396  nearest_k = v.first;
    -
    397  }
    -
    398  else if (nearest_k < v.first)
    -
    399  nearest_k = v.first;
    -
    400  }
    -
    401  });
    -
    402  return nearest_k;
    -
    403  }
    -
    404  }
    -
    405 
    -
    407  template <std::size_t... Dimensions, typename SrcView>
    -
    408  void fill(
    -
    409  SrcView const& srcview,
    -
    410  std::size_t bin_width = 1,
    -
    411  bool applymask = false,
    -
    412  std::vector<std::vector<bool>> mask = {},
    -
    413  key_t lower = key_t(),
    -
    414  key_t upper = key_t(),
    -
    415  bool setlimits = false)
    -
    416  {
    -
    417  gil_function_requires<ImageViewConcept<SrcView>>();
    -
    418  using channel_t = typename channel_type<SrcView>::type;
    -
    419 
    -
    420  for (std::ptrdiff_t src_y = 0; src_y < srcview.height(); ++src_y)
    -
    421  {
    -
    422  auto src_it = srcview.row_begin(src_y);
    -
    423  for (std::ptrdiff_t src_x = 0; src_x < srcview.width(); ++src_x)
    -
    424  {
    -
    425  if (applymask && !mask[src_y][src_x])
    -
    426  continue;
    -
    427  auto scaled_px = src_it[src_x];
    -
    428  static_for_each(scaled_px, [&](channel_t& ch) {
    -
    429  ch = ch / bin_width;
    -
    430  });
    -
    431  auto key = key_from_pixel<Dimensions...>(scaled_px);
    -
    432  if (!setlimits ||
    -
    433  (detail::tuple_compare(lower, key) && detail::tuple_compare(key, upper)))
    -
    434  base_t::operator[](key)++;
    -
    435  }
    -
    436  }
    -
    437  }
    -
    438 
    -
    440  template <std::size_t... Dimensions, typename Tuple>
    -
    441  histogram sub_histogram(Tuple const& t1, Tuple const& t2)
    -
    442  {
    -
    443  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    -
    444  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    -
    445  std::size_t const histogram_dimension = dimension();
    -
    446 
    -
    447  std::size_t const min =
    -
    448  boost::mp11::mp_min_element<index_list, boost::mp11::mp_less>::value;
    -
    449 
    -
    450  std::size_t const max =
    -
    451  boost::mp11::mp_max_element<index_list, boost::mp11::mp_less>::value;
    -
    452 
    -
    453  static_assert(
    -
    454  (0 <= min && max < histogram_dimension) && index_list_size < histogram_dimension,
    -
    455  "Index out of Range");
    -
    456 
    -
    457  using seq1 = boost::mp11::make_index_sequence<dimension()>;
    -
    458  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    -
    459 
    -
    460  static_assert(
    -
    461  is_tuple_type_compatible<Tuple>(seq1{}),
    -
    462  "Tuple type and histogram type not compatible.");
    -
    463 
    -
    464  auto low = make_histogram_key(t1, seq1{});
    -
    465  auto low_key = detail::tuple_to_tuple(low, seq2{});
    -
    466  auto high = make_histogram_key(t2, seq1{});
    -
    467  auto high_key = detail::tuple_to_tuple(high, seq2{});
    -
    468 
    -
    469  histogram sub_h;
    -
    470  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& k) {
    -
    471  auto tmp_key = detail::tuple_to_tuple(k.first, seq2{});
    -
    472  if (low_key <= tmp_key && tmp_key <= high_key)
    -
    473  sub_h[k.first] += base_t::operator[](k.first);
    -
    474  });
    -
    475  return sub_h;
    -
    476  }
    -
    477 
    -
    479  template <std::size_t... Dimensions>
    - -
    481  {
    -
    482  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    -
    483  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    -
    484  std::size_t const histogram_dimension = dimension();
    -
    485 
    -
    486  std::size_t const min =
    -
    487  boost::mp11::mp_min_element<index_list, boost::mp11::mp_less>::value;
    -
    488 
    -
    489  std::size_t const max =
    -
    490  boost::mp11::mp_max_element<index_list, boost::mp11::mp_less>::value;
    -
    491 
    -
    492  static_assert(
    -
    493  (0 <= min && max < histogram_dimension) && index_list_size < histogram_dimension,
    -
    494  "Index out of Range");
    -
    495 
    - -
    497 
    -
    498  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    499  auto sub_key =
    -
    500  detail::tuple_to_tuple(v.first, boost::mp11::index_sequence<Dimensions...>{});
    -
    501  sub_h[sub_key] += base_t::operator[](v.first);
    -
    502  });
    -
    503  return sub_h;
    -
    504  }
    -
    505 
    -
    507  void normalize()
    -
    508  {
    -
    509  double sum = 0.0;
    -
    510  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    511  sum += v.second;
    -
    512  });
    -
    513  // std::cout<<(long int)sum<<"asfe";
    -
    514  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    515  base_t::operator[](v.first) = v.second / sum;
    -
    516  });
    -
    517  }
    -
    518 
    -
    520  double sum() const
    -
    521  {
    -
    522  double sum = 0.0;
    -
    523  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    524  sum += v.second;
    -
    525  });
    -
    526  return sum;
    -
    527  }
    -
    528 
    -
    530  key_t min_key() const
    -
    531  {
    -
    532  key_t min_key = base_t::begin()->first;
    -
    533  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    534  if (v.first < min_key)
    -
    535  min_key = v.first;
    -
    536  });
    -
    537  return min_key;
    -
    538  }
    -
    539 
    -
    541  key_t max_key() const
    -
    542  {
    -
    543  key_t max_key = base_t::begin()->first;
    -
    544  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    545  if (v.first > max_key)
    -
    546  max_key = v.first;
    -
    547  });
    -
    548  return max_key;
    -
    549  }
    -
    550 
    -
    552  std::vector<key_t> sorted_keys() const
    -
    553  {
    -
    554  std::vector<key_t> sorted_keys;
    -
    555  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    -
    556  sorted_keys.push_back(v.first);
    -
    557  });
    -
    558  std::sort(sorted_keys.begin(), sorted_keys.end());
    -
    559  return sorted_keys;
    -
    560  }
    -
    561 
    -
    562 private:
    -
    563  template <typename Tuple, std::size_t... I>
    -
    564  key_t make_histogram_key(Tuple const& t, boost::mp11::index_sequence<I...>) const
    -
    565  {
    -
    566  return std::make_tuple(
    -
    567  static_cast<typename boost::mp11::mp_at<bin_t, boost::mp11::mp_size_t<I>>>(
    -
    568  std::get<I>(t))...);
    -
    569  }
    -
    570 
    -
    571  template <typename Tuple, std::size_t... I>
    -
    572  static constexpr bool is_tuple_type_compatible(boost::mp11::index_sequence<I...>)
    -
    573  {
    -
    574  using tp = boost::mp11::mp_list
    -
    575  <
    -
    576  typename std::is_convertible
    -
    577  <
    -
    578  boost::mp11::mp_at<bin_t, boost::mp11::mp_size_t<I>>,
    -
    579  typename std::tuple_element<I, Tuple>::type
    -
    580  >::type...
    -
    581  >;
    -
    582  return boost::mp11::mp_all_of<tp, boost::mp11::mp_to_bool>::value;
    -
    583  }
    -
    584 
    -
    585  template <typename Tuple>
    -
    586  static constexpr bool is_tuple_size_compatible()
    -
    587  {
    -
    588  return (std::tuple_size<Tuple>::value == dimension());
    -
    589  }
    -
    590 };
    -
    591 
    -
    606 template <typename SrcView, typename Container>
    -
    607 void fill_histogram(SrcView const&, Container&);
    -
    608 
    -
    630 template <std::size_t... Dimensions, typename SrcView, typename... T>
    -
    631 void fill_histogram(
    -
    632  SrcView const& srcview,
    -
    633  histogram<T...>& hist,
    -
    634  std::size_t bin_width = 1,
    -
    635  bool accumulate = false,
    -
    636  bool sparsefill = true,
    -
    637  bool applymask = false,
    -
    638  std::vector<std::vector<bool>> mask = {},
    -
    639  typename histogram<T...>::key_type lower =
    -
    640  detail::tuple_limit<typename histogram<T...>::key_type>::min(),
    -
    641  typename histogram<T...>::key_type upper =
    -
    642  detail::tuple_limit<typename histogram<T...>::key_type>::max(),
    -
    643  bool setlimits = false)
    -
    644 {
    -
    645  if (!accumulate)
    -
    646  hist.clear();
    -
    647 
    -
    648  detail::filler<histogram<T...>::dimension()> f;
    -
    649  if (!sparsefill)
    -
    650  f(hist, lower, upper, bin_width);
    -
    651 
    -
    652  hist.template fill<Dimensions...>(srcview, bin_width, applymask, mask, lower, upper, setlimits);
    -
    653 }
    -
    654 
    -
    667 template <typename Container>
    -
    668 Container cumulative_histogram(Container const&);
    -
    669 
    -
    670 template <typename... T>
    -
    671 histogram<T...> cumulative_histogram(histogram<T...> const& hist)
    -
    672 {
    -
    673  using check_list = boost::mp11::mp_list<boost::has_less<T>...>;
    -
    674  static_assert(
    -
    675  boost::mp11::mp_all_of<check_list, boost::mp11::mp_to_bool>::value,
    -
    676  "Cumulative histogram not possible of this type");
    -
    677 
    -
    678  using histogram_t = histogram<T...>;
    -
    679  using pair_t = std::pair<typename histogram_t::key_type, typename histogram_t::mapped_type>;
    -
    680  using value_t = typename histogram_t::value_type;
    -
    681 
    -
    682  histogram_t cumulative_hist;
    -
    683  std::size_t const dims = histogram_t::dimension();
    -
    684  if (dims == 1)
    -
    685  {
    -
    686  std::vector<pair_t> sorted_keys(hist.size());
    -
    687  std::size_t counter = 0;
    -
    688  std::for_each(hist.begin(), hist.end(), [&](value_t const& v) {
    -
    689  sorted_keys[counter++] = std::make_pair(v.first, v.second);
    -
    690  });
    -
    691  std::sort(sorted_keys.begin(), sorted_keys.end());
    -
    692  auto cumulative_counter = static_cast<typename histogram_t::mapped_type>(0);
    -
    693  for (std::size_t i = 0; i < sorted_keys.size(); ++i)
    -
    694  {
    -
    695  cumulative_counter += sorted_keys[i].second;
    -
    696  cumulative_hist[(sorted_keys[i].first)] = cumulative_counter;
    -
    697  }
    -
    698  }
    -
    699  else
    -
    700  {
    -
    701  std::for_each(hist.begin(), hist.end(), [&](value_t const& v1) {
    -
    702  auto cumulative_counter = static_cast<typename histogram_t::mapped_type>(0);
    -
    703  std::for_each(hist.begin(), hist.end(), [&](value_t const& v2) {
    -
    704  bool comp = detail::tuple_compare(
    -
    705  v2.first, v1.first,
    -
    706  boost::mp11::make_index_sequence<histogram_t::dimension()>{});
    -
    707  if (comp)
    -
    708  cumulative_counter += hist.at(v2.first);
    -
    709  });
    -
    710  cumulative_hist[v1.first] = cumulative_counter;
    -
    711  });
    -
    712  }
    -
    713  return cumulative_hist;
    -
    714 }
    -
    715 
    -
    716 }} //namespace boost::gil
    -
    717 
    -
    718 #endif
    +
    51  // terminating case
    +
    52 }
    +
    53 
    +
    56 template <std::size_t Index, typename... T>
    +
    57 inline auto hash_tuple_impl(std::size_t& seed, std::tuple<T...> const& t)
    +
    58  -> typename std::enable_if<Index != sizeof...(T), void>::type
    +
    59 {
    +
    60  boost::hash_combine(seed, std::get<Index>(t));
    +
    61  hash_tuple_impl<Index + 1>(seed, t);
    +
    62 }
    +
    63 
    +
    73 template <typename... T>
    +
    74 struct hash_tuple
    +
    75 {
    +
    76  auto operator()(std::tuple<T...> const& t) const -> std::size_t
    +
    77  {
    +
    78  std::size_t seed = 0;
    +
    79  hash_tuple_impl<0>(seed, t);
    +
    80  return seed;
    +
    81  }
    +
    82 };
    +
    83 
    +
    87 template <typename Pixel, std::size_t... I>
    +
    88 auto pixel_to_tuple(Pixel const& p, boost::mp11::index_sequence<I...>)
    +
    89  -> decltype(std::make_tuple(p[I]...))
    +
    90 {
    +
    91  return std::make_tuple(p[I]...);
    +
    92 }
    +
    93 
    +
    97 template <typename Tuple, std::size_t... I>
    +
    98 auto tuple_to_tuple(Tuple const& t, boost::mp11::index_sequence<I...>)
    +
    99  -> decltype(std::make_tuple(std::get<I>(t)...))
    +
    100 {
    +
    101  return std::make_tuple(std::get<I>(t)...);
    +
    102 }
    +
    103 
    +
    106 template <typename Tuple, std::size_t... I>
    +
    107 bool tuple_compare(Tuple const& t1, Tuple const& t2, boost::mp11::index_sequence<I...>)
    +
    108 {
    +
    109  std::array<bool, std::tuple_size<Tuple>::value> comp_list;
    +
    110  comp_list = {std::get<I>(t1) <= std::get<I>(t2)...};
    +
    111  bool comp = true;
    +
    112  for (std::size_t i = 0; i < comp_list.size(); i++)
    +
    113  {
    +
    114  comp = comp & comp_list[i];
    +
    115  }
    +
    116  return comp;
    +
    117 }
    +
    118 
    +
    124 template <typename Tuple>
    +
    125 bool tuple_compare(Tuple const& t1, Tuple const& t2)
    +
    126 {
    +
    127  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    +
    128  auto index_list = boost::mp11::make_index_sequence<tuple_size>{};
    +
    129  return tuple_compare(t1, t2, index_list);
    +
    130 }
    +
    131 
    +
    136 template <typename Tuple>
    + +
    138 {
    +
    139  static constexpr Tuple min()
    +
    140  {
    +
    141  return min_impl(boost::mp11::make_index_sequence<std::tuple_size<Tuple>::value>{});
    +
    142  }
    +
    143  static constexpr Tuple max()
    +
    144  {
    +
    145  return max_impl(boost::mp11::make_index_sequence<std::tuple_size<Tuple>::value>{});
    +
    146  }
    +
    147 
    +
    148 private:
    +
    149  template <std::size_t... I>
    +
    150  static constexpr Tuple min_impl(boost::mp11::index_sequence<I...>)
    +
    151  {
    +
    152  return std::make_tuple(
    +
    153  std::numeric_limits<typename std::tuple_element<I, Tuple>::type>::min()...);
    +
    154  }
    +
    155 
    +
    156  template <std::size_t... I>
    +
    157  static constexpr Tuple max_impl(boost::mp11::index_sequence<I...>)
    +
    158  {
    +
    159  return std::make_tuple(
    +
    160  std::numeric_limits<typename std::tuple_element<I, Tuple>::type>::max()...);
    +
    161  }
    +
    162 };
    +
    163 
    +
    171 template <std::size_t Dimension>
    +
    172 struct filler
    +
    173 {
    +
    174  template <typename Container, typename Tuple>
    +
    175  void operator()(Container&, Tuple&, Tuple&, std::size_t)
    +
    176  {
    +
    177  }
    +
    178 };
    +
    179 
    +
    182 template <>
    +
    183 struct filler<1>
    +
    184 {
    +
    185  template <typename Container, typename Tuple>
    +
    186  void operator()(Container& hist, Tuple& lower, Tuple& upper, std::size_t bin_width = 1)
    +
    187  {
    +
    188  for (auto i = std::get<0>(lower); static_cast<std::size_t>(std::get<0>(upper) - i) >= bin_width; i += bin_width)
    +
    189  {
    +
    190  hist(i / bin_width) = 0;
    +
    191  }
    +
    192  hist(std::get<0>(upper) / bin_width) = 0;
    +
    193  }
    +
    194 };
    +
    195 
    +
    196 } //namespace detail
    +
    197 
    +
    213 template <typename... T>
    +
    214 class histogram : public std::unordered_map<std::tuple<T...>, double, detail::hash_tuple<T...>>
    +
    215 {
    +
    216  using base_t = std::unordered_map<std::tuple<T...>, double, detail::hash_tuple<T...>>;
    +
    217  using bin_t = boost::mp11::mp_list<T...>;
    +
    218  using key_t = typename base_t::key_type;
    +
    219  using mapped_t = typename base_t::mapped_type;
    +
    220  using value_t = typename base_t::value_type;
    +
    221 
    +
    222 public:
    +
    223  histogram() = default;
    +
    224 
    +
    226  static constexpr std::size_t dimension()
    +
    227  {
    +
    228  return std::tuple_size<key_t>::value;
    +
    229  }
    +
    230 
    +
    232  mapped_t& operator()(T... indices)
    +
    233  {
    +
    234  auto key = std::make_tuple(indices...);
    +
    235  std::size_t const index_dimension = std::tuple_size<std::tuple<T...>>::value;
    +
    236  std::size_t const histogram_dimension = dimension();
    +
    237  static_assert(histogram_dimension == index_dimension, "Dimensions do not match.");
    +
    238 
    +
    239  return base_t::operator[](key);
    +
    240  }
    +
    241 
    +
    244  template <typename OtherType>
    +
    245  bool equals(OtherType const& otherhist) const
    +
    246  {
    +
    247  bool check = (dimension() == otherhist.dimension());
    +
    248 
    +
    249  using other_value_t = typename OtherType::value_type;
    +
    250  std::for_each(otherhist.begin(), otherhist.end(), [&](other_value_t const& v) {
    +
    251  key_t key = key_from_tuple(v.first);
    +
    252  if (base_t::find(key) != base_t::end())
    +
    253  {
    +
    254  check = check & (base_t::at(key) == otherhist.at(v.first));
    +
    255  }
    +
    256  else
    +
    257  {
    +
    258  check = false;
    +
    259  }
    +
    260  });
    +
    261  return check;
    +
    262  }
    +
    263 
    +
    266  static constexpr bool is_pixel_compatible()
    +
    267  {
    +
    268  using bin_types = boost::mp11::mp_list<T...>;
    +
    269  return boost::mp11::mp_all_of<bin_types, std::is_arithmetic>::value;
    +
    270  }
    +
    271 
    +
    274  template <typename Tuple>
    +
    275  bool is_tuple_compatible(Tuple const&)
    +
    276  {
    +
    277  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    +
    278  std::size_t const histogram_size = dimension();
    +
    279  // TODO : Explore consequence of using if-constexpr
    +
    280  using sequence_type = typename std::conditional
    +
    281  <
    +
    282  tuple_size >= histogram_size,
    +
    283  boost::mp11::make_index_sequence<histogram_size>,
    +
    284  boost::mp11::make_index_sequence<tuple_size>
    +
    285  >::type;
    +
    286 
    +
    287  if (is_tuple_size_compatible<Tuple>())
    +
    288  return is_tuple_type_compatible<Tuple>(sequence_type{});
    +
    289  else
    +
    290  return false;
    +
    291  }
    +
    292 
    +
    295  template <std::size_t... Dimensions, typename Tuple>
    +
    296  key_t key_from_tuple(Tuple const& t) const
    +
    297  {
    +
    298  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    +
    299  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    +
    300  std::size_t const tuple_size = std::tuple_size<Tuple>::value;
    +
    301  std::size_t const histogram_dimension = dimension();
    +
    302 
    +
    303  static_assert(
    +
    304  ((index_list_size != 0 && index_list_size == histogram_dimension) ||
    +
    305  (tuple_size == histogram_dimension)),
    +
    306  "Tuple and histogram key of different sizes");
    +
    307 
    +
    308  using new_index_list = typename std::conditional
    +
    309  <
    +
    310  index_list_size == 0,
    +
    311  boost::mp11::mp_list_c<std::size_t, 0>,
    +
    312  index_list
    +
    313  >::type;
    +
    314 
    +
    315  std::size_t const min =
    +
    316  boost::mp11::mp_min_element<new_index_list, boost::mp11::mp_less>::value;
    +
    317 
    +
    318  std::size_t const max =
    +
    319  boost::mp11::mp_max_element<new_index_list, boost::mp11::mp_less>::value;
    +
    320 
    +
    321  static_assert((0 <= min && max < tuple_size) || index_list_size == 0, "Index out of Range");
    +
    322 
    +
    323  using seq1 = boost::mp11::make_index_sequence<histogram_dimension>;
    +
    324  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    +
    325  // TODO : Explore consequence of using if-constexpr
    +
    326  using sequence_type = typename std::conditional<index_list_size == 0, seq1, seq2>::type;
    +
    327 
    +
    328  auto key = detail::tuple_to_tuple(t, sequence_type{});
    +
    329  static_assert(
    +
    330  is_tuple_type_compatible<Tuple>(seq1{}),
    +
    331  "Tuple type and histogram type not compatible.");
    +
    332 
    +
    333  return make_histogram_key(key, seq1{});
    +
    334  }
    +
    335 
    +
    338  template <std::size_t... Dimensions, typename Pixel>
    +
    339  key_t key_from_pixel(Pixel const& p) const
    +
    340  {
    +
    341  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    +
    342  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    +
    343  std::size_t const pixel_dimension = num_channels<Pixel>::value;
    +
    344  std::size_t const histogram_dimension = dimension();
    +
    345 
    +
    346  static_assert(
    +
    347  ((index_list_size != 0 && index_list_size == histogram_dimension) ||
    +
    348  (index_list_size == 0 && pixel_dimension == histogram_dimension)) &&
    +
    349  is_pixel_compatible(),
    +
    350  "Pixels and histogram key are not compatible.");
    +
    351 
    +
    352  using new_index_list = typename std::conditional
    +
    353  <
    +
    354  index_list_size == 0,
    +
    355  boost::mp11::mp_list_c<std::size_t, 0>,
    +
    356  index_list
    +
    357  >::type;
    +
    358 
    +
    359  std::size_t const min =
    +
    360  boost::mp11::mp_min_element<new_index_list, boost::mp11::mp_less>::value;
    +
    361 
    +
    362  std::size_t const max =
    +
    363  boost::mp11::mp_max_element<new_index_list, boost::mp11::mp_less>::value;
    +
    364 
    +
    365  static_assert(
    +
    366  (0 <= min && max < pixel_dimension) || index_list_size == 0, "Index out of Range");
    +
    367 
    +
    368  using seq1 = boost::mp11::make_index_sequence<histogram_dimension>;
    +
    369  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    +
    370  using sequence_type = typename std::conditional<index_list_size == 0, seq1, seq2>::type;
    +
    371 
    +
    372  auto key = detail::pixel_to_tuple(p, sequence_type{});
    +
    373  return make_histogram_key(key, seq1{});
    +
    374  }
    +
    375 
    +
    377  key_t nearest_key(key_t const& k) const
    +
    378  {
    +
    379  using check_list = boost::mp11::mp_list<boost::has_less<T>...>;
    +
    380  static_assert(
    +
    381  boost::mp11::mp_all_of<check_list, boost::mp11::mp_to_bool>::value,
    +
    382  "Keys are not comparable.");
    +
    383  auto nearest_k = k;
    +
    384  if (base_t::find(k) != base_t::end())
    +
    385  {
    +
    386  return nearest_k;
    +
    387  }
    +
    388  else
    +
    389  {
    +
    390  bool once = true;
    +
    391  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    392  if (v.first <= k)
    +
    393  {
    +
    394  if (once)
    +
    395  {
    +
    396  once = !once;
    +
    397  nearest_k = v.first;
    +
    398  }
    +
    399  else if (nearest_k < v.first)
    +
    400  nearest_k = v.first;
    +
    401  }
    +
    402  });
    +
    403  return nearest_k;
    +
    404  }
    +
    405  }
    +
    406 
    +
    408  template <std::size_t... Dimensions, typename SrcView>
    +
    409  void fill(
    +
    410  SrcView const& srcview,
    +
    411  std::size_t bin_width = 1,
    +
    412  bool applymask = false,
    +
    413  std::vector<std::vector<bool>> mask = {},
    +
    414  key_t lower = key_t(),
    +
    415  key_t upper = key_t(),
    +
    416  bool setlimits = false)
    +
    417  {
    +
    418  gil_function_requires<ImageViewConcept<SrcView>>();
    +
    419  using channel_t = typename channel_type<SrcView>::type;
    +
    420 
    +
    421  for (std::ptrdiff_t src_y = 0; src_y < srcview.height(); ++src_y)
    +
    422  {
    +
    423  auto src_it = srcview.row_begin(src_y);
    +
    424  for (std::ptrdiff_t src_x = 0; src_x < srcview.width(); ++src_x)
    +
    425  {
    +
    426  if (applymask && !mask[src_y][src_x])
    +
    427  continue;
    +
    428  auto scaled_px = src_it[src_x];
    +
    429  static_for_each(scaled_px, [&](channel_t& ch) {
    +
    430  ch = ch / bin_width;
    +
    431  });
    +
    432  auto key = key_from_pixel<Dimensions...>(scaled_px);
    +
    433  if (!setlimits ||
    +
    434  (detail::tuple_compare(lower, key) && detail::tuple_compare(key, upper)))
    +
    435  base_t::operator[](key)++;
    +
    436  }
    +
    437  }
    +
    438  }
    +
    439 
    +
    441  template <std::size_t... Dimensions, typename Tuple>
    +
    442  histogram sub_histogram(Tuple const& t1, Tuple const& t2)
    +
    443  {
    +
    444  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    +
    445  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    +
    446  std::size_t const histogram_dimension = dimension();
    +
    447 
    +
    448  std::size_t const min =
    +
    449  boost::mp11::mp_min_element<index_list, boost::mp11::mp_less>::value;
    +
    450 
    +
    451  std::size_t const max =
    +
    452  boost::mp11::mp_max_element<index_list, boost::mp11::mp_less>::value;
    +
    453 
    +
    454  static_assert(
    +
    455  (0 <= min && max < histogram_dimension) && index_list_size < histogram_dimension,
    +
    456  "Index out of Range");
    +
    457 
    +
    458  using seq1 = boost::mp11::make_index_sequence<dimension()>;
    +
    459  using seq2 = boost::mp11::index_sequence<Dimensions...>;
    +
    460 
    +
    461  static_assert(
    +
    462  is_tuple_type_compatible<Tuple>(seq1{}),
    +
    463  "Tuple type and histogram type not compatible.");
    +
    464 
    +
    465  auto low = make_histogram_key(t1, seq1{});
    +
    466  auto low_key = detail::tuple_to_tuple(low, seq2{});
    +
    467  auto high = make_histogram_key(t2, seq1{});
    +
    468  auto high_key = detail::tuple_to_tuple(high, seq2{});
    +
    469 
    +
    470  histogram sub_h;
    +
    471  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& k) {
    +
    472  auto tmp_key = detail::tuple_to_tuple(k.first, seq2{});
    +
    473  if (low_key <= tmp_key && tmp_key <= high_key)
    +
    474  sub_h[k.first] += base_t::operator[](k.first);
    +
    475  });
    +
    476  return sub_h;
    +
    477  }
    +
    478 
    +
    480  template <std::size_t... Dimensions>
    + +
    482  {
    +
    483  using index_list = boost::mp11::mp_list_c<std::size_t, Dimensions...>;
    +
    484  std::size_t const index_list_size = boost::mp11::mp_size<index_list>::value;
    +
    485  std::size_t const histogram_dimension = dimension();
    +
    486 
    +
    487  std::size_t const min =
    +
    488  boost::mp11::mp_min_element<index_list, boost::mp11::mp_less>::value;
    +
    489 
    +
    490  std::size_t const max =
    +
    491  boost::mp11::mp_max_element<index_list, boost::mp11::mp_less>::value;
    +
    492 
    +
    493  static_assert(
    +
    494  (0 <= min && max < histogram_dimension) && index_list_size < histogram_dimension,
    +
    495  "Index out of Range");
    +
    496 
    + +
    498 
    +
    499  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    500  auto sub_key =
    +
    501  detail::tuple_to_tuple(v.first, boost::mp11::index_sequence<Dimensions...>{});
    +
    502  sub_h[sub_key] += base_t::operator[](v.first);
    +
    503  });
    +
    504  return sub_h;
    +
    505  }
    +
    506 
    +
    508  void normalize()
    +
    509  {
    +
    510  double sum = 0.0;
    +
    511  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    512  sum += v.second;
    +
    513  });
    +
    514  // std::cout<<(long int)sum<<"asfe";
    +
    515  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    516  base_t::operator[](v.first) = v.second / sum;
    +
    517  });
    +
    518  }
    +
    519 
    +
    521  double sum() const
    +
    522  {
    +
    523  double sum = 0.0;
    +
    524  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    525  sum += v.second;
    +
    526  });
    +
    527  return sum;
    +
    528  }
    +
    529 
    +
    531  key_t min_key() const
    +
    532  {
    +
    533  key_t min_key = base_t::begin()->first;
    +
    534  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    535  if (v.first < min_key)
    +
    536  min_key = v.first;
    +
    537  });
    +
    538  return min_key;
    +
    539  }
    +
    540 
    +
    542  key_t max_key() const
    +
    543  {
    +
    544  key_t max_key = base_t::begin()->first;
    +
    545  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    546  if (v.first > max_key)
    +
    547  max_key = v.first;
    +
    548  });
    +
    549  return max_key;
    +
    550  }
    +
    551 
    +
    553  std::vector<key_t> sorted_keys() const
    +
    554  {
    +
    555  std::vector<key_t> sorted_keys;
    +
    556  std::for_each(base_t::begin(), base_t::end(), [&](value_t const& v) {
    +
    557  sorted_keys.push_back(v.first);
    +
    558  });
    +
    559  std::sort(sorted_keys.begin(), sorted_keys.end());
    +
    560  return sorted_keys;
    +
    561  }
    +
    562 
    +
    563 private:
    +
    564  template <typename Tuple, std::size_t... I>
    +
    565  key_t make_histogram_key(Tuple const& t, boost::mp11::index_sequence<I...>) const
    +
    566  {
    +
    567  return std::make_tuple(
    +
    568  static_cast<typename boost::mp11::mp_at<bin_t, boost::mp11::mp_size_t<I>>>(
    +
    569  std::get<I>(t))...);
    +
    570  }
    +
    571 
    +
    572  template <typename Tuple, std::size_t... I>
    +
    573  static constexpr bool is_tuple_type_compatible(boost::mp11::index_sequence<I...>)
    +
    574  {
    +
    575  using tp = boost::mp11::mp_list
    +
    576  <
    +
    577  typename std::is_convertible
    +
    578  <
    +
    579  boost::mp11::mp_at<bin_t, boost::mp11::mp_size_t<I>>,
    +
    580  typename std::tuple_element<I, Tuple>::type
    +
    581  >::type...
    +
    582  >;
    +
    583  return boost::mp11::mp_all_of<tp, boost::mp11::mp_to_bool>::value;
    +
    584  }
    +
    585 
    +
    586  template <typename Tuple>
    +
    587  static constexpr bool is_tuple_size_compatible()
    +
    588  {
    +
    589  return (std::tuple_size<Tuple>::value == dimension());
    +
    590  }
    +
    591 };
    +
    592 
    +
    607 template <typename SrcView, typename Container>
    +
    608 void fill_histogram(SrcView const&, Container&);
    +
    609 
    +
    631 template <std::size_t... Dimensions, typename SrcView, typename... T>
    +
    632 void fill_histogram(
    +
    633  SrcView const& srcview,
    +
    634  histogram<T...>& hist,
    +
    635  std::size_t bin_width = 1,
    +
    636  bool accumulate = false,
    +
    637  bool sparsefill = true,
    +
    638  bool applymask = false,
    +
    639  std::vector<std::vector<bool>> mask = {},
    +
    640  typename histogram<T...>::key_type lower =
    +
    641  detail::tuple_limit<typename histogram<T...>::key_type>::min(),
    +
    642  typename histogram<T...>::key_type upper =
    +
    643  detail::tuple_limit<typename histogram<T...>::key_type>::max(),
    +
    644  bool setlimits = false)
    +
    645 {
    +
    646  if (!accumulate)
    +
    647  hist.clear();
    +
    648 
    +
    649  detail::filler<histogram<T...>::dimension()> f;
    +
    650  if (!sparsefill)
    +
    651  f(hist, lower, upper, bin_width);
    +
    652 
    +
    653  hist.template fill<Dimensions...>(srcview, bin_width, applymask, mask, lower, upper, setlimits);
    +
    654 }
    +
    655 
    +
    668 template <typename Container>
    +
    669 auto cumulative_histogram(Container const&) -> Container;
    +
    670 
    +
    671 template <typename... T>
    +
    672 auto cumulative_histogram(histogram<T...> const& hist) -> histogram<T...>
    +
    673 {
    +
    674  using check_list = boost::mp11::mp_list<boost::has_less<T>...>;
    +
    675  static_assert(
    +
    676  boost::mp11::mp_all_of<check_list, boost::mp11::mp_to_bool>::value,
    +
    677  "Cumulative histogram not possible of this type");
    +
    678 
    +
    679  using histogram_t = histogram<T...>;
    +
    680  using pair_t = std::pair<typename histogram_t::key_type, typename histogram_t::mapped_type>;
    +
    681  using value_t = typename histogram_t::value_type;
    +
    682 
    +
    683  histogram_t cumulative_hist;
    +
    684  std::size_t const dims = histogram_t::dimension();
    +
    685  if (dims == 1)
    +
    686  {
    +
    687  std::vector<pair_t> sorted_keys(hist.size());
    +
    688  std::size_t counter = 0;
    +
    689  std::for_each(hist.begin(), hist.end(), [&](value_t const& v) {
    +
    690  sorted_keys[counter++] = std::make_pair(v.first, v.second);
    +
    691  });
    +
    692  std::sort(sorted_keys.begin(), sorted_keys.end());
    +
    693  auto cumulative_counter = static_cast<typename histogram_t::mapped_type>(0);
    +
    694  for (std::size_t i = 0; i < sorted_keys.size(); ++i)
    +
    695  {
    +
    696  cumulative_counter += sorted_keys[i].second;
    +
    697  cumulative_hist[(sorted_keys[i].first)] = cumulative_counter;
    +
    698  }
    +
    699  }
    +
    700  else
    +
    701  {
    +
    702  std::for_each(hist.begin(), hist.end(), [&](value_t const& v1) {
    +
    703  auto cumulative_counter = static_cast<typename histogram_t::mapped_type>(0);
    +
    704  std::for_each(hist.begin(), hist.end(), [&](value_t const& v2) {
    +
    705  bool comp = detail::tuple_compare(
    +
    706  v2.first, v1.first,
    +
    707  boost::mp11::make_index_sequence<histogram_t::dimension()>{});
    +
    708  if (comp)
    +
    709  cumulative_counter += hist.at(v2.first);
    +
    710  });
    +
    711  cumulative_hist[v1.first] = cumulative_counter;
    +
    712  });
    +
    713  }
    +
    714  return cumulative_hist;
    +
    715 }
    +
    716 
    +
    717 }} //namespace boost::gil
    +
    718 
    +
    719 #endif
    -
    bool equals(OtherType const &otherhist) const
    Checks if 2 histograms are equal. Ignores type, and checks if the keys (after type casting) match.
    Definition: histogram.hpp:244
    -
    key_t key_from_pixel(Pixel const &p) const
    Returns a histogram compatible key from the input pixel which can be directly used.
    Definition: histogram.hpp:338
    -
    key_t min_key() const
    Return the minimum key in histogram.
    Definition: histogram.hpp:530
    -
    Filler is used to fill the histogram class with all values between a specified range This functor is ...
    Definition: histogram.hpp:171
    -
    key_t max_key() const
    Return the maximum key in histogram.
    Definition: histogram.hpp:541
    -
    Provides equivalent of std::numeric_limits for type std::tuple tuple_limit gets called with only tupl...
    Definition: histogram.hpp:136
    -
    bool is_tuple_compatible(Tuple const &)
    Checks if the histogram class is compatible to be used with the specified tuple type.
    Definition: histogram.hpp:274
    -
    bool tuple_compare(Tuple const &t1, Tuple const &t2)
    Compares 2 tuples and outputs t1 <= t2 Comparison is not in a lexicographic manner but on every eleme...
    Definition: histogram.hpp:124
    -
    auto pixel_to_tuple(Pixel const &p, boost::mp11::index_sequence< I... >) -> decltype(std::make_tuple(p[I]...))
    Definition: histogram.hpp:87
    -
    void normalize()
    Normalize this histogram class.
    Definition: histogram.hpp:507
    -
    Functor provided for the hashing of tuples. The following approach makes use hash_combine from boost:...
    Definition: histogram.hpp:73
    -
    histogram< boost::mp11::mp_at< bin_t, boost::mp11::mp_size_t< Dimensions > >... > sub_histogram()
    Returns a sub-histogram over specified axes.
    Definition: histogram.hpp:480
    -
    static constexpr std::size_t dimension()
    Returns the number of dimensions(axes) the class supports.
    Definition: histogram.hpp:225
    -
    double sum() const
    Return the sum count of all bins.
    Definition: histogram.hpp:520
    -
    key_t key_from_tuple(Tuple const &t) const
    Returns a key compatible to be used as the histogram key from the input tuple.
    Definition: histogram.hpp:295
    -
    void fill(SrcView const &srcview, std::size_t bin_width=1, bool applymask=false, std::vector< std::vector< bool >> mask={}, key_t lower=key_t(), key_t upper=key_t(), bool setlimits=false)
    Fills the histogram with the input image view.
    Definition: histogram.hpp:408
    -
    key_t nearest_key(key_t const &k) const
    Return nearest smaller key to specified histogram key.
    Definition: histogram.hpp:376
    -
    void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
    std::fill(I,I,V) with I being a iterator_from_2d
    Definition: algorithm.hpp:365
    -
    mapped_t & operator()(T... indices)
    Returns bin value corresponding to specified tuple.
    Definition: histogram.hpp:231
    -
    static constexpr bool is_pixel_compatible()
    Checks if the histogram class is compatible to be used with a GIL image type.
    Definition: histogram.hpp:265
    -
    std::vector< key_t > sorted_keys() const
    Return sorted keys in a vector.
    Definition: histogram.hpp:552
    -
    histogram sub_histogram(Tuple const &t1, Tuple const &t2)
    Can return a subset or a mask over the current histogram.
    Definition: histogram.hpp:441
    +
    bool equals(OtherType const &otherhist) const
    Checks if 2 histograms are equal. Ignores type, and checks if the keys (after type casting) match.
    Definition: histogram.hpp:245
    +
    key_t key_from_pixel(Pixel const &p) const
    Returns a histogram compatible key from the input pixel which can be directly used.
    Definition: histogram.hpp:339
    +
    key_t min_key() const
    Return the minimum key in histogram.
    Definition: histogram.hpp:531
    +
    Filler is used to fill the histogram class with all values between a specified range This functor is ...
    Definition: histogram.hpp:172
    +
    key_t max_key() const
    Return the maximum key in histogram.
    Definition: histogram.hpp:542
    +
    Provides equivalent of std::numeric_limits for type std::tuple tuple_limit gets called with only tupl...
    Definition: histogram.hpp:137
    +
    bool is_tuple_compatible(Tuple const &)
    Checks if the histogram class is compatible to be used with the specified tuple type.
    Definition: histogram.hpp:275
    +
    bool tuple_compare(Tuple const &t1, Tuple const &t2)
    Compares 2 tuples and outputs t1 <= t2 Comparison is not in a lexicographic manner but on every eleme...
    Definition: histogram.hpp:125
    +
    auto pixel_to_tuple(Pixel const &p, boost::mp11::index_sequence< I... >) -> decltype(std::make_tuple(p[I]...))
    Definition: histogram.hpp:88
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    void normalize()
    Normalize this histogram class.
    Definition: histogram.hpp:508
    +
    Functor provided for the hashing of tuples. The following approach makes use hash_combine from boost:...
    Definition: histogram.hpp:74
    +
    histogram< boost::mp11::mp_at< bin_t, boost::mp11::mp_size_t< Dimensions > >... > sub_histogram()
    Returns a sub-histogram over specified axes.
    Definition: histogram.hpp:481
    +
    static constexpr std::size_t dimension()
    Returns the number of dimensions(axes) the class supports.
    Definition: histogram.hpp:226
    +
    double sum() const
    Return the sum count of all bins.
    Definition: histogram.hpp:521
    +
    key_t key_from_tuple(Tuple const &t) const
    Returns a key compatible to be used as the histogram key from the input tuple.
    Definition: histogram.hpp:296
    +
    void fill(SrcView const &srcview, std::size_t bin_width=1, bool applymask=false, std::vector< std::vector< bool >> mask={}, key_t lower=key_t(), key_t upper=key_t(), bool setlimits=false)
    Fills the histogram with the input image view.
    Definition: histogram.hpp:409
    +
    key_t nearest_key(key_t const &k) const
    Return nearest smaller key to specified histogram key.
    Definition: histogram.hpp:377
    +
    void fill(boost::gil::iterator_from_2d< IL > first, boost::gil::iterator_from_2d< IL > last, const V &val)
    std::fill(I,I,V) with I being a iterator_from_2d
    Definition: algorithm.hpp:369
    +
    mapped_t & operator()(T... indices)
    Returns bin value corresponding to specified tuple.
    Definition: histogram.hpp:232
    +
    static constexpr bool is_pixel_compatible()
    Checks if the histogram class is compatible to be used with a GIL image type.
    Definition: histogram.hpp:266
    +
    std::vector< key_t > sorted_keys() const
    Return sorted keys in a vector.
    Definition: histogram.hpp:553
    +
    histogram sub_histogram(Tuple const &t1, Tuple const &t2)
    Can return a subset or a mask over the current histogram.
    Definition: histogram.hpp:442
    Definition: color_convert.hpp:31
    Returns the number of channels of a pixel-based GIL construct.
    Definition: locator.hpp:38
    -
    Default histogram class provided by boost::gil.
    Definition: histogram.hpp:213
    -
    auto tuple_to_tuple(Tuple const &t, boost::mp11::index_sequence< I... >) -> decltype(std::make_tuple(std::get< I >(t)...))
    Definition: histogram.hpp:97
    +
    Default histogram class provided by boost::gil.
    Definition: histogram.hpp:214
    +
    auto tuple_to_tuple(Tuple const &t, boost::mp11::index_sequence< I... >) -> decltype(std::make_tuple(std::get< I >(t)...))
    Definition: histogram.hpp:98
    diff --git a/html/reference/histogram__equalization_8hpp_source.html b/html/reference/histogram__equalization_8hpp_source.html index 8cb9c6fc7..930f299e9 100644 --- a/html/reference/histogram__equalization_8hpp_source.html +++ b/html/reference/histogram__equalization_8hpp_source.html @@ -64,20 +64,20 @@ $(function() {
    15 #include <map>
    16 #include <vector>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    -
    20 
    -
    36 
    -
    44 template <typename SrcKeyType>
    -
    45 std::map<SrcKeyType, SrcKeyType> histogram_equalization(histogram<SrcKeyType> const& src_hist)
    +
    35 
    +
    43 template <typename SrcKeyType>
    +
    44 auto histogram_equalization(histogram<SrcKeyType> const& src_hist)
    +
    45  -> std::map<SrcKeyType, SrcKeyType>
    46 {
    47  histogram<SrcKeyType> dst_hist;
    48  return histogram_equalization(src_hist, dst_hist);
    49 }
    50 
    61 template <typename SrcKeyType, typename DstKeyType>
    -
    62 std::map<SrcKeyType, DstKeyType>
    -
    63  histogram_equalization(histogram<SrcKeyType> const& src_hist, histogram<DstKeyType>& dst_hist)
    +
    62 auto histogram_equalization(histogram<SrcKeyType> const& src_hist, histogram<DstKeyType>& dst_hist)
    +
    63  -> std::map<SrcKeyType, DstKeyType>
    64 {
    65  static_assert(
    66  std::is_integral<SrcKeyType>::value &&
    @@ -133,13 +133,13 @@ $(function() {
    126  for (std::size_t i = 0; i < channels; i++)
    127  {
    128  histogram<source_channel_t> h;
    -
    129  fill_histogram(nth_channel_view(src_view, i), h, bin_width, false, false, mask, src_mask);
    +
    129  fill_histogram(nth_channel_view(src_view, i), h, bin_width, false, false, mask, src_mask);
    130  h.normalize();
    131  auto h2 = cumulative_histogram(h);
    132  for (std::ptrdiff_t src_y = 0; src_y < height; ++src_y)
    133  {
    -
    134  auto src_it = nth_channel_view(src_view, i).row_begin(src_y);
    -
    135  auto dst_it = nth_channel_view(dst_view, i).row_begin(src_y);
    +
    134  auto src_it = nth_channel_view(src_view, i).row_begin(src_y);
    +
    135  auto dst_it = nth_channel_view(dst_view, i).row_begin(src_y);
    136  for (std::ptrdiff_t src_x = 0; src_x < width; ++src_x)
    137  {
    138  if (mask && !src_mask[src_y][src_x])
    @@ -156,7 +156,8 @@ $(function() {
    149 
    150 #endif
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    diff --git a/html/reference/histogram__matching_8hpp_source.html b/html/reference/histogram__matching_8hpp_source.html index 43f006320..fea80ee83 100644 --- a/html/reference/histogram__matching_8hpp_source.html +++ b/html/reference/histogram__matching_8hpp_source.html @@ -67,146 +67,148 @@ $(function() {
    18 #include <map>
    19 #include <vector>
    20 
    -
    21 namespace boost { namespace gil {
    +
    21 namespace boost { namespace gil {
    22 
    36 
    45 template <typename SrcKeyType, typename RefKeyType>
    -
    46 std::map<SrcKeyType, SrcKeyType>
    -
    47  histogram_matching(histogram<SrcKeyType> const& src_hist, histogram<RefKeyType> const& ref_hist)
    +
    46 auto histogram_matching(histogram<SrcKeyType> const& src_hist, histogram<RefKeyType> const& ref_hist)
    +
    47  -> std::map<SrcKeyType, SrcKeyType>
    48 {
    49  histogram<SrcKeyType> dst_hist;
    50  return histogram_matching(src_hist, ref_hist, dst_hist);
    51 }
    52 
    65 template <typename SrcKeyType, typename RefKeyType, typename DstKeyType>
    -
    66 std::map<SrcKeyType, DstKeyType> histogram_matching(
    +
    66 auto histogram_matching(
    67  histogram<SrcKeyType> const& src_hist,
    68  histogram<RefKeyType> const& ref_hist,
    69  histogram<DstKeyType>& dst_hist)
    -
    70 {
    -
    71  static_assert(
    -
    72  std::is_integral<SrcKeyType>::value &&
    -
    73  std::is_integral<RefKeyType>::value &&
    -
    74  std::is_integral<DstKeyType>::value,
    -
    75  "Source, Refernce or Destination histogram type is not appropriate.");
    -
    76 
    -
    77  using value_t = typename histogram<SrcKeyType>::value_type;
    -
    78  dst_hist.clear();
    -
    79  double src_sum = src_hist.sum();
    -
    80  double ref_sum = ref_hist.sum();
    -
    81  auto cumltv_srchist = cumulative_histogram(src_hist);
    -
    82  auto cumltv_refhist = cumulative_histogram(ref_hist);
    -
    83  std::map<SrcKeyType, RefKeyType> inverse_mapping;
    -
    84 
    -
    85  std::vector<typename histogram<RefKeyType>::key_type> src_keys, ref_keys;
    -
    86  src_keys = src_hist.sorted_keys();
    -
    87  ref_keys = ref_hist.sorted_keys();
    -
    88  std::ptrdiff_t start = ref_keys.size() - 1;
    -
    89  RefKeyType ref_max;
    -
    90  if (start >= 0)
    -
    91  ref_max = std::get<0>(ref_keys[start]);
    -
    92 
    -
    93  for (std::ptrdiff_t j = src_keys.size() - 1; j >= 0; --j)
    -
    94  {
    -
    95  double src_val = (cumltv_srchist[src_keys[j]] * ref_sum) / src_sum;
    -
    96  while (cumltv_refhist[ref_keys[start]] > src_val && start > 0)
    -
    97  {
    -
    98  start--;
    -
    99  }
    -
    100  if (std::abs(cumltv_refhist[ref_keys[start]] - src_val) >
    -
    101  std::abs(cumltv_refhist(std::min<RefKeyType>(ref_max, std::get<0>(ref_keys[start + 1]))) -
    -
    102  src_val))
    -
    103  {
    -
    104  inverse_mapping[std::get<0>(src_keys[j])] =
    -
    105  std::min<RefKeyType>(ref_max, std::get<0>(ref_keys[start + 1]));
    -
    106  }
    -
    107  else
    -
    108  {
    -
    109  inverse_mapping[std::get<0>(src_keys[j])] = std::get<0>(ref_keys[start]);
    -
    110  }
    -
    111  if (j == 0)
    -
    112  break;
    -
    113  }
    -
    114  std::for_each(src_hist.begin(), src_hist.end(), [&](value_t const& v) {
    -
    115  dst_hist[inverse_mapping[std::get<0>(v.first)]] += v.second;
    -
    116  });
    -
    117  return inverse_mapping;
    -
    118 }
    -
    119 
    -
    133 template <typename SrcView, typename ReferenceView, typename DstView>
    -
    134 void histogram_matching(
    -
    135  SrcView const& src_view,
    -
    136  ReferenceView const& ref_view,
    -
    137  DstView const& dst_view,
    -
    138  std::size_t bin_width = 1,
    -
    139  bool mask = false,
    -
    140  std::vector<std::vector<bool>> src_mask = {},
    -
    141  std::vector<std::vector<bool>> ref_mask = {})
    -
    142 {
    -
    143  gil_function_requires<ImageViewConcept<SrcView>>();
    -
    144  gil_function_requires<ImageViewConcept<ReferenceView>>();
    -
    145  gil_function_requires<MutableImageViewConcept<DstView>>();
    -
    146 
    -
    147  static_assert(
    -
    148  color_spaces_are_compatible<
    -
    149  typename color_space_type<SrcView>::type,
    -
    150  typename color_space_type<ReferenceView>::type>::value,
    -
    151  "Source and reference view must have same color space");
    -
    152 
    -
    153  static_assert(
    -
    154  color_spaces_are_compatible<
    -
    155  typename color_space_type<SrcView>::type,
    -
    156  typename color_space_type<DstView>::type>::value,
    -
    157  "Source and destination view must have same color space");
    -
    158 
    -
    159  // Defining channel type
    -
    160  using source_channel_t = typename channel_type<SrcView>::type;
    -
    161  using ref_channel_t = typename channel_type<ReferenceView>::type;
    -
    162  using dst_channel_t = typename channel_type<DstView>::type;
    -
    163  using coord_t = typename SrcView::x_coord_t;
    -
    164 
    -
    165  std::size_t const channels = num_channels<SrcView>::value;
    -
    166  coord_t const width = src_view.width();
    -
    167  coord_t const height = src_view.height();
    -
    168  source_channel_t src_pixel_min = std::numeric_limits<source_channel_t>::min();
    -
    169  source_channel_t src_pixel_max = std::numeric_limits<source_channel_t>::max();
    -
    170  ref_channel_t ref_pixel_min = std::numeric_limits<ref_channel_t>::min();
    -
    171  ref_channel_t ref_pixel_max = std::numeric_limits<ref_channel_t>::max();
    -
    172 
    -
    173  for (std::size_t i = 0; i < channels; i++)
    -
    174  {
    -
    175  histogram<source_channel_t> src_histogram;
    -
    176  histogram<ref_channel_t> ref_histogram;
    -
    177  fill_histogram(
    -
    178  nth_channel_view(src_view, i), src_histogram, bin_width, false, false, mask, src_mask,
    -
    179  std::tuple<source_channel_t>(src_pixel_min),
    -
    180  std::tuple<source_channel_t>(src_pixel_max), true);
    -
    181  fill_histogram(
    -
    182  nth_channel_view(ref_view, i), ref_histogram, bin_width, false, false, mask, ref_mask,
    -
    183  std::tuple<ref_channel_t>(ref_pixel_min), std::tuple<ref_channel_t>(ref_pixel_max),
    -
    184  true);
    -
    185  auto inverse_mapping = histogram_matching(src_histogram, ref_histogram);
    -
    186  for (std::ptrdiff_t src_y = 0; src_y < height; ++src_y)
    -
    187  {
    -
    188  auto src_it = nth_channel_view(src_view, i).row_begin(src_y);
    -
    189  auto dst_it = nth_channel_view(dst_view, i).row_begin(src_y);
    -
    190  for (std::ptrdiff_t src_x = 0; src_x < width; ++src_x)
    -
    191  {
    -
    192  if (mask && !src_mask[src_y][src_x])
    -
    193  dst_it[src_x][0] = src_it[src_x][0];
    -
    194  else
    -
    195  dst_it[src_x][0] =
    -
    196  static_cast<dst_channel_t>(inverse_mapping[src_it[src_x][0]]);
    -
    197  }
    -
    198  }
    -
    199  }
    -
    200 }
    -
    201 
    -
    202 }} //namespace boost::gil
    -
    203 
    -
    204 #endif
    +
    70  -> std::map<SrcKeyType, DstKeyType>
    +
    71 {
    +
    72  static_assert(
    +
    73  std::is_integral<SrcKeyType>::value &&
    +
    74  std::is_integral<RefKeyType>::value &&
    +
    75  std::is_integral<DstKeyType>::value,
    +
    76  "Source, Refernce or Destination histogram type is not appropriate.");
    +
    77 
    +
    78  using value_t = typename histogram<SrcKeyType>::value_type;
    +
    79  dst_hist.clear();
    +
    80  double src_sum = src_hist.sum();
    +
    81  double ref_sum = ref_hist.sum();
    +
    82  auto cumltv_srchist = cumulative_histogram(src_hist);
    +
    83  auto cumltv_refhist = cumulative_histogram(ref_hist);
    +
    84  std::map<SrcKeyType, RefKeyType> inverse_mapping;
    +
    85 
    +
    86  std::vector<typename histogram<RefKeyType>::key_type> src_keys, ref_keys;
    +
    87  src_keys = src_hist.sorted_keys();
    +
    88  ref_keys = ref_hist.sorted_keys();
    +
    89  std::ptrdiff_t start = ref_keys.size() - 1;
    +
    90  RefKeyType ref_max;
    +
    91  if (start >= 0)
    +
    92  ref_max = std::get<0>(ref_keys[start]);
    +
    93 
    +
    94  for (std::ptrdiff_t j = src_keys.size() - 1; j >= 0; --j)
    +
    95  {
    +
    96  double src_val = (cumltv_srchist[src_keys[j]] * ref_sum) / src_sum;
    +
    97  while (cumltv_refhist[ref_keys[start]] > src_val && start > 0)
    +
    98  {
    +
    99  start--;
    +
    100  }
    +
    101  if (std::abs(cumltv_refhist[ref_keys[start]] - src_val) >
    +
    102  std::abs(cumltv_refhist(std::min<RefKeyType>(ref_max, std::get<0>(ref_keys[start + 1]))) -
    +
    103  src_val))
    +
    104  {
    +
    105  inverse_mapping[std::get<0>(src_keys[j])] =
    +
    106  std::min<RefKeyType>(ref_max, std::get<0>(ref_keys[start + 1]));
    +
    107  }
    +
    108  else
    +
    109  {
    +
    110  inverse_mapping[std::get<0>(src_keys[j])] = std::get<0>(ref_keys[start]);
    +
    111  }
    +
    112  if (j == 0)
    +
    113  break;
    +
    114  }
    +
    115  std::for_each(src_hist.begin(), src_hist.end(), [&](value_t const& v) {
    +
    116  dst_hist[inverse_mapping[std::get<0>(v.first)]] += v.second;
    +
    117  });
    +
    118  return inverse_mapping;
    +
    119 }
    +
    120 
    +
    134 template <typename SrcView, typename ReferenceView, typename DstView>
    +
    135 void histogram_matching(
    +
    136  SrcView const& src_view,
    +
    137  ReferenceView const& ref_view,
    +
    138  DstView const& dst_view,
    +
    139  std::size_t bin_width = 1,
    +
    140  bool mask = false,
    +
    141  std::vector<std::vector<bool>> src_mask = {},
    +
    142  std::vector<std::vector<bool>> ref_mask = {})
    +
    143 {
    +
    144  gil_function_requires<ImageViewConcept<SrcView>>();
    +
    145  gil_function_requires<ImageViewConcept<ReferenceView>>();
    +
    146  gil_function_requires<MutableImageViewConcept<DstView>>();
    +
    147 
    +
    148  static_assert(
    +
    149  color_spaces_are_compatible<
    +
    150  typename color_space_type<SrcView>::type,
    +
    151  typename color_space_type<ReferenceView>::type>::value,
    +
    152  "Source and reference view must have same color space");
    +
    153 
    +
    154  static_assert(
    +
    155  color_spaces_are_compatible<
    +
    156  typename color_space_type<SrcView>::type,
    +
    157  typename color_space_type<DstView>::type>::value,
    +
    158  "Source and destination view must have same color space");
    +
    159 
    +
    160  // Defining channel type
    +
    161  using source_channel_t = typename channel_type<SrcView>::type;
    +
    162  using ref_channel_t = typename channel_type<ReferenceView>::type;
    +
    163  using dst_channel_t = typename channel_type<DstView>::type;
    +
    164  using coord_t = typename SrcView::x_coord_t;
    +
    165 
    +
    166  std::size_t const channels = num_channels<SrcView>::value;
    +
    167  coord_t const width = src_view.width();
    +
    168  coord_t const height = src_view.height();
    +
    169  source_channel_t src_pixel_min = std::numeric_limits<source_channel_t>::min();
    +
    170  source_channel_t src_pixel_max = std::numeric_limits<source_channel_t>::max();
    +
    171  ref_channel_t ref_pixel_min = std::numeric_limits<ref_channel_t>::min();
    +
    172  ref_channel_t ref_pixel_max = std::numeric_limits<ref_channel_t>::max();
    +
    173 
    +
    174  for (std::size_t i = 0; i < channels; i++)
    +
    175  {
    +
    176  histogram<source_channel_t> src_histogram;
    +
    177  histogram<ref_channel_t> ref_histogram;
    +
    178  fill_histogram(
    +
    179  nth_channel_view(src_view, i), src_histogram, bin_width, false, false, mask, src_mask,
    +
    180  std::tuple<source_channel_t>(src_pixel_min),
    +
    181  std::tuple<source_channel_t>(src_pixel_max), true);
    +
    182  fill_histogram(
    +
    183  nth_channel_view(ref_view, i), ref_histogram, bin_width, false, false, mask, ref_mask,
    +
    184  std::tuple<ref_channel_t>(ref_pixel_min), std::tuple<ref_channel_t>(ref_pixel_max),
    +
    185  true);
    +
    186  auto inverse_mapping = histogram_matching(src_histogram, ref_histogram);
    +
    187  for (std::ptrdiff_t src_y = 0; src_y < height; ++src_y)
    +
    188  {
    +
    189  auto src_it = nth_channel_view(src_view, i).row_begin(src_y);
    +
    190  auto dst_it = nth_channel_view(dst_view, i).row_begin(src_y);
    +
    191  for (std::ptrdiff_t src_x = 0; src_x < width; ++src_x)
    +
    192  {
    +
    193  if (mask && !src_mask[src_y][src_x])
    +
    194  dst_it[src_x][0] = src_it[src_x][0];
    +
    195  else
    +
    196  dst_it[src_x][0] =
    +
    197  static_cast<dst_channel_t>(inverse_mapping[src_it[src_x][0]]);
    +
    198  }
    +
    199  }
    +
    200  }
    +
    201 }
    +
    202 
    +
    203 }} //namespace boost::gil
    +
    204 
    +
    205 #endif
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    diff --git a/html/reference/image_8hpp_source.html b/html/reference/image_8hpp_source.html index 93d63cf55..6f10d333c 100644 --- a/html/reference/image_8hpp_source.html +++ b/html/reference/image_8hpp_source.html @@ -71,7 +71,7 @@ $(function() {
    22 #include <utility>
    23 #include <type_traits>
    24 
    -
    25 namespace boost { namespace gil {
    +
    25 namespace boost { namespace gil {
    26 
    40 
    41 template< typename Pixel, bool IsPlanar, typename Alloc>
    @@ -91,7 +91,7 @@ $(function() {
    55  using x_coord_t = coord_t;
    56  using y_coord_t = coord_t;
    57 
    -
    58  const point_t& dimensions() const { return _view.dimensions(); }
    +
    58  point_t const& dimensions() const { return _view.dimensions(); }
    59  x_coord_t width() const { return _view.width(); }
    60  y_coord_t height() const { return _view.height(); }
    61 
    @@ -100,7 +100,7 @@ $(function() {
    64  _memory(nullptr), _align_in_bytes(alignment), _alloc(alloc_in), _allocated_bytes( 0 ) {}
    65 
    66  // Create with dimensions and optional initial value and alignment
    -
    67  image(const point_t& dimensions,
    +
    67  image(point_t const& dimensions,
    68  std::size_t alignment=0,
    69  const Alloc alloc_in = Alloc()) : _memory(nullptr), _align_in_bytes(alignment), _alloc(alloc_in)
    70  , _allocated_bytes( 0 )
    @@ -116,7 +116,7 @@ $(function() {
    80  allocate_and_default_construct(point_t(width,height));
    81  }
    82 
    -
    83  image(const point_t& dimensions,
    +
    83  image(point_t const& dimensions,
    84  const Pixel& p_in,
    85  std::size_t alignment = 0,
    86  const Alloc alloc_in = Alloc()) : _memory(nullptr), _align_in_bytes(alignment), _alloc(alloc_in)
    @@ -149,12 +149,12 @@ $(function() {
    113 
    114  template <typename Loc,
    115  typename std::enable_if<pixels_are_compatible<typename Loc::value_type, Pixel>::value, int>::type = 0>
    -
    116  image(const image_view<Loc>& view,
    +
    116  image(const image_view<Loc>& view,
    117  std::size_t alignment = 0,
    118  const Alloc alloc_in = Alloc()) : _memory(nullptr), _align_in_bytes(alignment), _alloc(alloc_in)
    119  , _allocated_bytes( 0 )
    120  {
    -
    121  allocate_and_copy(view.dimensions(),view);
    +
    121  allocate_and_copy(view.dimensions(),view);
    122  }
    123 
    124  // TODO Optimization: use noexcept (requires _view to be nothrow copy constructible)
    @@ -274,349 +274,371 @@ $(function() {
    238  swap(_align_in_bytes, img._align_in_bytes);
    239  swap(_memory, img._memory);
    240  swap(_view, img._view);
    -
    241  swap(_alloc, img._alloc);
    -
    242  swap(_allocated_bytes, img._allocated_bytes );
    -
    243  }
    -
    244 
    -
    246  // recreate
    -
    248 
    -
    249  // without Allocator
    -
    250  void recreate(const point_t& dims, std::size_t alignment = 0)
    -
    251  {
    -
    252  if (dims == _view.dimensions() && _align_in_bytes == alignment)
    -
    253  return;
    -
    254 
    -
    255  _align_in_bytes = alignment;
    -
    256 
    -
    257  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    -
    258  {
    -
    259  destruct_pixels(_view);
    -
    260  create_view(dims, std::integral_constant<bool, IsPlanar>());
    - -
    262  }
    -
    263  else
    -
    264  {
    -
    265  image tmp(dims, alignment);
    -
    266  swap(tmp);
    -
    267  }
    -
    268  }
    -
    269 
    -
    270  void recreate(x_coord_t width, y_coord_t height, std::size_t alignment = 0)
    -
    271  {
    -
    272  recreate(point_t(width, height), alignment);
    -
    273  }
    -
    274 
    -
    275  void recreate(const point_t& dims, const Pixel& p_in, std::size_t alignment = 0)
    -
    276  {
    -
    277  if (dims == _view.dimensions() && _align_in_bytes == alignment)
    -
    278  return;
    -
    279 
    -
    280  _align_in_bytes = alignment;
    +
    241 #ifdef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
    +
    242  swap(_alloc, img._alloc);
    +
    243 #else
    +
    244  if constexpr (std::allocator_traits<Alloc>::propagate_on_container_swap::value)
    +
    245  swap(_alloc, img._alloc);
    +
    246  else
    +
    247  BOOST_ASSERT(_alloc == img._alloc);
    +
    248 #endif
    +
    249  swap(_allocated_bytes, img._allocated_bytes );
    +
    250  }
    +
    251 
    +
    253  // recreate
    +
    255 
    +
    256  // without Allocator
    +
    257  void recreate(point_t const& dims, std::size_t alignment = 0)
    +
    258  {
    +
    259  if (dims == _view.dimensions() && _align_in_bytes == alignment)
    +
    260  return;
    +
    261 
    +
    262  _align_in_bytes = alignment;
    +
    263 
    +
    264  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    +
    265  {
    +
    266  destruct_pixels(_view);
    +
    267  create_view(dims, std::integral_constant<bool, IsPlanar>());
    + +
    269  }
    +
    270  else
    +
    271  {
    +
    272  image tmp(dims, alignment);
    +
    273  swap(tmp);
    +
    274  }
    +
    275  }
    +
    276 
    +
    277  void recreate(x_coord_t width, y_coord_t height, std::size_t alignment = 0)
    +
    278  {
    +
    279  recreate(point_t(width, height), alignment);
    +
    280  }
    281 
    -
    282  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    -
    283  {
    -
    284  destruct_pixels(_view);
    -
    285  create_view(dims, typename std::integral_constant<bool, IsPlanar>());
    -
    286  uninitialized_fill_pixels(_view, p_in);
    -
    287  }
    -
    288  else
    -
    289  {
    -
    290  image tmp(dims, p_in, alignment);
    -
    291  swap(tmp);
    -
    292  }
    -
    293  }
    -
    294 
    -
    295  void recreate( x_coord_t width, y_coord_t height, const Pixel& p_in, std::size_t alignment = 0 )
    -
    296  {
    -
    297  recreate( point_t( width, height ), p_in, alignment );
    -
    298  }
    -
    299 
    -
    300  // with Allocator
    -
    301  void recreate(const point_t& dims, std::size_t alignment, const Alloc alloc_in)
    -
    302  {
    -
    303  if (dims == _view.dimensions() && _align_in_bytes == alignment && alloc_in == _alloc)
    -
    304  return;
    -
    305 
    -
    306  _align_in_bytes = alignment;
    -
    307 
    -
    308  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    -
    309  {
    -
    310  destruct_pixels(_view);
    -
    311  create_view(dims, std::integral_constant<bool, IsPlanar>());
    - -
    313  }
    -
    314  else
    -
    315  {
    -
    316  image tmp(dims, alignment, alloc_in);
    -
    317  swap(tmp);
    -
    318  }
    -
    319  }
    -
    320 
    -
    321  void recreate(x_coord_t width, y_coord_t height, std::size_t alignment, const Alloc alloc_in)
    -
    322  {
    -
    323  recreate(point_t(width, height), alignment, alloc_in);
    -
    324  }
    -
    325 
    -
    326  void recreate(const point_t& dims, const Pixel& p_in, std::size_t alignment, const Alloc alloc_in)
    -
    327  {
    -
    328  if (dims == _view.dimensions() && _align_in_bytes == alignment && alloc_in == _alloc)
    -
    329  return;
    -
    330 
    -
    331  _align_in_bytes = alignment;
    +
    282  void recreate(point_t const& dims, const Pixel& p_in, std::size_t alignment = 0)
    +
    283  {
    +
    284  if (dims == _view.dimensions() && _align_in_bytes == alignment)
    +
    285  return;
    +
    286 
    +
    287  _align_in_bytes = alignment;
    +
    288 
    +
    289  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    +
    290  {
    +
    291  destruct_pixels(_view);
    +
    292  create_view(dims, typename std::integral_constant<bool, IsPlanar>());
    +
    293  uninitialized_fill_pixels(_view, p_in);
    +
    294  }
    +
    295  else
    +
    296  {
    +
    297  image tmp(dims, p_in, alignment);
    +
    298  swap(tmp);
    +
    299  }
    +
    300  }
    +
    301 
    +
    302  void recreate( x_coord_t width, y_coord_t height, const Pixel& p_in, std::size_t alignment = 0 )
    +
    303  {
    +
    304  recreate( point_t( width, height ), p_in, alignment );
    +
    305  }
    +
    306 
    +
    307  // with Allocator
    +
    308  void recreate(point_t const& dims, std::size_t alignment, const Alloc alloc_in)
    +
    309  {
    +
    310  if (dims == _view.dimensions() && _align_in_bytes == alignment && alloc_in == _alloc)
    +
    311  return;
    +
    312 
    +
    313  _align_in_bytes = alignment;
    +
    314 
    +
    315  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    +
    316  {
    +
    317  destruct_pixels(_view);
    +
    318  create_view(dims, std::integral_constant<bool, IsPlanar>());
    + +
    320  }
    +
    321  else
    +
    322  {
    +
    323  image tmp(dims, alignment, alloc_in);
    +
    324  swap(tmp);
    +
    325  }
    +
    326  }
    +
    327 
    +
    328  void recreate(x_coord_t width, y_coord_t height, std::size_t alignment, const Alloc alloc_in)
    +
    329  {
    +
    330  recreate(point_t(width, height), alignment, alloc_in);
    +
    331  }
    332 
    -
    333  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    -
    334  {
    -
    335  destruct_pixels(_view);
    -
    336  create_view(dims, std::integral_constant<bool, IsPlanar>());
    -
    337  uninitialized_fill_pixels(_view, p_in);
    -
    338  }
    -
    339  else
    -
    340  {
    -
    341  image tmp(dims, p_in, alignment, alloc_in);
    -
    342  swap(tmp);
    -
    343  }
    -
    344  }
    -
    345 
    -
    346  void recreate(x_coord_t width, y_coord_t height, const Pixel& p_in, std::size_t alignment, const Alloc alloc_in )
    -
    347  {
    -
    348  recreate(point_t(width, height), p_in, alignment, alloc_in);
    -
    349  }
    -
    350 
    -
    351  view_t _view; // contains pointer to the pixels, the image size and ways to navigate pixels
    +
    333  void recreate(point_t const& dims, const Pixel& p_in, std::size_t alignment, const Alloc alloc_in)
    +
    334  {
    +
    335  if (dims == _view.dimensions() && _align_in_bytes == alignment && alloc_in == _alloc)
    +
    336  return;
    +
    337 
    +
    338  _align_in_bytes = alignment;
    +
    339 
    +
    340  if (_allocated_bytes >= total_allocated_size_in_bytes(dims))
    +
    341  {
    +
    342  destruct_pixels(_view);
    +
    343  create_view(dims, std::integral_constant<bool, IsPlanar>());
    +
    344  uninitialized_fill_pixels(_view, p_in);
    +
    345  }
    +
    346  else
    +
    347  {
    +
    348  image tmp(dims, p_in, alignment, alloc_in);
    +
    349  swap(tmp);
    +
    350  }
    +
    351  }
    352 
    -
    353  // for construction from other type
    -
    354  template <typename P2, bool IP2, typename Alloc2> friend class image;
    -
    355 private:
    -
    356  unsigned char* _memory;
    -
    357  std::size_t _align_in_bytes;
    -
    358  allocator_type _alloc;
    +
    353  void recreate(x_coord_t width, y_coord_t height, const Pixel& p_in, std::size_t alignment, const Alloc alloc_in )
    +
    354  {
    +
    355  recreate(point_t(width, height), p_in, alignment, alloc_in);
    +
    356  }
    +
    357 
    +
    358  view_t _view; // contains pointer to the pixels, the image size and ways to navigate pixels
    359 
    -
    360  std::size_t _allocated_bytes;
    -
    361 
    -
    362  void allocate_and_default_construct(point_t const& dimensions)
    -
    363  {
    -
    364  try
    -
    365  {
    -
    366  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    - -
    368  }
    -
    369  catch (...) { deallocate(); throw; }
    -
    370  }
    -
    371 
    -
    372  void allocate_and_fill(const point_t& dimensions, Pixel const& p_in)
    -
    373  {
    -
    374  try
    -
    375  {
    -
    376  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    -
    377  uninitialized_fill_pixels(_view, p_in);
    -
    378  }
    -
    379  catch(...) { deallocate(); throw; }
    -
    380  }
    -
    381 
    -
    382  template <typename View>
    -
    383  void allocate_and_copy(const point_t& dimensions, View const& v)
    -
    384  {
    -
    385  try
    -
    386  {
    -
    387  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    -
    388  uninitialized_copy_pixels(v, _view);
    -
    389  }
    -
    390  catch(...) { deallocate(); throw; }
    -
    391  }
    -
    392 
    -
    393  void deallocate()
    -
    394  {
    -
    395  if (_memory && _allocated_bytes > 0)
    -
    396  _alloc.deallocate(_memory, _allocated_bytes);
    -
    397  }
    -
    398 
    -
    399  std::size_t is_planar_impl(
    -
    400  std::size_t const size_in_units,
    -
    401  std::size_t const channels_in_image,
    -
    402  std::true_type) const
    -
    403  {
    -
    404  return size_in_units * channels_in_image;
    -
    405  }
    -
    406 
    -
    407  std::size_t is_planar_impl(
    -
    408  std::size_t const size_in_units,
    -
    409  std::size_t const,
    -
    410  std::false_type) const
    -
    411  {
    -
    412  return size_in_units;
    -
    413  }
    -
    414 
    -
    415  std::size_t total_allocated_size_in_bytes(point_t const& dimensions) const
    -
    416  {
    -
    417  using x_iterator = typename view_t::x_iterator;
    -
    418 
    -
    419  // when value_type is a non-pixel, like int or float, num_channels< ... > doesn't work.
    -
    420  constexpr std::size_t _channels_in_image =
    -
    421  std::conditional
    -
    422  <
    -
    423  is_pixel<value_type>::value,
    - -
    425  std::integral_constant<std::size_t, 1>
    -
    426  >::type::value;
    -
    427 
    -
    428  std::size_t size_in_units = is_planar_impl(
    -
    429  get_row_size_in_memunits(dimensions.x) * dimensions.y,
    -
    430  _channels_in_image,
    -
    431  std::integral_constant<bool, IsPlanar>());
    -
    432 
    -
    433  // return the size rounded up to the nearest byte
    -
    434  return ( size_in_units + byte_to_memunit< x_iterator >::value - 1 )
    - -
    436  + ( _align_in_bytes > 0 ? _align_in_bytes - 1 : 0 ); // add extra padding in case we need to align the first image pixel
    -
    437  }
    -
    438 
    -
    439  std::size_t get_row_size_in_memunits(x_coord_t width) const { // number of units per row
    -
    440  std::size_t size_in_memunits = width*memunit_step(typename view_t::x_iterator());
    -
    441  if (_align_in_bytes>0) {
    -
    442  std::size_t alignment_in_memunits=_align_in_bytes*byte_to_memunit<typename view_t::x_iterator>::value;
    -
    443  return align(size_in_memunits, alignment_in_memunits);
    -
    444  }
    -
    445  return size_in_memunits;
    -
    446  }
    -
    447 
    -
    448  void allocate_(point_t const& dimensions, std::false_type)
    -
    449  {
    -
    450  // if it throws and _memory!=0 the client must deallocate _memory
    -
    451  _allocated_bytes = total_allocated_size_in_bytes(dimensions);
    -
    452  _memory=_alloc.allocate( _allocated_bytes );
    -
    453 
    -
    454  unsigned char* tmp=(_align_in_bytes>0) ? (unsigned char*)align((std::size_t)_memory,_align_in_bytes) : _memory;
    -
    455  _view=view_t(dimensions,typename view_t::locator(typename view_t::x_iterator(tmp), get_row_size_in_memunits(dimensions.x)));
    -
    456 
    -
    457  BOOST_ASSERT(_view.width() == dimensions.x);
    -
    458  BOOST_ASSERT(_view.height() == dimensions.y);
    -
    459  }
    -
    460 
    -
    461  void allocate_(point_t const& dimensions, std::true_type)
    -
    462  {
    -
    463  // if it throws and _memory!=0 the client must deallocate _memory
    -
    464  std::size_t row_size=get_row_size_in_memunits(dimensions.x);
    -
    465  std::size_t plane_size=row_size*dimensions.y;
    -
    466 
    -
    467  _allocated_bytes = total_allocated_size_in_bytes( dimensions );
    +
    360  // for construction from other type
    +
    361  template <typename P2, bool IP2, typename Alloc2> friend class image;
    +
    362 private:
    +
    363  unsigned char* _memory;
    +
    364  std::size_t _align_in_bytes;
    +
    365  allocator_type _alloc;
    +
    366 
    +
    367  std::size_t _allocated_bytes;
    +
    368 
    +
    369  void allocate_and_default_construct(point_t const& dimensions)
    +
    370  {
    +
    371  try
    +
    372  {
    +
    373  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    + +
    375  }
    +
    376  catch (...) { deallocate(); throw; }
    +
    377  }
    +
    378 
    +
    379  void allocate_and_fill(point_t const& dimensions, Pixel const& p_in)
    +
    380  {
    +
    381  try
    +
    382  {
    +
    383  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    +
    384  uninitialized_fill_pixels(_view, p_in);
    +
    385  }
    +
    386  catch(...) { deallocate(); throw; }
    +
    387  }
    +
    388 
    +
    389  template <typename View>
    +
    390  void allocate_and_copy(point_t const& dimensions, View const& v)
    +
    391  {
    +
    392  try
    +
    393  {
    +
    394  allocate_(dimensions, std::integral_constant<bool, IsPlanar>());
    +
    395  uninitialized_copy_pixels(v, _view);
    +
    396  }
    +
    397  catch(...) { deallocate(); throw; }
    +
    398  }
    +
    399 
    +
    400  void deallocate()
    +
    401  {
    +
    402  if (_memory && _allocated_bytes > 0)
    +
    403  _alloc.deallocate(_memory, _allocated_bytes);
    +
    404  }
    +
    405 
    +
    406  std::size_t is_planar_impl(
    +
    407  std::size_t const size_in_units,
    +
    408  std::size_t const channels_in_image,
    +
    409  std::true_type) const
    +
    410  {
    +
    411  return size_in_units * channels_in_image;
    +
    412  }
    +
    413 
    +
    414  std::size_t is_planar_impl(
    +
    415  std::size_t const size_in_units,
    +
    416  std::size_t const,
    +
    417  std::false_type) const
    +
    418  {
    +
    419  return size_in_units;
    +
    420  }
    +
    421 
    +
    422  std::size_t total_allocated_size_in_bytes(point_t const& dimensions) const
    +
    423  {
    +
    424  using x_iterator = typename view_t::x_iterator;
    +
    425 
    +
    426  // when value_type is a non-pixel, like int or float, num_channels< ... > doesn't work.
    +
    427  constexpr std::size_t _channels_in_image =
    +
    428  std::conditional
    +
    429  <
    +
    430  is_pixel<value_type>::value,
    + +
    432  std::integral_constant<std::size_t, 1>
    +
    433  >::type::value;
    +
    434 
    +
    435  std::size_t size_in_units = is_planar_impl(
    +
    436  get_row_size_in_memunits(dimensions.x) * dimensions.y,
    +
    437  _channels_in_image,
    +
    438  std::integral_constant<bool, IsPlanar>());
    +
    439 
    +
    440  // return the size rounded up to the nearest byte
    +
    441  return ( size_in_units + byte_to_memunit< x_iterator >::value - 1 )
    + +
    443  + ( _align_in_bytes > 0 ? _align_in_bytes - 1 : 0 ); // add extra padding in case we need to align the first image pixel
    +
    444  }
    +
    445 
    +
    446  std::size_t get_row_size_in_memunits(x_coord_t width) const { // number of units per row
    +
    447  std::size_t size_in_memunits = width*memunit_step(typename view_t::x_iterator());
    +
    448  if (_align_in_bytes>0) {
    +
    449  std::size_t alignment_in_memunits=_align_in_bytes*byte_to_memunit<typename view_t::x_iterator>::value;
    +
    450  return align(size_in_memunits, alignment_in_memunits);
    +
    451  }
    +
    452  return size_in_memunits;
    +
    453  }
    +
    454 
    +
    455  void allocate_(point_t const& dimensions, std::false_type)
    +
    456  {
    +
    457  // if it throws and _memory!=0 the client must deallocate _memory
    +
    458  _allocated_bytes = total_allocated_size_in_bytes(dimensions);
    +
    459  if (_allocated_bytes == 0)
    +
    460  {
    +
    461  return;
    +
    462  }
    +
    463 
    +
    464  _memory=_alloc.allocate( _allocated_bytes );
    +
    465 
    +
    466  unsigned char* tmp=(_align_in_bytes>0) ? (unsigned char*)align((std::size_t)_memory,_align_in_bytes) : _memory;
    +
    467  _view=view_t(dimensions,typename view_t::locator(typename view_t::x_iterator(tmp), get_row_size_in_memunits(dimensions.x)));
    468 
    -
    469  _memory = _alloc.allocate( _allocated_bytes );
    -
    470 
    -
    471  unsigned char* tmp=(_align_in_bytes>0) ? (unsigned char*)align((std::size_t)_memory,_align_in_bytes) : _memory;
    -
    472  typename view_t::x_iterator first;
    -
    473  for (std::size_t i = 0; i < num_channels<view_t>::value; ++i)
    -
    474  {
    -
    475  dynamic_at_c(first, i) = (typename channel_type<view_t>::type*)tmp;
    -
    476  memunit_advance(dynamic_at_c(first, i), static_cast<std::ptrdiff_t>(plane_size * i));
    -
    477  }
    -
    478  _view=view_t(dimensions, typename view_t::locator(first, row_size));
    -
    479 
    -
    480  BOOST_ASSERT(_view.width() == dimensions.x);
    -
    481  BOOST_ASSERT(_view.height() == dimensions.y);
    -
    482  }
    -
    483 
    -
    484  void create_view(point_t const& dims, std::true_type) // is planar
    -
    485  {
    -
    486  std::size_t row_size=get_row_size_in_memunits(dims.x);
    -
    487  std::size_t plane_size=row_size*dims.y;
    -
    488 
    -
    489  unsigned char* tmp = ( _align_in_bytes > 0 ) ? (unsigned char*) align( (std::size_t) _memory
    -
    490  ,_align_in_bytes
    -
    491  )
    -
    492  : _memory;
    -
    493  typename view_t::x_iterator first;
    -
    494 
    -
    495  for (std::size_t i = 0; i < num_channels<view_t>::value; ++i)
    -
    496  {
    -
    497  dynamic_at_c(first, i) = (typename channel_type<view_t>::type*)tmp;
    -
    498  memunit_advance(dynamic_at_c(first, i), static_cast<std::ptrdiff_t>(plane_size * i));
    -
    499  }
    -
    500 
    -
    501  _view = view_t(dims, typename view_t::locator(first, row_size));
    -
    502 
    -
    503  BOOST_ASSERT(_view.width() == dims.x);
    -
    504  BOOST_ASSERT(_view.height() == dims.y);
    -
    505  }
    -
    506 
    -
    507  void create_view(point_t const& dims, std::false_type) // is planar
    -
    508  {
    -
    509  unsigned char* tmp = ( _align_in_bytes > 0 ) ? ( unsigned char* ) align( (std::size_t) _memory
    -
    510  , _align_in_bytes
    -
    511  )
    -
    512  : _memory;
    -
    513 
    -
    514  _view = view_t( dims
    -
    515  , typename view_t::locator( typename view_t::x_iterator( tmp )
    -
    516  , get_row_size_in_memunits( dims.x )
    -
    517  )
    -
    518  );
    -
    519 
    -
    520  BOOST_ASSERT(_view.width() == dims.x);
    -
    521  BOOST_ASSERT(_view.height() == dims.y);
    -
    522  }
    -
    523 };
    -
    524 
    -
    525 template <typename Pixel, bool IsPlanar, typename Alloc>
    - -
    527 {
    -
    528  im1.swap(im2);
    -
    529 }
    -
    530 
    -
    531 template <typename Pixel1, bool IsPlanar1, typename Alloc1, typename Pixel2, bool IsPlanar2, typename Alloc2>
    -
    532 bool operator==(const image<Pixel1,IsPlanar1,Alloc1>& im1,const image<Pixel2,IsPlanar2,Alloc2>& im2)
    -
    533 {
    -
    534  if ((void*)(&im1)==(void*)(&im2)) return true;
    -
    535  if (const_view(im1).dimensions()!=const_view(im2).dimensions()) return false;
    -
    536  return equal_pixels(const_view(im1),const_view(im2));
    -
    537 }
    -
    538 template <typename Pixel1, bool IsPlanar1, typename Alloc1, typename Pixel2, bool IsPlanar2, typename Alloc2>
    -
    539 bool operator!=(const image<Pixel1,IsPlanar1,Alloc1>& im1,const image<Pixel2,IsPlanar2,Alloc2>& im2) {return !(im1==im2);}
    +
    469  BOOST_ASSERT(_view.width() == dimensions.x);
    +
    470  BOOST_ASSERT(_view.height() == dimensions.y);
    +
    471  }
    +
    472 
    +
    473  void allocate_(point_t const& dimensions, std::true_type)
    +
    474  {
    +
    475  // if it throws and _memory!=0 the client must deallocate _memory
    +
    476  std::size_t row_size=get_row_size_in_memunits(dimensions.x);
    +
    477  std::size_t plane_size=row_size*dimensions.y;
    +
    478 
    +
    479  _allocated_bytes = total_allocated_size_in_bytes( dimensions );
    +
    480  if (_allocated_bytes == 0)
    +
    481  {
    +
    482  return;
    +
    483  }
    +
    484 
    +
    485  _memory = _alloc.allocate( _allocated_bytes );
    +
    486 
    +
    487  unsigned char* tmp=(_align_in_bytes>0) ? (unsigned char*)align((std::size_t)_memory,_align_in_bytes) : _memory;
    +
    488  typename view_t::x_iterator first;
    +
    489  for (std::size_t i = 0; i < num_channels<view_t>::value; ++i)
    +
    490  {
    +
    491  dynamic_at_c(first, i) = (typename channel_type<view_t>::type*)tmp;
    +
    492  memunit_advance(dynamic_at_c(first, i), static_cast<std::ptrdiff_t>(plane_size * i));
    +
    493  }
    +
    494  _view=view_t(dimensions, typename view_t::locator(first, row_size));
    +
    495 
    +
    496  BOOST_ASSERT(_view.width() == dimensions.x);
    +
    497  BOOST_ASSERT(_view.height() == dimensions.y);
    +
    498  }
    +
    499 
    +
    500  void create_view(point_t const& dims, std::true_type) // is planar
    +
    501  {
    +
    502  std::size_t row_size=get_row_size_in_memunits(dims.x);
    +
    503  std::size_t plane_size=row_size*dims.y;
    +
    504 
    +
    505  unsigned char* tmp = ( _align_in_bytes > 0 ) ? (unsigned char*) align( (std::size_t) _memory
    +
    506  ,_align_in_bytes
    +
    507  )
    +
    508  : _memory;
    +
    509  typename view_t::x_iterator first;
    +
    510 
    +
    511  for (std::size_t i = 0; i < num_channels<view_t>::value; ++i)
    +
    512  {
    +
    513  dynamic_at_c(first, i) = (typename channel_type<view_t>::type*)tmp;
    +
    514  memunit_advance(dynamic_at_c(first, i), static_cast<std::ptrdiff_t>(plane_size * i));
    +
    515  }
    +
    516 
    +
    517  _view = view_t(dims, typename view_t::locator(first, row_size));
    +
    518 
    +
    519  BOOST_ASSERT(_view.width() == dims.x);
    +
    520  BOOST_ASSERT(_view.height() == dims.y);
    +
    521  }
    +
    522 
    +
    523  void create_view(point_t const& dims, std::false_type) // is planar
    +
    524  {
    +
    525  unsigned char* tmp = ( _align_in_bytes > 0 ) ? ( unsigned char* ) align( (std::size_t) _memory
    +
    526  , _align_in_bytes
    +
    527  )
    +
    528  : _memory;
    +
    529 
    +
    530  _view = view_t( dims
    +
    531  , typename view_t::locator( typename view_t::x_iterator( tmp )
    +
    532  , get_row_size_in_memunits( dims.x )
    +
    533  )
    +
    534  );
    +
    535 
    +
    536  BOOST_ASSERT(_view.width() == dims.x);
    +
    537  BOOST_ASSERT(_view.height() == dims.y);
    +
    538  }
    +
    539 };
    540 
    -
    544 
    +
    541 template <typename Pixel, bool IsPlanar, typename Alloc>
    + +
    543 {
    +
    544  im1.swap(im2);
    +
    545 }
    546 
    -
    548 template <typename Pixel, bool IsPlanar, typename Alloc> inline
    -
    549 const typename image<Pixel,IsPlanar,Alloc>::view_t& view(image<Pixel,IsPlanar,Alloc>& img) { return img._view; }
    -
    550 
    -
    552 template <typename Pixel, bool IsPlanar, typename Alloc> inline
    -
    553 const typename image<Pixel,IsPlanar,Alloc>::const_view_t const_view(const image<Pixel,IsPlanar,Alloc>& img)
    -
    554 {
    -
    555  return static_cast<const typename image<Pixel,IsPlanar,Alloc>::const_view_t>(img._view);
    -
    556 }
    -
    558 
    -
    560 // PixelBasedConcept
    -
    562 
    -
    563 template <typename Pixel, bool IsPlanar, typename Alloc>
    -
    564 struct channel_type<image<Pixel, IsPlanar, Alloc>> : channel_type<Pixel> {};
    -
    565 
    -
    566 template <typename Pixel, bool IsPlanar, typename Alloc>
    -
    567 struct color_space_type<image<Pixel, IsPlanar, Alloc>> : color_space_type<Pixel> {};
    -
    568 
    -
    569 template <typename Pixel, bool IsPlanar, typename Alloc>
    -
    570 struct channel_mapping_type<image<Pixel, IsPlanar, Alloc>> : channel_mapping_type<Pixel> {};
    -
    571 
    +
    547 template <typename Pixel1, bool IsPlanar1, typename Alloc1, typename Pixel2, bool IsPlanar2, typename Alloc2>
    +
    548 bool operator==(const image<Pixel1,IsPlanar1,Alloc1>& im1,const image<Pixel2,IsPlanar2,Alloc2>& im2)
    +
    549 {
    +
    550  if ((void*)(&im1)==(void*)(&im2)) return true;
    +
    551  if (const_view(im1).dimensions()!=const_view(im2).dimensions()) return false;
    +
    552  return equal_pixels(const_view(im1),const_view(im2));
    +
    553 }
    +
    554 template <typename Pixel1, bool IsPlanar1, typename Alloc1, typename Pixel2, bool IsPlanar2, typename Alloc2>
    +
    555 bool operator!=(const image<Pixel1,IsPlanar1,Alloc1>& im1,const image<Pixel2,IsPlanar2,Alloc2>& im2) {return !(im1==im2);}
    +
    556 
    +
    560 
    +
    562 
    +
    564 template <typename Pixel, bool IsPlanar, typename Alloc>
    + +
    566  -> typename image<Pixel,IsPlanar,Alloc>::view_t const&
    +
    567 {
    +
    568  return img._view;
    +
    569 }
    +
    570 
    572 template <typename Pixel, bool IsPlanar, typename Alloc>
    -
    573 struct is_planar<image<Pixel, IsPlanar, Alloc>> : std::integral_constant<bool, IsPlanar> {};
    -
    574 
    -
    575 }} // namespace boost::gil
    -
    576 
    -
    577 #endif
    + +
    574  -> typename image<Pixel,IsPlanar,Alloc>::const_view_t const
    +
    575 {
    +
    576  return static_cast<const typename image<Pixel,IsPlanar,Alloc>::const_view_t>(img._view);
    +
    577 }
    +
    579 
    +
    581 // PixelBasedConcept
    +
    583 
    +
    584 template <typename Pixel, bool IsPlanar, typename Alloc>
    +
    585 struct channel_type<image<Pixel, IsPlanar, Alloc>> : channel_type<Pixel> {};
    +
    586 
    +
    587 template <typename Pixel, bool IsPlanar, typename Alloc>
    +
    588 struct color_space_type<image<Pixel, IsPlanar, Alloc>> : color_space_type<Pixel> {};
    +
    589 
    +
    590 template <typename Pixel, bool IsPlanar, typename Alloc>
    +
    591 struct channel_mapping_type<image<Pixel, IsPlanar, Alloc>> : channel_mapping_type<Pixel> {};
    +
    592 
    +
    593 template <typename Pixel, bool IsPlanar, typename Alloc>
    +
    594 struct is_planar<image<Pixel, IsPlanar, Alloc>> : std::integral_constant<bool, IsPlanar> {};
    +
    595 
    +
    596 }} // namespace boost::gil
    +
    597 
    +
    598 #endif
    Returns the type of a view the pixel type, whether it operates on planar data and whether it has a st...
    Definition: metafunctions.hpp:557
    Definition: pixel_iterator.hpp:124
    container interface over image view. Models ImageConcept, PixelBasedConcept
    Definition: image.hpp:42
    -
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:529
    -
    BOOST_FORCEINLINE bool equal_pixels(const View1 &v1, const View2 &v2)
    std::equal for image views
    Definition: algorithm.hpp:1105
    -
    void uninitialized_copy_pixels(View1 const &view1, View2 const &view2)
    std::uninitialized_copy for image views. Does not support planar heterogeneous views....
    Definition: algorithm.hpp:819
    +
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:583
    +
    BOOST_FORCEINLINE bool equal_pixels(const View1 &v1, const View2 &v2)
    std::equal for image views
    Definition: algorithm.hpp:1109
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto const_view(const image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::const_view_t const
    Returns the constant-pixel view of an image.
    Definition: image.hpp:573
    +
    void uninitialized_copy_pixels(View1 const &view1, View2 const &view2)
    std::uninitialized_copy for image views. Does not support planar heterogeneous views....
    Definition: algorithm.hpp:823
    A lightweight object that interprets memory as a 2D array of pixels. Models ImageViewConcept,...
    Definition: image_view.hpp:53
    BOOST_FORCEINLINE bool operator!=(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:137
    -
    BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
    std::copy for image views
    Definition: algorithm.hpp:288
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    -
    BOOST_FORCEINLINE void destruct_pixels(View const &view)
    Invokes the in-place destructor on every pixel of the view.
    Definition: algorithm.hpp:514
    -
    void uninitialized_fill_pixels(const View &view, const Value &val)
    std::uninitialized_fill for image views. Does not support planar heterogeneous views....
    Definition: algorithm.hpp:583
    -
    void default_construct_pixels(View const &view)
    Invokes the in-place default constructor on every pixel of the (uninitialized) view....
    Definition: algorithm.hpp:720
    -
    const image< Pixel, IsPlanar, Alloc >::const_view_t const_view(const image< Pixel, IsPlanar, Alloc > &img)
    Returns the constant-pixel view of an image.
    Definition: image.hpp:553
    +
    BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
    std::copy for image views
    Definition: algorithm.hpp:292
    +
    BOOST_FORCEINLINE void destruct_pixels(View const &view)
    Invokes the in-place destructor on every pixel of the view.
    Definition: algorithm.hpp:518
    +
    void uninitialized_fill_pixels(const View &view, const Value &val)
    std::uninitialized_fill for image views. Does not support planar heterogeneous views....
    Definition: algorithm.hpp:587
    +
    void default_construct_pixels(View const &view)
    Invokes the in-place default constructor on every pixel of the (uninitialized) view....
    Definition: algorithm.hpp:724
    Definition: color_convert.hpp:31
    Returns the number of channels of a pixel-based GIL construct.
    Definition: locator.hpp:38
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    BOOST_FORCEINLINE bool operator==(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:129
    diff --git a/html/reference/image__view_8hpp_source.html b/html/reference/image__view_8hpp_source.html index 359578b51..a1bb826e6 100644 --- a/html/reference/image__view_8hpp_source.html +++ b/html/reference/image__view_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 #include <cstddef>
    17 #include <iterator>
    18 
    -
    19 namespace boost { namespace gil {
    +
    19 namespace boost { namespace gil {
    20 
    52 template <typename Loc> // Models 2D Pixel Locator
    @@ -103,9 +103,9 @@ $(function() {
    85  struct add_deref
    86  {
    -
    88  static type make(image_view<Loc> const& view, Deref const& d)
    +
    88  static type make(image_view<Loc> const& view, Deref const& d)
    89  {
    -
    90  return type(view.dimensions(), Loc::template add_deref<Deref>::make(view.pixels(), d));
    +
    90  return type(view.dimensions(), Loc::template add_deref<Deref>::make(view.pixels(), d));
    91  }
    92  };
    93 
    @@ -115,7 +115,7 @@ $(function() {
    97  {}
    98 
    99  template <typename View>
    -
    100  image_view(View const& view) : _dimensions(view.dimensions()), _pixels(view.pixels()) {}
    +
    100  image_view(View const& view) : _dimensions(view.dimensions()), _pixels(view.pixels()) {}
    101 
    102  template <typename L2>
    103  image_view(point_t const& dims, L2 const& loc) : _dimensions(dims), _pixels(loc) {}
    @@ -126,31 +126,31 @@ $(function() {
    108  {}
    109 
    110  template <typename View>
    -
    111  image_view& operator=(View const& view)
    +
    111  image_view& operator=(View const& view)
    112  {
    -
    113  _pixels = view.pixels();
    -
    114  _dimensions = view.dimensions();
    +
    113  _pixels = view.pixels();
    +
    114  _dimensions = view.dimensions();
    115  return *this;
    116  }
    117 
    -
    118  image_view& operator=(image_view const& view)
    +
    118  image_view& operator=(image_view const& view)
    119  {
    120  // TODO: Self-assignment protection?
    -
    121  _pixels = view.pixels();
    -
    122  _dimensions = view.dimensions();
    +
    121  _pixels = view.pixels();
    +
    122  _dimensions = view.dimensions();
    123  return *this;
    124  }
    125 
    126  template <typename View>
    -
    127  bool operator==(View const &view) const
    +
    127  bool operator==(View const &view) const
    128  {
    -
    129  return pixels() == view.pixels() && dimensions() == view.dimensions();
    +
    129  return pixels() == view.pixels() && dimensions() == view.dimensions();
    130  }
    131 
    132  template <typename View>
    -
    133  bool operator!=(View const& view) const
    +
    133  bool operator!=(View const& view) const
    134  {
    -
    135  return !(*this == view);
    +
    135  return !(*this == view);
    136  }
    137 
    138  template <typename L2>
    @@ -420,15 +420,16 @@ $(function() {
    431 
    432 #endif
    -
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:529
    +
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:583
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    A lightweight object that interprets memory as a 2D array of pixels. Models ImageViewConcept,...
    Definition: image_view.hpp:53
    Provides 1D random-access navigation to the pixels of the image. Models: PixelIteratorConcept,...
    Definition: iterator_from_2d.hpp:42
    auto back() const -> reference
    Returns a reference to the last element in raster order.
    Definition: image_view.hpp:205
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    void swap(image_view< Loc > &other)
    Exchanges the elements of the current view with those of other in constant time.
    Definition: image_view.hpp:146
    Returns an integral constant type specifying the number of elements in a color base.
    Definition: color_base_algorithm.hpp:42
    bool empty() const
    Returns true if the view has no elements, false otherwise.
    Definition: image_view.hpp:186
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    auto front() const -> reference
    Returns a reference to the first element in raster order.
    Definition: image_view.hpp:195
    diff --git a/html/reference/image__view__factory_8hpp_source.html b/html/reference/image__view__factory_8hpp_source.html index 6cc40b892..2eda0fd56 100644 --- a/html/reference/image__view__factory_8hpp_source.html +++ b/html/reference/image__view__factory_8hpp_source.html @@ -73,7 +73,7 @@ $(function() {
    27 
    31 
    35 
    -
    36 namespace boost { namespace gil {
    +
    36 namespace boost { namespace gil {
    37 
    38 struct default_color_converter;
    39 
    @@ -88,463 +88,491 @@ $(function() {
    52  : dynamic_xy_step_type<typename transposed_type<View>::type> {};
    53 
    56 template <typename Iterator>
    - -
    58 interleaved_view(std::size_t width, std::size_t height,
    -
    59  Iterator pixels, std::ptrdiff_t rowsize_in_bytes) {
    -
    60  using RView = typename type_from_x_iterator<Iterator>::view_t;
    -
    61  return RView(width, height, typename RView::locator(pixels, rowsize_in_bytes));
    -
    62 }
    -
    63 
    -
    66 template <typename Iterator>
    -
    67 auto interleaved_view(point<std::ptrdiff_t> dim, Iterator pixels,
    -
    68  std::ptrdiff_t rowsize_in_bytes)
    - -
    70 {
    -
    71  using RView = typename type_from_x_iterator<Iterator>::view_t;
    -
    72  return RView(dim, typename RView::locator(pixels, rowsize_in_bytes));
    -
    73 }
    -
    74 
    -
    76 // interleaved_view_get_raw_data, planar_view_get_raw_data - return pointers to the raw data (the channels) of a basic homogeneous view.
    -
    78 
    -
    79 namespace detail {
    -
    80  template <typename View, bool IsMutable> struct channel_pointer_type_impl;
    -
    81 
    -
    82  template <typename View> struct channel_pointer_type_impl<View, true> {
    -
    83  using type = typename channel_type<View>::type *;
    -
    84  };
    -
    85  template <typename View> struct channel_pointer_type_impl<View, false> {
    -
    86  using type = const typename channel_type<View>::type *;
    -
    87  };
    -
    88 
    -
    89  template <typename View> struct channel_pointer_type
    -
    90  : public channel_pointer_type_impl<View, view_is_mutable<View>::value> {};
    -
    91 } // namespace detail
    -
    92 
    -
    95 template <typename HomogeneousView>
    -
    96 typename detail::channel_pointer_type<HomogeneousView>::type interleaved_view_get_raw_data(const HomogeneousView& view) {
    -
    97  static_assert(!is_planar<HomogeneousView>::value && view_is_basic<HomogeneousView>::value, "");
    -
    98  static_assert(std::is_pointer<typename HomogeneousView::x_iterator>::value, "");
    -
    99 
    -
    100  return &gil::at_c<0>(view(0,0));
    -
    101 }
    + +
    58  std::size_t width, std::size_t height,
    +
    59  Iterator pixels, std::ptrdiff_t rowsize_in_bytes)
    + +
    61 {
    +
    62  using RView = typename type_from_x_iterator<Iterator>::view_t;
    +
    63  return RView(width, height, typename RView::locator(pixels, rowsize_in_bytes));
    +
    64 }
    +
    65 
    +
    68 template <typename Iterator>
    + +
    70  point<std::ptrdiff_t> dim, Iterator pixels,
    +
    71  std::ptrdiff_t rowsize_in_bytes)
    + +
    73 {
    +
    74  using RView = typename type_from_x_iterator<Iterator>::view_t;
    +
    75  return RView(dim, typename RView::locator(pixels, rowsize_in_bytes));
    +
    76 }
    +
    77 
    +
    79 // interleaved_view_get_raw_data, planar_view_get_raw_data - return pointers to the raw data (the channels) of a basic homogeneous view.
    +
    81 
    +
    82 namespace detail {
    +
    83  template <typename View, bool IsMutable>
    +
    84  struct channel_pointer_type_impl;
    +
    85 
    +
    86  template <typename View>
    +
    87  struct channel_pointer_type_impl<View, true>
    +
    88  {
    +
    89  using type = typename channel_type<View>::type*;
    +
    90  };
    +
    91 
    +
    92  template <typename View>
    +
    93  struct channel_pointer_type_impl<View, false>
    +
    94  {
    +
    95  using type = const typename channel_type<View>::type*;
    +
    96  };
    +
    97 
    +
    98  template <typename View>
    +
    99  struct channel_pointer_type
    +
    100  : public channel_pointer_type_impl<View, view_is_mutable<View>::value> {};
    +
    101 } // namespace detail
    102 
    105 template <typename HomogeneousView>
    -
    106 typename detail::channel_pointer_type<HomogeneousView>::type planar_view_get_raw_data(const HomogeneousView& view, int plane_index) {
    -
    107  static_assert(is_planar<HomogeneousView>::value && view_is_basic<HomogeneousView>::value, "");
    -
    108  return dynamic_at_c(view.row_begin(0),plane_index);
    -
    109 }
    -
    110 
    +
    106 auto interleaved_view_get_raw_data(HomogeneousView const& view)
    +
    107  -> typename detail::channel_pointer_type<HomogeneousView>::type
    +
    108 {
    +
    109  static_assert(!is_planar<HomogeneousView>::value && view_is_basic<HomogeneousView>::value, "");
    +
    110  static_assert(std::is_pointer<typename HomogeneousView::x_iterator>::value, "");
    111 
    -
    115 
    -
    120 template <typename SrcConstRefP, typename DstP, typename CC=default_color_converter > // const_reference to the source pixel and destination pixel value
    -
    121 class color_convert_deref_fn : public deref_base<color_convert_deref_fn<SrcConstRefP,DstP,CC>, DstP, DstP, const DstP&, SrcConstRefP, DstP, false> {
    -
    122 private:
    -
    123  CC _cc; // color-converter
    -
    124 public:
    - -
    126  color_convert_deref_fn(CC cc_in) : _cc(cc_in) {}
    -
    127 
    -
    128  DstP operator()(SrcConstRefP srcP) const {
    -
    129  DstP dstP;
    -
    130  _cc(srcP,dstP);
    -
    131  return dstP;
    -
    132  }
    -
    133 };
    -
    134 
    -
    135 namespace detail {
    -
    136  // Add color converter upon dereferencing
    -
    137  template <typename SrcView, typename CC, typename DstP, typename SrcP>
    -
    138  struct _color_converted_view_type {
    -
    139  private:
    - -
    141  using add_ref_t = typename SrcView::template add_deref<deref_t>;
    -
    142  public:
    -
    143  using type = typename add_ref_t::type;
    -
    144  static type make(const SrcView& sv,CC cc) {return add_ref_t::make(sv,deref_t(cc));}
    -
    145  };
    -
    146 
    -
    147  // If the Src view has the same pixel type as the target, there is no need for color conversion
    -
    148  template <typename SrcView, typename CC, typename DstP>
    -
    149  struct _color_converted_view_type<SrcView,CC,DstP,DstP> {
    -
    150  using type = SrcView;
    -
    151  static type make(const SrcView& sv,CC) {return sv;}
    -
    152  };
    -
    153 } // namespace detail
    -
    154 
    -
    155 
    -
    158 template <typename SrcView, typename DstP, typename CC=default_color_converter>
    -
    159 struct color_converted_view_type : public detail::_color_converted_view_type<SrcView,
    -
    160  CC,
    -
    161  DstP,
    -
    162  typename SrcView::value_type> {
    -
    163  BOOST_GIL_CLASS_REQUIRE(DstP, boost::gil, MutablePixelConcept)//why does it have to be mutable???
    -
    164 };
    -
    165 
    -
    166 
    -
    169 template <typename DstP, typename View, typename CC>
    - - -
    172 }
    -
    173 
    -
    176 template <typename DstP, typename View>
    -
    177 inline typename color_converted_view_type<View,DstP>::type
    -
    178 color_converted_view(const View& src) {
    -
    179  return color_converted_view<DstP>(src,default_color_converter());
    -
    180 }
    -
    181 
    -
    185 
    -
    187 template <typename View>
    -
    188 inline typename dynamic_y_step_type<View>::type flipped_up_down_view(const View& src) {
    -
    189  using RView = typename dynamic_y_step_type<View>::type;
    -
    190  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(0,src.height()-1),-1));
    -
    191 }
    -
    192 
    -
    196 
    -
    198 template <typename View>
    - -
    200  using RView = typename dynamic_x_step_type<View>::type;
    -
    201  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(src.width()-1,0),-1,1));
    -
    202 }
    -
    203 
    -
    207 
    -
    209 template <typename View>
    - -
    211  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    -
    212  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(0,0),1,1,true));
    -
    213 }
    -
    214 
    -
    218 
    -
    220 template <typename View>
    - -
    222  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    -
    223  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(0,src.height()-1),-1,1,true));
    -
    224 }
    -
    225 
    -
    229 
    -
    231 template <typename View>
    - -
    233  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    -
    234  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(src.width()-1,0),1,-1,true));
    -
    235 }
    -
    236 
    -
    240 
    -
    242 template <typename View>
    -
    243 inline typename dynamic_xy_step_type<View>::type rotated180_view(const View& src) {
    -
    244  using RView = typename dynamic_xy_step_type<View>::type;
    -
    245  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(src.width()-1,src.height()-1),-1,-1));
    -
    246 }
    -
    247 
    -
    251 
    -
    253 template <typename View>
    -
    254 inline View subimage_view(
    -
    255  View const& src,
    -
    256  typename View::point_t const& topleft,
    -
    257  typename View::point_t const& dimensions)
    -
    258 {
    -
    259  return View(dimensions, src.xy_at(topleft));
    -
    260 }
    -
    261 
    -
    263 template <typename View>
    -
    264 inline View subimage_view(View const& src,
    -
    265  typename View::coord_t x_min,
    -
    266  typename View::coord_t y_min,
    -
    267  typename View::coord_t width,
    -
    268  typename View::coord_t height)
    -
    269 {
    -
    270  return View(width, height, src.xy_at(x_min, y_min));
    -
    271 }
    -
    272 
    +
    112  return &gil::at_c<0>(view(0,0));
    +
    113 }
    +
    114 
    +
    117 template <typename HomogeneousView>
    +
    118 auto planar_view_get_raw_data(HomogeneousView const& view, int plane_index)
    +
    119  -> typename detail::channel_pointer_type<HomogeneousView>::type
    +
    120 {
    +
    121  static_assert(is_planar<HomogeneousView>::value && view_is_basic<HomogeneousView>::value, "");
    +
    122  return dynamic_at_c(view.row_begin(0),plane_index);
    +
    123 }
    +
    124 
    +
    125 
    +
    129 
    +
    134 template <typename SrcConstRefP, typename DstP, typename CC=default_color_converter > // const_reference to the source pixel and destination pixel value
    +
    135 class color_convert_deref_fn : public deref_base<color_convert_deref_fn<SrcConstRefP,DstP,CC>, DstP, DstP, const DstP&, SrcConstRefP, DstP, false> {
    +
    136 private:
    +
    137  CC _cc; // color-converter
    +
    138 public:
    + +
    140  color_convert_deref_fn(CC cc_in) : _cc(cc_in) {}
    +
    141 
    +
    142  DstP operator()(SrcConstRefP srcP) const {
    +
    143  DstP dstP;
    +
    144  _cc(srcP,dstP);
    +
    145  return dstP;
    +
    146  }
    +
    147 };
    +
    148 
    +
    149 namespace detail {
    +
    150  // Add color converter upon dereferencing
    +
    151  template <typename SrcView, typename CC, typename DstP, typename SrcP>
    +
    152  struct _color_converted_view_type {
    +
    153  private:
    + +
    155  using add_ref_t = typename SrcView::template add_deref<deref_t>;
    +
    156  public:
    +
    157  using type = typename add_ref_t::type;
    +
    158  static type make(const SrcView& sv,CC cc) {return add_ref_t::make(sv,deref_t(cc));}
    +
    159  };
    +
    160 
    +
    161  // If the Src view has the same pixel type as the target, there is no need for color conversion
    +
    162  template <typename SrcView, typename CC, typename DstP>
    +
    163  struct _color_converted_view_type<SrcView,CC,DstP,DstP> {
    +
    164  using type = SrcView;
    +
    165  static type make(const SrcView& sv,CC) {return sv;}
    +
    166  };
    +
    167 } // namespace detail
    +
    168 
    +
    169 
    +
    172 template <typename SrcView, typename DstP, typename CC=default_color_converter>
    +
    173 struct color_converted_view_type : public detail::_color_converted_view_type<SrcView,
    +
    174  CC,
    +
    175  DstP,
    +
    176  typename SrcView::value_type> {
    +
    177  BOOST_GIL_CLASS_REQUIRE(DstP, boost::gil, MutablePixelConcept)//why does it have to be mutable???
    +
    178 };
    +
    179 
    +
    180 
    +
    183 template <typename DstP, typename View, typename CC>
    +
    184 inline auto color_converted_view(View const& src,CC cc)
    + +
    186 {
    + +
    188 }
    +
    189 
    +
    192 template <typename DstP, typename View>
    +
    193 inline auto color_converted_view(View const& src)
    +
    194  -> typename color_converted_view_type<View,DstP>::type
    +
    195 {
    +
    196  return color_converted_view<DstP>(src,default_color_converter());
    +
    197 }
    +
    198 
    +
    202 
    +
    204 template <typename View>
    +
    205 inline auto flipped_up_down_view(View const& src)
    + +
    207 {
    +
    208  using RView = typename dynamic_y_step_type<View>::type;
    +
    209  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(0,src.height()-1),-1));
    +
    210 }
    +
    211 
    +
    215 
    +
    217 template <typename View>
    +
    218 inline auto flipped_left_right_view(View const& src)
    + +
    220 {
    +
    221  using RView = typename dynamic_x_step_type<View>::type;
    +
    222  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(src.width()-1,0),-1,1));
    +
    223 }
    +
    224 
    +
    228 
    +
    230 template <typename View>
    +
    231 inline auto transposed_view(View const& src)
    + +
    233 {
    +
    234  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    +
    235  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(0,0),1,1,true));
    +
    236 }
    +
    237 
    +
    241 
    +
    243 template <typename View>
    +
    244 inline auto rotated90cw_view(View const& src)
    + +
    246 {
    +
    247  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    +
    248  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(0,src.height()-1),-1,1,true));
    +
    249 }
    +
    250 
    +
    254 
    +
    256 template <typename View>
    +
    257 inline auto rotated90ccw_view(View const& src)
    + +
    259 {
    +
    260  using RView = typename dynamic_xy_step_transposed_type<View>::type;
    +
    261  return RView(src.height(),src.width(),typename RView::xy_locator(src.xy_at(src.width()-1,0),1,-1,true));
    +
    262 }
    +
    263 
    +
    267 
    +
    269 template <typename View>
    +
    270 inline auto rotated180_view(View const& src)
    + +
    272 {
    +
    273  using RView = typename dynamic_xy_step_type<View>::type;
    +
    274  return RView(src.dimensions(),typename RView::xy_locator(src.xy_at(src.width()-1,src.height()-1),-1,-1));
    +
    275 }
    276 
    -
    278 template <typename View>
    -
    279 inline
    -
    280 auto subsampled_view(View const& src, typename View::coord_t x_step, typename View::coord_t y_step)
    - -
    282 {
    -
    283  BOOST_ASSERT(x_step > 0 && y_step > 0);
    -
    284  using view_t =typename dynamic_xy_step_type<View>::type;
    -
    285  return view_t(
    -
    286  (src.width() + (x_step - 1)) / x_step,
    -
    287  (src.height() + (y_step - 1)) / y_step,
    -
    288  typename view_t::xy_locator(src.xy_at(0,0), x_step, y_step));
    +
    280 
    +
    282 template <typename View>
    +
    283 inline View subimage_view(
    +
    284  View const& src,
    +
    285  typename View::point_t const& topleft,
    +
    286  typename View::point_t const& dimensions)
    +
    287 {
    +
    288  return View(dimensions, src.xy_at(topleft));
    289 }
    290 
    292 template <typename View>
    -
    293 inline auto subsampled_view(View const& src, typename View::point_t const& step)
    - -
    295 {
    -
    296  return subsampled_view(src, step.x, step.y);
    -
    297 }
    -
    298 
    -
    302 
    -
    303 namespace detail {
    -
    304  template <typename View, bool AreChannelsTogether> struct __nth_channel_view_basic;
    +
    293 inline View subimage_view(View const& src,
    +
    294  typename View::coord_t x_min,
    +
    295  typename View::coord_t y_min,
    +
    296  typename View::coord_t width,
    +
    297  typename View::coord_t height)
    +
    298 {
    +
    299  return View(width, height, src.xy_at(x_min, y_min));
    +
    300 }
    +
    301 
    305 
    -
    306  // nth_channel_view when the channels are not adjacent in memory. This can happen for multi-channel interleaved images
    -
    307  // or images with a step
    -
    308  template <typename View>
    -
    309  struct __nth_channel_view_basic<View,false> {
    -
    310  using type = typename view_type<typename channel_type<View>::type, gray_layout_t, false, true, view_is_mutable<View>::value>::type;
    -
    311 
    -
    312  static type make(const View& src, int n) {
    -
    313  using locator_t = typename type::xy_locator;
    -
    314  using x_iterator_t = typename type::x_iterator;
    -
    315  using x_iterator_base_t = typename iterator_adaptor_get_base<x_iterator_t>::type;
    -
    316  x_iterator_t sit(x_iterator_base_t(&(src(0,0)[n])),src.pixels().pixel_size());
    -
    317  return type(src.dimensions(),locator_t(sit, src.pixels().row_size()));
    -
    318  }
    -
    319  };
    -
    320 
    -
    321  // nth_channel_view when the channels are together in memory (true for simple grayscale or planar images)
    -
    322  template <typename View>
    -
    323  struct __nth_channel_view_basic<View,true> {
    -
    324  using type = typename view_type<typename channel_type<View>::type, gray_layout_t, false, false, view_is_mutable<View>::value>::type;
    -
    325  static type make(const View& src, int n) {
    -
    326  using x_iterator_t = typename type::x_iterator;
    -
    327  return interleaved_view(src.width(),src.height(),(x_iterator_t)&(src(0,0)[n]), src.pixels().row_size());
    -
    328  }
    -
    329  };
    -
    330 
    -
    331  template <typename View, bool IsBasic> struct __nth_channel_view;
    -
    332 
    -
    333  // For basic (memory-based) views dispatch to __nth_channel_view_basic
    -
    334  template <typename View>
    -
    335  struct __nth_channel_view<View,true>
    -
    336  {
    -
    337  private:
    -
    338  using src_x_iterator = typename View::x_iterator;
    -
    339 
    -
    340  // Determines whether the channels of a given pixel iterator are adjacent in memory.
    -
    341  // Planar and grayscale iterators have channels adjacent in memory, whereas multi-channel interleaved and iterators with non-fundamental step do not.
    -
    342  static constexpr bool adjacent =
    -
    343  !iterator_is_step<src_x_iterator>::value &&
    -
    344  (is_planar<src_x_iterator>::value || num_channels<View>::value == 1);
    -
    345 
    -
    346  public:
    -
    347  using type = typename __nth_channel_view_basic<View,adjacent>::type;
    -
    348 
    -
    349  static type make(const View& src, int n) {
    -
    350  return __nth_channel_view_basic<View,adjacent>::make(src,n);
    -
    351  }
    -
    352  };
    -
    353 
    -
    358  template <typename SrcP> // SrcP is a reference to PixelConcept (could be pixel value or const/non-const reference)
    -
    359  // Examples: pixel<T,L>, pixel<T,L>&, const pixel<T,L>&, planar_pixel_reference<T&,L>, planar_pixel_reference<const T&,L>
    - -
    361  {
    -
    362  static constexpr bool is_mutable =
    - -
    364  private:
    -
    365  using src_pixel_t = typename std::remove_reference<SrcP>::type;
    -
    366  using channel_t = typename channel_type<src_pixel_t>::type;
    -
    367  using const_ref_t = typename src_pixel_t::const_reference;
    - -
    369  public:
    - -
    371  using value_type = typename pixel_value_type<channel_t,gray_layout_t>::type;
    - -
    373  using argument_type = SrcP;
    -
    374  using reference = mp11::mp_if_c<is_mutable, ref_t, value_type>;
    -
    375  using result_type = reference;
    -
    376 
    -
    377  nth_channel_deref_fn(int n=0) : _n(n) {}
    -
    378  template <typename P> nth_channel_deref_fn(const nth_channel_deref_fn<P>& d) : _n(d._n) {}
    -
    379 
    -
    380  int _n; // the channel to use
    -
    381 
    -
    382  result_type operator()(argument_type srcP) const {
    -
    383  return result_type(srcP[_n]);
    -
    384  }
    -
    385  };
    -
    386 
    -
    387  template <typename View> struct __nth_channel_view<View,false> {
    -
    388  private:
    - -
    390  using AD = typename View::template add_deref<deref_t>;
    -
    391  public:
    -
    392  using type = typename AD::type;
    -
    393  static type make(const View& src, int n) {
    -
    394  return AD::make(src, deref_t(n));
    -
    395  }
    -
    396  };
    -
    397 } // namespace detail
    -
    398 
    -
    405 template <typename View>
    - -
    407 private:
    -
    408  BOOST_GIL_CLASS_REQUIRE(View, boost::gil, ImageViewConcept)
    -
    409  using VB = detail::__nth_channel_view<View,view_is_basic<View>::value>;
    -
    410 public:
    -
    411  using type = typename VB::type;
    -
    412  static type make(const View& src, int n) { return VB::make(src,n); }
    -
    413 };
    -
    414 
    -
    415 
    -
    417 template <typename View>
    -
    418 typename nth_channel_view_type<View>::type nth_channel_view(const View& src, int n) {
    -
    419  return nth_channel_view_type<View>::make(src,n);
    -
    420 }
    -
    421 
    -
    422 
    -
    423 
    -
    424 
    -
    425 
    -
    426 
    -
    427 
    -
    431 
    -
    432 namespace detail {
    -
    433  template <int K, typename View, bool AreChannelsTogether> struct __kth_channel_view_basic;
    -
    434 
    -
    435  // kth_channel_view when the channels are not adjacent in memory. This can happen for multi-channel interleaved images
    -
    436  // or images with a step
    -
    437  template <int K, typename View>
    -
    438  struct __kth_channel_view_basic<K,View,false> {
    -
    439  private:
    -
    440  using channel_t = typename kth_element_type<typename View::value_type,K>::type;
    -
    441  public:
    -
    442  using type = typename view_type<channel_t, gray_layout_t, false, true, view_is_mutable<View>::value>::type;
    -
    443 
    -
    444  static type make(const View& src) {
    -
    445  using locator_t = typename type::xy_locator;
    -
    446  using x_iterator_t = typename type::x_iterator;
    -
    447  using x_iterator_base_t = typename iterator_adaptor_get_base<x_iterator_t>::type;
    -
    448  x_iterator_t sit(x_iterator_base_t(&gil::at_c<K>(src(0,0))),src.pixels().pixel_size());
    -
    449  return type(src.dimensions(),locator_t(sit, src.pixels().row_size()));
    -
    450  }
    -
    451  };
    -
    452 
    -
    453  // kth_channel_view when the channels are together in memory (true for simple grayscale or planar images)
    -
    454  template <int K, typename View>
    -
    455  struct __kth_channel_view_basic<K,View,true> {
    -
    456  private:
    -
    457  using channel_t = typename kth_element_type<typename View::value_type, K>::type;
    -
    458  public:
    -
    459  using type = typename view_type<channel_t, gray_layout_t, false, false, view_is_mutable<View>::value>::type;
    -
    460  static type make(const View& src) {
    -
    461  using x_iterator_t = typename type::x_iterator;
    -
    462  return interleaved_view(src.width(),src.height(),(x_iterator_t)&gil::at_c<K>(src(0,0)), src.pixels().row_size());
    -
    463  }
    -
    464  };
    -
    465 
    -
    466  template <int K, typename View, bool IsBasic> struct __kth_channel_view;
    +
    307 template <typename View>
    +
    308 inline
    +
    309 auto subsampled_view(View const& src, typename View::coord_t x_step, typename View::coord_t y_step)
    + +
    311 {
    +
    312  BOOST_ASSERT(x_step > 0 && y_step > 0);
    +
    313  using view_t =typename dynamic_xy_step_type<View>::type;
    +
    314  return view_t(
    +
    315  (src.width() + (x_step - 1)) / x_step,
    +
    316  (src.height() + (y_step - 1)) / y_step,
    +
    317  typename view_t::xy_locator(src.xy_at(0,0), x_step, y_step));
    +
    318 }
    +
    319 
    +
    321 template <typename View>
    +
    322 inline auto subsampled_view(View const& src, typename View::point_t const& step)
    + +
    324 {
    +
    325  return subsampled_view(src, step.x, step.y);
    +
    326 }
    +
    327 
    +
    331 
    +
    332 namespace detail {
    +
    333  template <typename View, bool AreChannelsTogether> struct __nth_channel_view_basic;
    +
    334 
    +
    335  // nth_channel_view when the channels are not adjacent in memory. This can happen for multi-channel interleaved images
    +
    336  // or images with a step
    +
    337  template <typename View>
    +
    338  struct __nth_channel_view_basic<View,false> {
    +
    339  using type = typename view_type<typename channel_type<View>::type, gray_layout_t, false, true, view_is_mutable<View>::value>::type;
    +
    340 
    +
    341  static type make(View const& src, int n) {
    +
    342  using locator_t = typename type::xy_locator;
    +
    343  using x_iterator_t = typename type::x_iterator;
    +
    344  using x_iterator_base_t = typename iterator_adaptor_get_base<x_iterator_t>::type;
    +
    345  x_iterator_t sit(x_iterator_base_t(&(src(0,0)[n])),src.pixels().pixel_size());
    +
    346  return type(src.dimensions(),locator_t(sit, src.pixels().row_size()));
    +
    347  }
    +
    348  };
    +
    349 
    +
    350  // nth_channel_view when the channels are together in memory (true for simple grayscale or planar images)
    +
    351  template <typename View>
    +
    352  struct __nth_channel_view_basic<View,true> {
    +
    353  using type = typename view_type<typename channel_type<View>::type, gray_layout_t, false, false, view_is_mutable<View>::value>::type;
    +
    354  static type make(View const& src, int n) {
    +
    355  using x_iterator_t = typename type::x_iterator;
    +
    356  return interleaved_view(src.width(),src.height(),(x_iterator_t)&(src(0,0)[n]), src.pixels().row_size());
    +
    357  }
    +
    358  };
    +
    359 
    +
    360  template <typename View, bool IsBasic> struct __nth_channel_view;
    +
    361 
    +
    362  // For basic (memory-based) views dispatch to __nth_channel_view_basic
    +
    363  template <typename View>
    +
    364  struct __nth_channel_view<View,true>
    +
    365  {
    +
    366  private:
    +
    367  using src_x_iterator = typename View::x_iterator;
    +
    368 
    +
    369  // Determines whether the channels of a given pixel iterator are adjacent in memory.
    +
    370  // Planar and grayscale iterators have channels adjacent in memory, whereas multi-channel interleaved and iterators with non-fundamental step do not.
    +
    371  static constexpr bool adjacent =
    +
    372  !iterator_is_step<src_x_iterator>::value &&
    +
    373  (is_planar<src_x_iterator>::value || num_channels<View>::value == 1);
    +
    374 
    +
    375  public:
    +
    376  using type = typename __nth_channel_view_basic<View,adjacent>::type;
    +
    377 
    +
    378  static type make(View const& src, int n) {
    +
    379  return __nth_channel_view_basic<View,adjacent>::make(src,n);
    +
    380  }
    +
    381  };
    +
    382 
    +
    387  template <typename SrcP> // SrcP is a reference to PixelConcept (could be pixel value or const/non-const reference)
    +
    388  // Examples: pixel<T,L>, pixel<T,L>&, const pixel<T,L>&, planar_pixel_reference<T&,L>, planar_pixel_reference<const T&,L>
    + +
    390  {
    +
    391  static constexpr bool is_mutable =
    + +
    393  private:
    +
    394  using src_pixel_t = typename std::remove_reference<SrcP>::type;
    +
    395  using channel_t = typename channel_type<src_pixel_t>::type;
    +
    396  using const_ref_t = typename src_pixel_t::const_reference;
    + +
    398  public:
    + +
    400  using value_type = typename pixel_value_type<channel_t,gray_layout_t>::type;
    + +
    402  using argument_type = SrcP;
    +
    403  using reference = mp11::mp_if_c<is_mutable, ref_t, value_type>;
    +
    404  using result_type = reference;
    +
    405 
    +
    406  nth_channel_deref_fn(int n=0) : _n(n) {}
    +
    407  template <typename P>
    +
    408  nth_channel_deref_fn(const nth_channel_deref_fn<P>& d) : _n(d._n) {}
    +
    409 
    +
    410  int _n; // the channel to use
    +
    411 
    +
    412  auto operator()(argument_type srcP) const -> result_type
    +
    413  {
    +
    414  return result_type(srcP[_n]);
    +
    415  }
    +
    416  };
    +
    417 
    +
    418  template <typename View> struct __nth_channel_view<View,false> {
    +
    419  private:
    + +
    421  using AD = typename View::template add_deref<deref_t>;
    +
    422  public:
    +
    423  using type = typename AD::type;
    +
    424  static type make(View const& src, int n) {
    +
    425  return AD::make(src, deref_t(n));
    +
    426  }
    +
    427  };
    +
    428 } // namespace detail
    +
    429 
    +
    436 template <typename View>
    + +
    438 private:
    +
    439  BOOST_GIL_CLASS_REQUIRE(View, boost::gil, ImageViewConcept)
    +
    440  using VB = detail::__nth_channel_view<View,view_is_basic<View>::value>;
    +
    441 public:
    +
    442  using type = typename VB::type;
    +
    443  static type make(View const& src, int n) { return VB::make(src,n); }
    +
    444 };
    +
    445 
    +
    447 template <typename View>
    +
    448 typename nth_channel_view_type<View>::type nth_channel_view(View const& src, int n) {
    +
    449  return nth_channel_view_type<View>::make(src,n);
    +
    450 }
    +
    451 
    +
    455 
    +
    456 namespace detail {
    +
    457  template <int K, typename View, bool AreChannelsTogether> struct __kth_channel_view_basic;
    +
    458 
    +
    459  // kth_channel_view when the channels are not adjacent in memory. This can happen for multi-channel interleaved images
    +
    460  // or images with a step
    +
    461  template <int K, typename View>
    +
    462  struct __kth_channel_view_basic<K,View,false> {
    +
    463  private:
    +
    464  using channel_t = typename kth_element_type<typename View::value_type,K>::type;
    +
    465  public:
    +
    466  using type = typename view_type<channel_t, gray_layout_t, false, true, view_is_mutable<View>::value>::type;
    467 
    -
    468  // For basic (memory-based) views dispatch to __kth_channel_view_basic
    -
    469  template <int K, typename View> struct __kth_channel_view<K,View,true>
    -
    470  {
    -
    471  private:
    -
    472  using src_x_iterator = typename View::x_iterator;
    -
    473 
    -
    474  // Determines whether the channels of a given pixel iterator are adjacent in memory.
    -
    475  // Planar and grayscale iterators have channels adjacent in memory, whereas multi-channel interleaved and iterators with non-fundamental step do not.
    -
    476  static constexpr bool adjacent =
    -
    477  !iterator_is_step<src_x_iterator>::value &&
    -
    478  (is_planar<src_x_iterator>::value || num_channels<View>::value == 1);
    -
    479 
    -
    480  public:
    -
    481  using type = typename __kth_channel_view_basic<K,View,adjacent>::type;
    -
    482 
    -
    483  static type make(const View& src) {
    -
    484  return __kth_channel_view_basic<K,View,adjacent>::make(src);
    -
    485  }
    -
    486  };
    -
    487 
    -
    494  template <int K, typename SrcP>
    - -
    496  {
    -
    497  static constexpr bool is_mutable =
    - -
    499 
    -
    500  private:
    -
    501  using src_pixel_t = typename std::remove_reference<SrcP>::type;
    -
    502  using channel_t = typename kth_element_type<src_pixel_t, K>::type;
    -
    503  using const_ref_t = typename src_pixel_t::const_reference;
    - -
    505 
    -
    506  public:
    - -
    508  using value_type = typename pixel_value_type<channel_t,gray_layout_t>::type;
    - -
    510  using argument_type = SrcP;
    -
    511  using reference = mp11::mp_if_c<is_mutable, ref_t, value_type>;
    -
    512  using result_type = reference;
    -
    513 
    - -
    515  template <typename P> kth_channel_deref_fn(const kth_channel_deref_fn<K,P>&) {}
    -
    516 
    -
    517  result_type operator()(argument_type srcP) const {
    -
    518  return result_type(gil::at_c<K>(srcP));
    -
    519  }
    -
    520  };
    -
    521 
    -
    522  template <int K, typename View> struct __kth_channel_view<K,View,false> {
    -
    523  private:
    - -
    525  using AD = typename View::template add_deref<deref_t>;
    -
    526  public:
    -
    527  using type = typename AD::type;
    -
    528  static type make(const View& src) {
    -
    529  return AD::make(src, deref_t());
    -
    530  }
    -
    531  };
    -
    532 } // namespace detail
    -
    533 
    -
    540 template <int K, typename View>
    - -
    542 private:
    -
    543  BOOST_GIL_CLASS_REQUIRE(View, boost::gil, ImageViewConcept)
    -
    544  using VB = detail::__kth_channel_view<K,View,view_is_basic<View>::value>;
    -
    545 public:
    -
    546  using type = typename VB::type;
    -
    547  static type make(const View& src) { return VB::make(src); }
    -
    548 };
    -
    549 
    -
    551 template <int K, typename View>
    -
    552 typename kth_channel_view_type<K,View>::type kth_channel_view(const View& src) {
    - -
    554 }
    -
    555 
    -
    556 } } // namespace boost::gil
    -
    557 
    -
    558 #endif
    +
    468  static type make(View const& src) {
    +
    469  using locator_t = typename type::xy_locator;
    +
    470  using x_iterator_t = typename type::x_iterator;
    +
    471  using x_iterator_base_t = typename iterator_adaptor_get_base<x_iterator_t>::type;
    +
    472  x_iterator_t sit(x_iterator_base_t(&gil::at_c<K>(src(0,0))),src.pixels().pixel_size());
    +
    473  return type(src.dimensions(),locator_t(sit, src.pixels().row_size()));
    +
    474  }
    +
    475  };
    +
    476 
    +
    477  // kth_channel_view when the channels are together in memory (true for simple grayscale or planar images)
    +
    478  template <int K, typename View>
    +
    479  struct __kth_channel_view_basic<K,View,true> {
    +
    480  private:
    +
    481  using channel_t = typename kth_element_type<typename View::value_type, K>::type;
    +
    482  public:
    +
    483  using type = typename view_type<channel_t, gray_layout_t, false, false, view_is_mutable<View>::value>::type;
    +
    484  static type make(View const& src) {
    +
    485  using x_iterator_t = typename type::x_iterator;
    +
    486  return interleaved_view(src.width(),src.height(),(x_iterator_t)&gil::at_c<K>(src(0,0)), src.pixels().row_size());
    +
    487  }
    +
    488  };
    +
    489 
    +
    490  template <int K, typename View, bool IsBasic> struct __kth_channel_view;
    +
    491 
    +
    492  // For basic (memory-based) views dispatch to __kth_channel_view_basic
    +
    493  template <int K, typename View> struct __kth_channel_view<K,View,true>
    +
    494  {
    +
    495  private:
    +
    496  using src_x_iterator = typename View::x_iterator;
    +
    497 
    +
    498  // Determines whether the channels of a given pixel iterator are adjacent in memory.
    +
    499  // Planar and grayscale iterators have channels adjacent in memory, whereas multi-channel interleaved and iterators with non-fundamental step do not.
    +
    500  static constexpr bool adjacent =
    +
    501  !iterator_is_step<src_x_iterator>::value &&
    +
    502  (is_planar<src_x_iterator>::value || num_channels<View>::value == 1);
    +
    503 
    +
    504  public:
    +
    505  using type = typename __kth_channel_view_basic<K,View,adjacent>::type;
    +
    506 
    +
    507  static type make(View const& src) {
    +
    508  return __kth_channel_view_basic<K,View,adjacent>::make(src);
    +
    509  }
    +
    510  };
    +
    511 
    +
    518  template <int K, typename SrcP>
    + +
    520  {
    +
    521  static constexpr bool is_mutable =
    + +
    523 
    +
    524  private:
    +
    525  using src_pixel_t = typename std::remove_reference<SrcP>::type;
    +
    526  using channel_t = typename kth_element_type<src_pixel_t, K>::type;
    +
    527  using const_ref_t = typename src_pixel_t::const_reference;
    + +
    529 
    +
    530  public:
    + +
    532  using value_type = typename pixel_value_type<channel_t,gray_layout_t>::type;
    + +
    534  using argument_type = SrcP;
    +
    535  using reference = mp11::mp_if_c<is_mutable, ref_t, value_type>;
    +
    536  using result_type = reference;
    +
    537 
    + +
    539  template <typename P>
    + +
    541 
    +
    542  result_type operator()(argument_type srcP) const {
    +
    543  return result_type(gil::at_c<K>(srcP));
    +
    544  }
    +
    545  };
    +
    546 
    +
    547  template <int K, typename View> struct __kth_channel_view<K,View,false> {
    +
    548  private:
    + +
    550  using AD = typename View::template add_deref<deref_t>;
    +
    551  public:
    +
    552  using type = typename AD::type;
    +
    553  static type make(View const& src) {
    +
    554  return AD::make(src, deref_t());
    +
    555  }
    +
    556  };
    +
    557 } // namespace detail
    +
    558 
    +
    565 template <int K, typename View>
    + +
    567 private:
    +
    568  BOOST_GIL_CLASS_REQUIRE(View, boost::gil, ImageViewConcept)
    +
    569  using VB = detail::__kth_channel_view<K,View,view_is_basic<View>::value>;
    +
    570 public:
    +
    571  using type = typename VB::type;
    +
    572  static type make(View const& src) { return VB::make(src); }
    +
    573 };
    +
    574 
    +
    576 template <int K, typename View>
    +
    577 auto kth_channel_view(View const& src)
    +
    578  -> typename kth_channel_view_type<K,View>::type
    +
    579 {
    + +
    581 }
    +
    582 
    +
    583 } } // namespace boost::gil
    +
    584 
    +
    585 #endif
    -
    dynamic_xy_step_transposed_type< View >::type rotated90ccw_view(const View &src)
    Definition: image_view_factory.hpp:232
    -
    auto subsampled_view(View const &src, typename View::point_t const &step) -> typename dynamic_xy_step_type< View >::type
    Definition: image_view_factory.hpp:293
    -
    Returns the type of a view that does color conversion upon dereferencing its pixels.
    Definition: image_view_factory.hpp:159
    -
    detail::channel_pointer_type< HomogeneousView >::type planar_view_get_raw_data(const HomogeneousView &view, int plane_index)
    Returns C pointer to the the channels of a given color plane of a planar homogeneous view.
    Definition: image_view_factory.hpp:106
    -
    detail::channel_pointer_type< HomogeneousView >::type interleaved_view_get_raw_data(const HomogeneousView &view)
    Returns C pointer to the the channels of an interleaved homogeneous view.
    Definition: image_view_factory.hpp:96
    +
    auto subsampled_view(View const &src, typename View::point_t const &step) -> typename dynamic_xy_step_type< View >::type
    Definition: image_view_factory.hpp:322
    +
    Returns the type of a view that does color conversion upon dereferencing its pixels.
    Definition: image_view_factory.hpp:173
    +
    auto transposed_view(View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
    Definition: image_view_factory.hpp:231
    +
    auto planar_view_get_raw_data(HomogeneousView const &view, int plane_index) -> typename detail::channel_pointer_type< HomogeneousView >::type
    Returns C pointer to the the channels of a given color plane of a planar homogeneous view.
    Definition: image_view_factory.hpp:118
    Pixel concept that allows for changing its channels.
    Definition: concepts/pixel.hpp:101
    -
    Function object that given a source pixel, returns it converted to a given color space and channel de...
    Definition: image_view_factory.hpp:121
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    Function object that given a source pixel, returns it converted to a given color space and channel de...
    Definition: image_view_factory.hpp:135
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    +
    auto flipped_left_right_view(View const &src) -> typename dynamic_x_step_type< View >::type
    Definition: image_view_factory.hpp:218
    +
    auto color_converted_view(View const &src) -> typename color_converted_view_type< View, DstP >::type
    overload of generic color_converted_view with the default color-converter
    Definition: image_view_factory.hpp:193
    Returns the type of a transposed view that has a dynamic step along both X and Y.
    Definition: image_view_factory.hpp:51
    layout< gray_t > gray_layout_t
    Definition: gray.hpp:24
    -
    dynamic_xy_step_transposed_type< View >::type transposed_view(const View &src)
    Definition: image_view_factory.hpp:210
    Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept,...
    Definition: metafunctions.hpp:24
    -
    Given a source image view type View, returns the type of an image view over a given channel of View.
    Definition: image_view_factory.hpp:541
    +
    Given a source image view type View, returns the type of an image view over a given channel of View.
    Definition: image_view_factory.hpp:566
    Returns the type of a homogeneous pixel reference given the channel type, layout, whether it operates...
    Definition: metafunctions.hpp:267
    -
    View subimage_view(View const &src, typename View::coord_t x_min, typename View::coord_t y_min, typename View::coord_t width, typename View::coord_t height)
    Definition: image_view_factory.hpp:264
    +
    View subimage_view(View const &src, typename View::coord_t x_min, typename View::coord_t y_min, typename View::coord_t width, typename View::coord_t height)
    Definition: image_view_factory.hpp:293
    Determines if the given pixel reference is mutable (i.e. its channels can be changed)
    Definition: metafunctions.hpp:229
    Basic views must be over basic locators.
    Definition: metafunctions.hpp:130
    +
    auto kth_channel_view(View const &src) -> typename kth_channel_view_type< K, View >::type
    Definition: image_view_factory.hpp:577
    A lightweight object that interprets memory as a 2D array of pixels. Models ImageViewConcept,...
    Definition: image_view.hpp:53
    +
    auto rotated90cw_view(View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
    Definition: image_view_factory.hpp:244
    GIL's 2-dimensional view over immutable GIL pixels.
    Definition: concepts/image_view.hpp:375
    -
    dynamic_x_step_type< View >::type flipped_left_right_view(const View &src)
    Definition: image_view_factory.hpp:199
    +
    auto rotated180_view(View const &src) -> typename dynamic_xy_step_type< View >::type
    Definition: image_view_factory.hpp:270
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    Returns the type of a view that has a dynamic step along both X and Y.
    Definition: dynamic_step.hpp:27
    Definition: image_view_factory.hpp:40
    -
    Function object that returns a grayscale reference of the K-th channel (specified as a template param...
    Definition: image_view_factory.hpp:495
    -
    dynamic_xy_step_type< View >::type rotated180_view(const View &src)
    Definition: image_view_factory.hpp:243
    +
    Function object that returns a grayscale reference of the K-th channel (specified as a template param...
    Definition: image_view_factory.hpp:519
    Helper base class for pixel dereference adaptors.
    Definition: utilities.hpp:106
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    auto interleaved_view_get_raw_data(HomogeneousView const &view) -> typename detail::channel_pointer_type< HomogeneousView >::type
    Returns C pointer to the the channels of an interleaved homogeneous view.
    Definition: image_view_factory.hpp:106
    Given a model of a pixel, determines whether the model represents a pixel reference (as opposed to pi...
    Definition: metafunctions.hpp:217
    -
    Given a source image view type View, returns the type of an image view over a single channel of View.
    Definition: image_view_factory.hpp:406
    +
    Given a source image view type View, returns the type of an image view over a single channel of View.
    Definition: image_view_factory.hpp:437
    +
    auto rotated90ccw_view(View const &src) -> typename dynamic_xy_step_transposed_type< View >::type
    Definition: image_view_factory.hpp:257
    Definition: color_convert.hpp:31
    -
    dynamic_xy_step_transposed_type< View >::type rotated90cw_view(const View &src)
    Definition: image_view_factory.hpp:221
    -
    dynamic_y_step_type< View >::type flipped_up_down_view(const View &src)
    Definition: image_view_factory.hpp:188
    -
    Function object that returns a grayscale reference of the N-th channel of a given reference....
    Definition: image_view_factory.hpp:360
    +
    Function object that returns a grayscale reference of the N-th channel of a given reference....
    Definition: image_view_factory.hpp:389
    +
    auto flipped_up_down_view(View const &src) -> typename dynamic_y_step_type< View >::type
    Definition: image_view_factory.hpp:205
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    Base template for types that model HasDynamicYStepTypeConcept.
    Definition: dynamic_step.hpp:21
    -
    kth_channel_view_type< K, View >::type kth_channel_view(const View &src)
    Definition: image_view_factory.hpp:552
    -
    auto interleaved_view(point< std::ptrdiff_t > dim, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< Iterator >::view_t
    Constructing image views from raw interleaved pixel data.
    Definition: image_view_factory.hpp:67
    -
    color_converted_view_type< View, DstP >::type color_converted_view(const View &src)
    overload of generic color_converted_view with the default color-converter
    Definition: image_view_factory.hpp:178
    -
    class for color-converting one pixel to another
    Definition: color_convert.hpp:325
    +
    auto interleaved_view(point< std::ptrdiff_t > dim, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< Iterator >::view_t
    Constructing image views from raw interleaved pixel data.
    Definition: image_view_factory.hpp:69
    +
    class for color-converting one pixel to another
    Definition: color_convert.hpp:328
    diff --git a/html/reference/io_2typedefs_8hpp_source.html b/html/reference/io_2typedefs_8hpp_source.html index 34d3f7316..cedbe78a3 100644 --- a/html/reference/io_2typedefs_8hpp_source.html +++ b/html/reference/io_2typedefs_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
    19 #include <type_traits>
    20 #include <vector>
    21 
    -
    22 namespace boost { namespace gil {
    +
    22 namespace boost { namespace gil {
    23 
    24 struct double_zero { static double apply() { return 0.0; } };
    25 struct double_one { static double apply() { return 1.0; } };
    @@ -78,14 +78,14 @@ $(function() {
    29 
    30 }} // namespace boost::gil
    31 
    -
    32 namespace boost {
    +
    32 namespace boost {
    33 
    34 template<> struct is_floating_point<gil::float32_t> : std::true_type {};
    35 template<> struct is_floating_point<gil::float64_t> : std::true_type {};
    36 
    37 } // namespace boost
    38 
    -
    39 namespace boost { namespace gil {
    +
    39 namespace boost { namespace gil {
    40 
    43 
    44 using gray1_image_t = bit_aligned_image1_type<1, gray_layout_t>::type;
    @@ -128,8 +128,9 @@ $(function() {
    81 
    82 #endif
    -
    scoped_channel_value< double, float_point_zero< double >, float_point_one< double > > float64_t
    64-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:128
    -
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:124
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    scoped_channel_value< double, float_point_zero< double >, float_point_one< double > > float64_t
    64-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:157
    +
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:153
    diff --git a/html/reference/iobackend.html b/html/reference/iobackend.html index a55b6683a..6410074f1 100644 --- a/html/reference/iobackend.html +++ b/html/reference/iobackend.html @@ -94,12 +94,13 @@ Concept of IO Device
    void IODevice::seek(long count, int whence);
    void IODevice::flush();
    };
    -

    For the time being a boolean meta function must be specialized:

    namespace boost{namespace gil{namespace detail{
    +

    For the time being a boolean meta function must be specialized:

    namespace boost{namespace gil{namespace detail{
    template<typename Device>
    struct detail::is_input_device;
    }}}
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void read_view(Reader reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, typename is_format_tag< typename Reader::format_tag_t >::type, typename is_read_supported< typename get_pixel_type< View >::type, typename Reader::format_tag_t >::type >::value >::type *=nullptr)
    Reads an image view without conversion. No memory is allocated.
    Definition: read_view.hpp:31
    void read_image(Reader reader, Image &img, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t >, is_read_supported< typename get_pixel_type< typename Image::view_t >::type, typename Reader::format_tag_t > >::value >::type *=nullptr)
    Reads an image without conversion. Image memory is allocated.
    Definition: read_image.hpp:32
    diff --git a/html/reference/iterator__from__2d_8hpp_source.html b/html/reference/iterator__from__2d_8hpp_source.html index 45d3df48e..6646cfbad 100644 --- a/html/reference/iterator__from__2d_8hpp_source.html +++ b/html/reference/iterator__from__2d_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 #include <boost/assert.hpp>
    17 #include <boost/iterator/iterator_facade.hpp>
    18 
    -
    19 namespace boost { namespace gil {
    +
    19 namespace boost { namespace gil {
    20 
    22 
    28 
    @@ -195,9 +195,10 @@ $(function() {
    166 
    167 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    GIL's 2-dimensional locator over immutable GIL pixels.
    Definition: pixel_locator.hpp:291
    Provides 1D random-access navigation to the pixels of the image. Models: PixelIteratorConcept,...
    Definition: iterator_from_2d.hpp:42
    -
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1083
    +
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1087
    reference operator[](difference_type d) const
    Definition: iterator_from_2d.hpp:65
    diff --git a/html/reference/kernel_8hpp_source.html b/html/reference/kernel_8hpp_source.html index 6c93d967c..68324c55c 100644 --- a/html/reference/kernel_8hpp_source.html +++ b/html/reference/kernel_8hpp_source.html @@ -73,7 +73,7 @@ $(function() {
    24 #include <cmath>
    25 #include <stdexcept>
    26 
    -
    27 namespace boost { namespace gil {
    +
    27 namespace boost { namespace gil {
    28 
    29 // Definitions of 1D fixed-size and variable-size kernels and related operations
    30 
    @@ -401,6 +401,7 @@ $(function() {
    362 #endif
    static-size kernel
    Definition: kernel.hpp:122
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    variable-size kernel
    Definition: kernel.hpp:101
    static-size kernel
    Definition: kernel.hpp:296
    kernel adaptor for one-dimensional cores Core needs to provide size(),begin(),end(),...
    Definition: kernel.hpp:37
    diff --git a/html/reference/locator_8hpp_source.html b/html/reference/locator_8hpp_source.html index 38c9411d5..b6d7be7d2 100644 --- a/html/reference/locator_8hpp_source.html +++ b/html/reference/locator_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 
    17 #include <cstddef>
    18 
    -
    19 namespace boost { namespace gil {
    +
    19 namespace boost { namespace gil {
    20 
    22 
    23 //forward declarations
    @@ -127,7 +127,7 @@ $(function() {
    140 
    141  template <std::size_t D> typename axis<D>::iterator& axis_iterator() { return detail::locator_axis<D,Loc>()(concrete()); }
    142  template <std::size_t D> typename axis<D>::iterator const& axis_iterator() const { return detail::locator_axis<D,Loc>()(concrete()); }
    -
    143  template <std::size_t D> typename axis<D>::iterator axis_iterator(const point_t& p) const { return detail::locator_axis<D,Loc>()(concrete(),p); }
    +
    143  template <std::size_t D> typename axis<D>::iterator axis_iterator(point_t const& p) const { return detail::locator_axis<D,Loc>()(concrete(),p); }
    144 
    145  reference operator()(x_coord_t dx, y_coord_t dy) const { return *x_at(dx,dy); }
    146  reference operator[](const difference_type& d) const { return *x_at(d.x,d.y); }
    @@ -163,8 +163,8 @@ $(function() {
    176 
    177  inline iterator& operator()( Loc& loc) const { return loc.x(); }
    178  inline iterator const& operator()(const Loc& loc) const { return loc.x(); }
    -
    179  inline iterator operator()( Loc& loc, const point_t& d) const { return loc.x_at(d); }
    -
    180  inline iterator operator()(const Loc& loc, const point_t& d) const { return loc.x_at(d); }
    +
    179  inline iterator operator()( Loc& loc, point_t const& d) const { return loc.x_at(d); }
    +
    180  inline iterator operator()(const Loc& loc, point_t const& d) const { return loc.x_at(d); }
    181  };
    182 
    183  template <typename Loc>
    @@ -176,8 +176,8 @@ $(function() {
    189 
    190  inline iterator& operator()( Loc& loc) const { return loc.y(); }
    191  inline iterator const& operator()(const Loc& loc) const { return loc.y(); }
    -
    192  inline iterator operator()( Loc& loc, const point_t& d) const { return loc.y_at(d); }
    -
    193  inline iterator operator()(const Loc& loc, const point_t& d) const { return loc.y_at(d); }
    +
    192  inline iterator operator()( Loc& loc, point_t const& d) const { return loc.y_at(d); }
    +
    193  inline iterator operator()(const Loc& loc, point_t const& d) const { return loc.y_at(d); }
    194  };
    195 }
    196 
    @@ -314,6 +314,7 @@ $(function() {
    353 
    354 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Returns the type (and creates an instance) of an iterator that invokes the given dereference adaptor ...
    Definition: locator.hpp:27
    base class for models of PixelLocatorConcept
    Definition: locator.hpp:109
    Definition: image_view_factory.hpp:40
    diff --git a/html/reference/make__backend_8hpp_source.html b/html/reference/make__backend_8hpp_source.html index c69efa53d..816925f88 100644 --- a/html/reference/make__backend_8hpp_source.html +++ b/html/reference/make__backend_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
    14 
    15 #include <type_traits>
    16 
    -
    17 namespace boost { namespace gil {
    +
    17 namespace boost { namespace gil {
    18 
    19 template <typename String, typename FormatTag>
    20 inline
    @@ -169,6 +169,7 @@ $(function() {
    120 
    121 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/make__dynamic__image__reader_8hpp_source.html b/html/reference/make__dynamic__image__reader_8hpp_source.html index f4eff15e9..2c5e1866c 100644 --- a/html/reference/make__dynamic__image__reader_8hpp_source.html +++ b/html/reference/make__dynamic__image__reader_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <type_traits>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 template <typename String, typename FormatTag>
    19 inline
    @@ -184,6 +184,7 @@ $(function() {
    135 
    136 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/make__dynamic__image__writer_8hpp_source.html b/html/reference/make__dynamic__image__writer_8hpp_source.html index 735b09d2c..441ef2c89 100644 --- a/html/reference/make__dynamic__image__writer_8hpp_source.html +++ b/html/reference/make__dynamic__image__writer_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <type_traits>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 template <typename String, typename FormatTag>
    19 inline
    @@ -88,132 +88,108 @@ $(function() {
    39 
    40 template< typename FormatTag >
    41 inline
    -
    42 typename get_dynamic_image_writer< std::wstring
    -
    43  , FormatTag
    -
    44  >::type
    -
    45 make_dynamic_image_writer( const std::wstring& file_name
    -
    46  , const image_write_info< FormatTag >& info
    -
    47  )
    -
    48 {
    -
    49  const char* str = detail::convert_to_native_string( file_name );
    -
    50 
    -
    51  typename get_write_device< std::wstring
    -
    52  , FormatTag
    -
    53  >::type device( str
    -
    54  , typename detail::file_stream_device< FormatTag >::write_tag()
    -
    55  );
    -
    56 
    -
    57  delete[] str; // TODO: RAII
    -
    58 
    -
    59  return typename get_dynamic_image_writer< std::wstring
    -
    60  , FormatTag
    -
    61  >::type( device
    -
    62  , info
    -
    63  );
    -
    64 }
    -
    65 
    -
    66 #ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
    -
    67 template< typename FormatTag >
    -
    68 inline
    -
    69 typename get_dynamic_image_writer< std::wstring
    -
    70  , FormatTag
    -
    71  >::type
    -
    72 make_dynamic_image_writer( detail::filesystem::path const& path
    -
    73  , image_write_info<FormatTag> const& info
    -
    74  )
    -
    75 {
    -
    76  return make_dynamic_image_writer( path.wstring()
    -
    77  , info
    -
    78  );
    -
    79 }
    -
    80 #endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
    -
    81 
    -
    82 template <typename Device, typename FormatTag>
    -
    83 inline
    -
    84 auto make_dynamic_image_writer(Device& file, image_write_info<FormatTag> const& info,
    -
    85  typename std::enable_if
    -
    86  <
    -
    87  mp11::mp_and
    -
    88  <
    -
    89  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    -
    90  is_format_tag<FormatTag>
    -
    91  >::value
    -
    92  >::type* /*dummy*/ = nullptr)
    -
    93  -> typename get_dynamic_image_writer<Device, FormatTag>::type
    -
    94 {
    -
    95  typename get_write_device<Device, FormatTag>::type device(file);
    -
    96  return typename get_dynamic_image_writer<Device, FormatTag>::type(device, info);
    -
    97 }
    -
    98 
    -
    99 // no image_write_info
    -
    100 
    -
    101 template <typename String, typename FormatTag>
    -
    102 inline
    -
    103 auto make_dynamic_image_writer(String const& file_name, FormatTag const&,
    -
    104  typename std::enable_if
    -
    105  <
    -
    106  mp11::mp_and
    -
    107  <
    -
    108  detail::is_supported_path_spec<String>,
    -
    109  is_format_tag<FormatTag>
    -
    110  >::value
    -
    111  >::type* /*dummy*/ = nullptr)
    -
    112  -> typename get_dynamic_image_writer<String, FormatTag>::type
    -
    113 {
    -
    114  return make_dynamic_image_writer(file_name, image_write_info<FormatTag>());
    -
    115 }
    -
    116 
    -
    117 template< typename FormatTag >
    -
    118 inline
    -
    119 typename get_dynamic_image_writer< std::wstring
    -
    120  , FormatTag
    -
    121  >::type
    -
    122 make_dynamic_image_writer( const std::wstring& file_name
    -
    123  , const FormatTag&
    -
    124  )
    -
    125 {
    -
    126  return make_dynamic_image_writer( file_name
    -
    127  , image_write_info< FormatTag >()
    -
    128  );
    -
    129 }
    -
    130 
    -
    131 #ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
    -
    132 template< typename FormatTag >
    -
    133 inline
    -
    134 typename get_dynamic_image_writer< std::wstring
    -
    135  , FormatTag
    -
    136  >::type
    -
    137 make_dynamic_image_writer( const filesystem::path& path
    -
    138  , const FormatTag&
    -
    139  )
    -
    140 {
    -
    141  return make_dynamic_image_writer( path.wstring()
    -
    142  , image_write_info< FormatTag >()
    -
    143  );
    -
    144 }
    -
    145 #endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
    -
    146 
    -
    147 
    -
    148 template <typename Device, typename FormatTag>
    -
    149 inline
    -
    150 auto make_dynamic_image_writer(Device& file, FormatTag const&,
    -
    151  typename std::enable_if
    -
    152  <
    -
    153  mp11::mp_and
    -
    154  <
    -
    155  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    -
    156  is_format_tag<FormatTag>
    -
    157  >::value
    -
    158  >::type* /*dummy*/ = nullptr)
    -
    159  -> typename get_dynamic_image_writer<Device, FormatTag>::type
    -
    160 {
    -
    161  return make_dynamic_image_writer(file, image_write_info<FormatTag>());
    -
    162 }
    -
    163 
    -
    164 }} // namespace boost::gil
    -
    165 
    -
    166 #endif
    +
    42 auto make_dynamic_image_writer(std::wstring const& file_name, image_write_info<FormatTag> const& info)
    +
    43  -> typename get_dynamic_image_writer< std::wstring, FormatTag>::type
    +
    44 {
    +
    45  const char* str = detail::convert_to_native_string( file_name );
    +
    46 
    +
    47  typename get_write_device< std::wstring
    +
    48  , FormatTag
    +
    49  >::type device( str
    +
    50  , typename detail::file_stream_device< FormatTag >::write_tag()
    +
    51  );
    +
    52 
    +
    53  delete[] str; // TODO: RAII
    +
    54 
    +
    55  return typename get_dynamic_image_writer< std::wstring
    +
    56  , FormatTag
    +
    57  >::type( device
    +
    58  , info
    +
    59  );
    +
    60 }
    +
    61 
    +
    62 template <typename FormatTag>
    +
    63 inline
    +
    64 auto make_dynamic_image_writer(detail::filesystem::path const& path, image_write_info<FormatTag> const& info)
    +
    65  -> typename get_dynamic_image_writer<std::wstring, FormatTag>::type
    +
    66 {
    +
    67  return make_dynamic_image_writer(path.wstring(), info);
    +
    68 }
    +
    69 
    +
    70 template <typename Device, typename FormatTag>
    +
    71 inline
    +
    72 auto make_dynamic_image_writer(Device& file, image_write_info<FormatTag> const& info,
    +
    73  typename std::enable_if
    +
    74  <
    +
    75  mp11::mp_and
    +
    76  <
    +
    77  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    +
    78  is_format_tag<FormatTag>
    +
    79  >::value
    +
    80  >::type* /*dummy*/ = nullptr)
    +
    81  -> typename get_dynamic_image_writer<Device, FormatTag>::type
    +
    82 {
    +
    83  typename get_write_device<Device, FormatTag>::type device(file);
    +
    84  return typename get_dynamic_image_writer<Device, FormatTag>::type(device, info);
    +
    85 }
    +
    86 
    +
    87 // no image_write_info
    +
    88 
    +
    89 template <typename String, typename FormatTag>
    +
    90 inline
    +
    91 auto make_dynamic_image_writer(String const& file_name, FormatTag const&,
    +
    92  typename std::enable_if
    +
    93  <
    +
    94  mp11::mp_and
    +
    95  <
    +
    96  detail::is_supported_path_spec<String>,
    +
    97  is_format_tag<FormatTag>
    +
    98  >::value
    +
    99  >::type* /*dummy*/ = nullptr)
    +
    100  -> typename get_dynamic_image_writer<String, FormatTag>::type
    +
    101 {
    +
    102  return make_dynamic_image_writer(file_name, image_write_info<FormatTag>());
    +
    103 }
    +
    104 
    +
    105 template <typename FormatTag>
    +
    106 inline
    +
    107 auto make_dynamic_image_writer(std::wstring const& file_name, FormatTag const&)
    +
    108  -> typename get_dynamic_image_writer<std::wstring, FormatTag>::type
    +
    109 {
    +
    110  return make_dynamic_image_writer( file_name
    +
    111  , image_write_info< FormatTag >()
    +
    112  );
    +
    113 }
    +
    114 
    +
    115 template <typename FormatTag>
    +
    116 inline
    +
    117 auto make_dynamic_image_writer(detail::filesystem::path const& path, FormatTag const&)
    +
    118  -> typename get_dynamic_image_writer<std::wstring, FormatTag>::type
    +
    119 {
    +
    120  return make_dynamic_image_writer(path.wstring(), image_write_info<FormatTag>());
    +
    121 }
    +
    122 
    +
    123 template <typename Device, typename FormatTag>
    +
    124 inline
    +
    125 auto make_dynamic_image_writer(Device& file, FormatTag const&,
    +
    126  typename std::enable_if
    +
    127  <
    +
    128  mp11::mp_and
    +
    129  <
    +
    130  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    +
    131  is_format_tag<FormatTag>
    +
    132  >::value
    +
    133  >::type* /*dummy*/ = nullptr)
    +
    134  -> typename get_dynamic_image_writer<Device, FormatTag>::type
    +
    135 {
    +
    136  return make_dynamic_image_writer(file, image_write_info<FormatTag>());
    +
    137 }
    +
    138 
    +
    139 }} // namespace boost::gil
    +
    140 
    +
    141 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/make__reader_8hpp_source.html b/html/reference/make__reader_8hpp_source.html index 80ab11818..93126fcf2 100644 --- a/html/reference/make__reader_8hpp_source.html +++ b/html/reference/make__reader_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <type_traits>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 template <typename String, typename FormatTag, typename ConversionPolicy>
    19 inline
    @@ -88,160 +88,123 @@ $(function() {
    39  typename get_reader<String, FormatTag, ConversionPolicy>::type(device, settings);
    40 }
    41 
    -
    42 template< typename FormatTag
    -
    43  , typename ConversionPolicy
    -
    44  >
    -
    45 inline
    -
    46 typename get_reader< std::wstring
    -
    47  , FormatTag
    -
    48  , ConversionPolicy
    -
    49  >::type
    -
    50 make_reader( const std::wstring& file_name
    -
    51  , const image_read_settings< FormatTag >& settings
    -
    52  , const ConversionPolicy&
    -
    53  )
    -
    54 {
    -
    55  const char* str = detail::convert_to_native_string( file_name );
    +
    42 template <typename FormatTag, typename ConversionPolicy>
    +
    43 inline
    +
    44 auto make_reader(std::wstring const &file_name, image_read_settings<FormatTag> const& settings, ConversionPolicy const&)
    +
    45  -> typename get_reader<std::wstring, FormatTag, ConversionPolicy>::type
    +
    46 {
    +
    47  const char* str = detail::convert_to_native_string( file_name );
    +
    48 
    +
    49  typename get_read_device< std::wstring
    +
    50  , FormatTag
    +
    51  >::type device( str
    +
    52  , typename detail::file_stream_device< FormatTag >::read_tag()
    +
    53  );
    +
    54 
    +
    55  delete[] str; // TODO: RAII
    56 
    -
    57  typename get_read_device< std::wstring
    -
    58  , FormatTag
    -
    59  >::type device( str
    -
    60  , typename detail::file_stream_device< FormatTag >::read_tag()
    -
    61  );
    -
    62 
    -
    63  delete[] str; // TODO: RAII
    +
    57  return typename get_reader< std::wstring
    +
    58  , FormatTag
    +
    59  , ConversionPolicy
    +
    60  >::type( device
    +
    61  , settings
    +
    62  );
    +
    63 }
    64 
    -
    65  return typename get_reader< std::wstring
    -
    66  , FormatTag
    -
    67  , ConversionPolicy
    -
    68  >::type( device
    -
    69  , settings
    -
    70  );
    +
    65 template <typename FormatTag, typename ConversionPolicy>
    +
    66 inline
    +
    67 auto make_reader(detail::filesystem::path const& path, image_read_settings<FormatTag> const& settings, ConversionPolicy const& cc)
    +
    68  -> typename get_reader<std::wstring, FormatTag, ConversionPolicy>::type
    +
    69 {
    +
    70  return make_reader(path.wstring(), settings, cc);
    71 }
    72 
    -
    73 template< typename FormatTag
    -
    74  , typename ConversionPolicy
    -
    75  >
    -
    76 inline
    -
    77 typename get_reader< std::wstring
    -
    78  , FormatTag
    -
    79  , ConversionPolicy
    -
    80  >::type
    -
    81 make_reader( detail::filesystem::path const& path
    -
    82  , const image_read_settings< FormatTag >& settings
    -
    83  , const ConversionPolicy& cc
    -
    84  )
    -
    85 {
    -
    86  return make_reader( path.wstring()
    -
    87  , settings
    -
    88  , cc
    -
    89  );
    -
    90 }
    -
    91 
    -
    92 template <typename Device, typename FormatTag, typename ConversionPolicy>
    -
    93 inline
    -
    94 auto make_reader(
    -
    95  Device& file,
    -
    96  image_read_settings<FormatTag> const& settings,
    -
    97  ConversionPolicy const&,
    -
    98  typename std::enable_if
    -
    99  <
    -
    100  mp11::mp_and
    -
    101  <
    -
    102  detail::is_adaptable_input_device<FormatTag, Device>,
    -
    103  is_format_tag<FormatTag>
    -
    104  >::value
    -
    105  >::type* /*dummy*/ = nullptr)
    -
    106  -> typename get_reader<Device, FormatTag, ConversionPolicy>::type
    -
    107 {
    -
    108  typename get_read_device<Device, FormatTag>::type device(file);
    -
    109 
    -
    110  return
    -
    111  typename get_reader<Device, FormatTag, ConversionPolicy>::type(device, settings);
    -
    112 }
    -
    113 
    -
    114 // no image_read_settings
    +
    73 template <typename Device, typename FormatTag, typename ConversionPolicy>
    +
    74 inline
    +
    75 auto make_reader(
    +
    76  Device& file,
    +
    77  image_read_settings<FormatTag> const& settings,
    +
    78  ConversionPolicy const&,
    +
    79  typename std::enable_if
    +
    80  <
    +
    81  mp11::mp_and
    +
    82  <
    +
    83  detail::is_adaptable_input_device<FormatTag, Device>,
    +
    84  is_format_tag<FormatTag>
    +
    85  >::value
    +
    86  >::type* /*dummy*/ = nullptr)
    +
    87  -> typename get_reader<Device, FormatTag, ConversionPolicy>::type
    +
    88 {
    +
    89  typename get_read_device<Device, FormatTag>::type device(file);
    +
    90 
    +
    91  return
    +
    92  typename get_reader<Device, FormatTag, ConversionPolicy>::type(device, settings);
    +
    93 }
    +
    94 
    +
    95 // no image_read_settings
    +
    96 
    +
    97 template <typename String, typename FormatTag, typename ConversionPolicy>
    +
    98 inline
    +
    99 auto make_reader(
    +
    100  String const&file_name,
    +
    101  FormatTag const&,
    +
    102  ConversionPolicy const& cc,
    +
    103  typename std::enable_if
    +
    104  <
    +
    105  mp11::mp_and
    +
    106  <
    +
    107  detail::is_supported_path_spec<String>,
    +
    108  is_format_tag<FormatTag>
    +
    109  >::value
    +
    110  >::type* /*dummy*/ = nullptr)
    +
    111  -> typename get_reader<String, FormatTag, ConversionPolicy>::type
    +
    112 {
    +
    113  return make_reader(file_name, image_read_settings<FormatTag>(), cc);
    +
    114 }
    115 
    -
    116 template <typename String, typename FormatTag, typename ConversionPolicy>
    +
    116 template <typename FormatTag, typename ConversionPolicy>
    117 inline
    -
    118 auto make_reader(
    -
    119  String const&file_name,
    -
    120  FormatTag const&,
    -
    121  ConversionPolicy const& cc,
    -
    122  typename std::enable_if
    -
    123  <
    -
    124  mp11::mp_and
    -
    125  <
    -
    126  detail::is_supported_path_spec<String>,
    -
    127  is_format_tag<FormatTag>
    -
    128  >::value
    -
    129  >::type* /*dummy*/ = nullptr)
    -
    130  -> typename get_reader<String, FormatTag, ConversionPolicy>::type
    +
    118 auto make_reader(std::wstring const &file_name, FormatTag const&, ConversionPolicy const& cc)
    +
    119  -> typename get_reader<std::wstring, FormatTag, ConversionPolicy>::type
    +
    120 {
    +
    121  return make_reader( file_name
    +
    122  , image_read_settings< FormatTag >()
    +
    123  , cc
    +
    124  );
    +
    125 }
    +
    126 
    +
    127 template <typename FormatTag, typename ConversionPolicy>
    +
    128 inline
    +
    129 auto make_reader(detail::filesystem::path const& path, FormatTag const&, ConversionPolicy const& cc)
    +
    130  -> typename get_reader<std::wstring, FormatTag, ConversionPolicy>::type
    131 {
    -
    132  return make_reader(file_name, image_read_settings<FormatTag>(), cc);
    +
    132  return make_reader(path.wstring(), image_read_settings<FormatTag>(), cc);
    133 }
    134 
    -
    135 template< typename FormatTag
    -
    136  , typename ConversionPolicy
    -
    137  >
    -
    138 inline
    -
    139 typename get_reader< std::wstring
    -
    140  , FormatTag
    -
    141  , ConversionPolicy
    -
    142  >::type
    -
    143 make_reader( const std::wstring& file_name
    -
    144  , const FormatTag&
    -
    145  , const ConversionPolicy& cc
    -
    146  )
    -
    147 {
    -
    148  return make_reader( file_name
    -
    149  , image_read_settings< FormatTag >()
    -
    150  , cc
    -
    151  );
    +
    135 template <typename Device, typename FormatTag, typename ConversionPolicy>
    +
    136 inline
    +
    137 auto make_reader(
    +
    138  Device& file,
    +
    139  FormatTag const&,
    +
    140  ConversionPolicy const& cc,
    +
    141  typename std::enable_if
    +
    142  <
    +
    143  mp11::mp_and
    +
    144  <
    +
    145  detail::is_adaptable_input_device<FormatTag, Device>,
    +
    146  is_format_tag<FormatTag>
    +
    147  >::value
    +
    148  >::type* /*dummy*/ = nullptr)
    +
    149  -> typename get_reader<Device, FormatTag, ConversionPolicy>::type
    +
    150 {
    +
    151  return make_reader(file, image_read_settings<FormatTag>(), cc);
    152 }
    153 
    -
    154 template< typename FormatTag
    -
    155  , typename ConversionPolicy
    -
    156  >
    -
    157 inline
    -
    158 typename get_reader< std::wstring
    -
    159  , FormatTag
    -
    160  , ConversionPolicy
    -
    161  >::type
    -
    162 make_reader( detail::filesystem::path const& path
    -
    163  , const FormatTag&
    -
    164  , const ConversionPolicy& cc
    -
    165  )
    -
    166 {
    -
    167  return make_reader( path.wstring()
    -
    168  , image_read_settings< FormatTag >()
    -
    169  , cc
    -
    170  );
    -
    171 }
    -
    172 
    -
    173 template <typename Device, typename FormatTag, typename ConversionPolicy>
    -
    174 inline
    -
    175 auto make_reader(
    -
    176  Device& file,
    -
    177  FormatTag const&,
    -
    178  ConversionPolicy const& cc,
    -
    179  typename std::enable_if
    -
    180  <
    -
    181  mp11::mp_and
    -
    182  <
    -
    183  detail::is_adaptable_input_device<FormatTag, Device>,
    -
    184  is_format_tag<FormatTag>
    -
    185  >::value
    -
    186  >::type* /*dummy*/ = nullptr)
    -
    187  -> typename get_reader<Device, FormatTag, ConversionPolicy>::type
    -
    188 {
    -
    189  return make_reader(file, image_read_settings<FormatTag>(), cc);
    -
    190 }
    -
    191 
    -
    192 }} // namespace boost::gil
    -
    193 
    -
    194 #endif
    +
    154 }} // namespace boost::gil
    +
    155 
    +
    156 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/make__scanline__reader_8hpp_source.html b/html/reference/make__scanline__reader_8hpp_source.html index fb3977917..c2cc9af0d 100644 --- a/html/reference/make__scanline__reader_8hpp_source.html +++ b/html/reference/make__scanline__reader_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <type_traits>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 template <typename String, typename FormatTag>
    19 inline
    @@ -86,66 +86,57 @@ $(function() {
    37  device, image_read_settings<FormatTag>());
    38 }
    39 
    -
    40 template< typename FormatTag >
    +
    40 template <typename FormatTag>
    41 inline
    -
    42 typename get_scanline_reader< std::wstring
    -
    43  , FormatTag
    -
    44  >::type
    -
    45 make_scanline_reader( const std::wstring& file_name
    -
    46  , FormatTag const&
    -
    47  )
    -
    48 {
    -
    49  const char* str = detail::convert_to_native_string( file_name );
    -
    50 
    -
    51  typename get_read_device< std::wstring
    -
    52  , FormatTag
    -
    53  >::type device( str
    -
    54  , typename detail::file_stream_device< FormatTag >::read_tag()
    -
    55  );
    -
    56 
    -
    57  delete[] str;
    -
    58 
    -
    59  return typename get_scanline_reader< std::wstring
    -
    60  , FormatTag
    -
    61  >::type( device
    -
    62  , image_read_settings< FormatTag >()
    -
    63  );
    -
    64 }
    -
    65 
    -
    66 template< typename FormatTag >
    -
    67 inline
    -
    68 typename get_scanline_reader< std::wstring
    -
    69  , FormatTag
    -
    70  >::type
    -
    71 make_scanline_reader( detail::filesystem::path const& path
    -
    72  , FormatTag const&
    -
    73  )
    -
    74 {
    -
    75  return make_scanline_reader( path.wstring()
    -
    76  , image_read_settings< FormatTag >()
    -
    77  );
    -
    78 }
    -
    79 
    -
    80 template <typename Device, typename FormatTag>
    -
    81 inline
    -
    82 auto make_scanline_reader(Device& io_dev, FormatTag const&,
    -
    83  typename std::enable_if
    -
    84  <
    -
    85  mp11::mp_and
    -
    86  <
    -
    87  detail::is_adaptable_input_device<FormatTag, Device>,
    -
    88  is_format_tag<FormatTag>
    -
    89  >::value
    -
    90  >::type* /*dummy*/ = nullptr)
    -
    91  -> typename get_scanline_reader<Device, FormatTag>::type
    -
    92 {
    -
    93  return make_scanline_reader(io_dev, image_read_settings<FormatTag>());
    -
    94 }
    -
    95 
    -
    96 }} // namespace boost::gil
    -
    97 
    -
    98 #endif
    +
    42 auto make_scanline_reader(std::wstring const& file_name, FormatTag const&)
    +
    43  -> typename get_scanline_reader<std::wstring, FormatTag>::type
    +
    44 {
    +
    45  const char* str = detail::convert_to_native_string( file_name );
    +
    46 
    +
    47  typename get_read_device< std::wstring
    +
    48  , FormatTag
    +
    49  >::type device( str
    +
    50  , typename detail::file_stream_device< FormatTag >::read_tag()
    +
    51  );
    +
    52 
    +
    53  delete[] str;
    +
    54 
    +
    55  return typename get_scanline_reader< std::wstring
    +
    56  , FormatTag
    +
    57  >::type( device
    +
    58  , image_read_settings< FormatTag >()
    +
    59  );
    +
    60 }
    +
    61 
    +
    62 template <typename FormatTag>
    +
    63 inline
    +
    64 auto make_scanline_reader(detail::filesystem::path const& path, FormatTag const&)
    +
    65  -> typename get_scanline_reader<std::wstring, FormatTag>::type
    +
    66 {
    +
    67  return make_scanline_reader(path.wstring(), image_read_settings<FormatTag>());
    +
    68 }
    +
    69 
    +
    70 template <typename Device, typename FormatTag>
    +
    71 inline
    +
    72 auto make_scanline_reader(Device& io_dev, FormatTag const&,
    +
    73  typename std::enable_if
    +
    74  <
    +
    75  mp11::mp_and
    +
    76  <
    +
    77  detail::is_adaptable_input_device<FormatTag, Device>,
    +
    78  is_format_tag<FormatTag>
    +
    79  >::value
    +
    80  >::type* /*dummy*/ = nullptr)
    +
    81  -> typename get_scanline_reader<Device, FormatTag>::type
    +
    82 {
    +
    83  return make_scanline_reader(io_dev, image_read_settings<FormatTag>());
    +
    84 }
    +
    85 
    +
    86 }} // namespace boost::gil
    +
    87 
    +
    88 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/make__writer_8hpp_source.html b/html/reference/make__writer_8hpp_source.html index 781a42b4e..d7c5b6ec5 100644 --- a/html/reference/make__writer_8hpp_source.html +++ b/html/reference/make__writer_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 
    14 #include <type_traits>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 template <typename String, typename FormatTag>
    19 inline
    @@ -83,129 +83,110 @@ $(function() {
    34  return typename get_writer<String, FormatTag>::type(device, info);
    35 }
    36 
    -
    37 template< typename FormatTag >
    +
    37 template <typename FormatTag>
    38 inline
    -
    39 typename get_writer< std::wstring
    -
    40  , FormatTag
    -
    41  >::type
    -
    42 make_writer( const std::wstring& file_name
    -
    43  , const image_write_info< FormatTag >& info
    -
    44  )
    -
    45 {
    -
    46  const char* str = detail::convert_to_native_string( file_name );
    -
    47 
    -
    48  typename get_write_device< std::wstring
    -
    49  , FormatTag
    -
    50  >::type device( str
    -
    51  , typename detail::file_stream_device< FormatTag >::write_tag()
    -
    52  );
    -
    53 
    -
    54  delete[] str;
    -
    55 
    -
    56  return typename get_writer< std::wstring
    -
    57  , FormatTag
    -
    58  >::type( device
    -
    59  , info
    -
    60  );
    -
    61 }
    -
    62 
    -
    63 template< typename FormatTag >
    -
    64 inline
    -
    65 typename get_writer< std::wstring
    -
    66  , FormatTag
    -
    67  >::type
    -
    68 make_writer( detail::filesystem::path const& path
    -
    69  , const image_write_info< FormatTag >& info
    -
    70  )
    -
    71 {
    -
    72  return make_writer( path.wstring()
    -
    73  , info
    -
    74  );
    -
    75 }
    -
    76 
    -
    77 template <typename Device, typename FormatTag>
    -
    78 inline
    -
    79 auto make_writer(Device& file, image_write_info<FormatTag> const& info,
    -
    80  typename std::enable_if
    -
    81  <
    -
    82  mp11::mp_and
    -
    83  <
    -
    84  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    -
    85  is_format_tag<FormatTag>
    -
    86  >::value
    -
    87  >::type* /*dummy*/ = nullptr)
    -
    88  -> typename get_writer<Device, FormatTag>::type
    -
    89 {
    -
    90  typename get_write_device<Device, FormatTag>::type device(file);
    -
    91  return typename get_writer<Device, FormatTag>::type(device, info);
    -
    92 }
    -
    93 
    -
    94 // no image_write_info
    -
    95 
    -
    96 template <typename String, typename FormatTag>
    -
    97 inline
    -
    98 auto make_writer(String const& file_name, FormatTag const&,
    -
    99  typename std::enable_if
    -
    100  <
    -
    101  mp11::mp_and
    -
    102  <
    -
    103  detail::is_supported_path_spec<String>,
    -
    104  is_format_tag<FormatTag>
    -
    105  >::value
    -
    106  >::type* /*dummy*/ = nullptr)
    -
    107  -> typename get_writer<String, FormatTag>::type
    -
    108 {
    -
    109  return make_writer(file_name, image_write_info<FormatTag>());
    +
    39 auto make_writer(std::wstring const& file_name, image_write_info<FormatTag> const& info)
    +
    40  -> typename get_writer<std::wstring, FormatTag>::type
    +
    41 {
    +
    42  const char* str = detail::convert_to_native_string( file_name );
    +
    43 
    +
    44  typename get_write_device< std::wstring
    +
    45  , FormatTag
    +
    46  >::type device( str
    +
    47  , typename detail::file_stream_device< FormatTag >::write_tag()
    +
    48  );
    +
    49 
    +
    50  delete[] str;
    +
    51 
    +
    52  return typename get_writer< std::wstring
    +
    53  , FormatTag
    +
    54  >::type( device
    +
    55  , info
    +
    56  );
    +
    57 }
    +
    58 
    +
    59 template <typename FormatTag>
    +
    60 inline
    +
    61 auto make_writer(detail::filesystem::path const& path, image_write_info<FormatTag> const& info)
    +
    62  -> typename get_writer<std::wstring, FormatTag>::type
    +
    63 {
    +
    64  return make_writer(path.wstring(), info);
    +
    65 }
    +
    66 
    +
    67 template <typename Device, typename FormatTag>
    +
    68 inline
    +
    69 auto make_writer(Device& file, image_write_info<FormatTag> const& info,
    +
    70  typename std::enable_if
    +
    71  <
    +
    72  mp11::mp_and
    +
    73  <
    +
    74  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    +
    75  is_format_tag<FormatTag>
    +
    76  >::value
    +
    77  >::type* /*dummy*/ = nullptr)
    +
    78  -> typename get_writer<Device, FormatTag>::type
    +
    79 {
    +
    80  typename get_write_device<Device, FormatTag>::type device(file);
    +
    81  return typename get_writer<Device, FormatTag>::type(device, info);
    +
    82 }
    +
    83 
    +
    84 // no image_write_info
    +
    85 
    +
    86 template <typename String, typename FormatTag>
    +
    87 inline
    +
    88 auto make_writer(String const& file_name, FormatTag const&,
    +
    89  typename std::enable_if
    +
    90  <
    +
    91  mp11::mp_and
    +
    92  <
    +
    93  detail::is_supported_path_spec<String>,
    +
    94  is_format_tag<FormatTag>
    +
    95  >::value
    +
    96  >::type* /*dummy*/ = nullptr)
    +
    97  -> typename get_writer<String, FormatTag>::type
    +
    98 {
    +
    99  return make_writer(file_name, image_write_info<FormatTag>());
    +
    100 }
    +
    101 
    +
    102 template <typename FormatTag>
    +
    103 inline
    +
    104 auto make_writer(std::wstring const &file_name, FormatTag const&)
    +
    105  -> typename get_writer<std::wstring, FormatTag>::type
    +
    106 {
    +
    107  return make_writer( file_name
    +
    108  , image_write_info< FormatTag >()
    +
    109  );
    110 }
    111 
    -
    112 template< typename FormatTag >
    +
    112 template <typename FormatTag>
    113 inline
    -
    114 typename get_writer< std::wstring
    -
    115  , FormatTag
    -
    116  >::type
    -
    117 make_writer( const std::wstring& file_name
    -
    118  , const FormatTag&
    -
    119  )
    -
    120 {
    -
    121  return make_writer( file_name
    -
    122  , image_write_info< FormatTag >()
    -
    123  );
    -
    124 }
    -
    125 
    -
    126 template< typename FormatTag >
    -
    127 inline
    -
    128 typename get_writer< std::wstring
    -
    129  , FormatTag
    -
    130  >::type
    -
    131 make_writer( detail::filesystem::path const& path
    -
    132  , const FormatTag& tag
    -
    133  )
    -
    134 {
    -
    135  return make_writer( path.wstring()
    -
    136  , tag
    -
    137  );
    -
    138 }
    -
    139 
    -
    140 template <typename Device, typename FormatTag>
    -
    141 inline
    -
    142 auto make_writer(Device& file, FormatTag const&,
    -
    143  typename std::enable_if
    -
    144  <
    -
    145  mp11::mp_and
    -
    146  <
    -
    147  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    -
    148  is_format_tag<FormatTag>
    -
    149  >::value
    -
    150  >::type* /*dummy*/ = nullptr)
    -
    151  -> typename get_writer<Device, FormatTag>::type
    -
    152 {
    -
    153  return make_writer(file, image_write_info<FormatTag>());
    -
    154 }
    -
    155 
    -
    156 }} // namespace boost::gil
    -
    157 
    -
    158 #endif
    +
    114 auto make_writer(detail::filesystem::path const& path, FormatTag const& tag)
    +
    115  -> typename get_writer<std::wstring, FormatTag>::type
    +
    116 {
    +
    117  return make_writer(path.wstring(), tag);
    +
    118 }
    +
    119 
    +
    120 template <typename Device, typename FormatTag>
    +
    121 inline
    +
    122 auto make_writer(Device& file, FormatTag const&,
    +
    123  typename std::enable_if
    +
    124  <
    +
    125  mp11::mp_and
    +
    126  <
    +
    127  typename detail::is_adaptable_output_device<FormatTag, Device>::type,
    +
    128  is_format_tag<FormatTag>
    +
    129  >::value
    +
    130  >::type* /*dummy*/ = nullptr)
    +
    131  -> typename get_writer<Device, FormatTag>::type
    +
    132 {
    +
    133  return make_writer(file, image_write_info<FormatTag>());
    +
    134 }
    +
    135 
    +
    136 }} // namespace boost::gil
    +
    137 
    +
    138 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/menudata.js b/html/reference/menudata.js index ddc9369c6..838862ca4 100644 --- a/html/reference/menudata.js +++ b/html/reference/menudata.js @@ -24,6 +24,8 @@ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, {text:"Modules",url:"modules.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}]}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}, diff --git a/html/reference/metafunctions_8hpp_source.html b/html/reference/metafunctions_8hpp_source.html index 70ed1db03..172151332 100644 --- a/html/reference/metafunctions_8hpp_source.html +++ b/html/reference/metafunctions_8hpp_source.html @@ -67,7 +67,7 @@ $(function() {
    18 #include <iterator>
    19 #include <type_traits>
    20 
    -
    21 namespace boost { namespace gil {
    +
    21 namespace boost { namespace gil {
    22 
    23 // forward declarations
    24 template <typename T, typename L> struct pixel;
    @@ -669,13 +669,14 @@ $(function() {
    container interface over image view. Models ImageConcept, PixelBasedConcept
    Definition: image.hpp:42
    Determines if the given locator has a vertical step that could be set dynamically.
    Definition: metafunctions.hpp:190
    A reference proxy to a planar pixel.
    Definition: metafunctions.hpp:26
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Returns the type of a two channel image given its bitfield type, the bit size of its channels and its...
    Definition: metafunctions.hpp:407
    Heterogeneous pixel value whose channel references can be constructed from the pixel bitfield and the...
    Definition: metafunctions.hpp:25
    Returns the type of a pixel iterator given the pixel type, whether it operates on planar data,...
    Definition: metafunctions.hpp:275
    Returns the type of a homogeneous locator given the channel type, layout, whether it operates on plan...
    Definition: metafunctions.hpp:527
    Returns the type of an interleaved packed image: an image whose channels may not be byte-aligned,...
    Definition: metafunctions.hpp:392
    Returns the type of a three channel bit-aligned image given the bit size of its channels and its layo...
    Definition: metafunctions.hpp:476
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    Returns the type of a homogeneous iterator given the channel type, layout, whether it operates on pla...
    Definition: metafunctions.hpp:290
    Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept,...
    Definition: metafunctions.hpp:24
    Determines if the given locator has a horizontal step that could be set dynamically.
    Definition: metafunctions.hpp:186
    diff --git a/html/reference/morphology_8hpp_source.html b/html/reference/morphology_8hpp_source.html index 59a108d35..7fd41d3da 100644 --- a/html/reference/morphology_8hpp_source.html +++ b/html/reference/morphology_8hpp_source.html @@ -62,190 +62,188 @@ $(function() {
    13 #include <boost/gil/gray.hpp>
    14 #include <boost/gil/image_processing/threshold.hpp>
    15 
    -
    16 namespace boost
    -
    17 {
    -
    18 namespace gil
    +
    16 namespace boost { namespace gil { namespace detail {
    +
    17 
    +
    18 enum class morphological_operation
    19 {
    -
    20 namespace detail
    -
    21 {
    -
    22 enum class morphological_operation
    -
    23 {
    -
    24  dilation,
    -
    25  erosion,
    -
    26 };
    -
    29 
    -
    42 template <typename SrcView, typename DstView, typename Kernel>
    -
    43 void morph_impl(SrcView const& src_view, DstView const& dst_view, Kernel const& kernel,
    -
    44  morphological_operation identifier)
    -
    45 {
    -
    46  std::ptrdiff_t flip_ker_row, flip_ker_col, row_boundary, col_boundary;
    - -
    48  for (std::ptrdiff_t view_row = 0; view_row < src_view.height(); ++view_row)
    -
    49  {
    -
    50  for (std::ptrdiff_t view_col = 0; view_col < src_view.width(); ++view_col)
    -
    51  {
    -
    52  target_element = src_view(view_col, view_row);
    -
    53  for (std::size_t kernel_row = 0; kernel_row < kernel.size(); ++kernel_row)
    -
    54  {
    -
    55  flip_ker_row = kernel.size() - 1 - kernel_row; // row index of flipped kernel
    -
    56 
    -
    57  for (std::size_t kernel_col = 0; kernel_col < kernel.size(); ++kernel_col)
    -
    58  {
    -
    59  flip_ker_col = kernel.size() - 1 - kernel_col; // column index of flipped kernel
    -
    60 
    -
    61  // We ensure that we consider only those pixels which are overlapped
    -
    62  // on a non-zero kernel_element as
    -
    63  if (kernel.at(flip_ker_row, flip_ker_col) == 0)
    -
    64  {
    -
    65  continue;
    -
    66  }
    -
    67  // index of input signal, used for checking boundary
    -
    68  row_boundary = view_row + (kernel.center_y() - flip_ker_row);
    -
    69  col_boundary = view_col + (kernel.center_x() - flip_ker_col);
    -
    70 
    -
    71  // ignore input samples which are out of bound
    -
    72  if (row_boundary >= 0 && row_boundary < src_view.height() &&
    -
    73  col_boundary >= 0 && col_boundary < src_view.width())
    -
    74  {
    -
    75 
    -
    76  if (identifier == morphological_operation::dilation)
    -
    77  {
    -
    78  target_element =
    -
    79  (std::max)(src_view(col_boundary, row_boundary)[0], target_element);
    -
    80  }
    -
    81  else if (identifier == morphological_operation::erosion)
    -
    82  {
    -
    83  target_element =
    -
    84  (std::min)(src_view(col_boundary, row_boundary)[0], target_element);
    -
    85  }
    -
    86  }
    -
    87  }
    -
    88  }
    -
    89  dst_view(view_col, view_row) = target_element;
    -
    90  }
    -
    91  }
    -
    92 }
    -
    93 
    -
    105 template <typename SrcView, typename DstView, typename Kernel>
    -
    106 void morph(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat,
    -
    107  morphological_operation identifier)
    -
    108 {
    -
    109  BOOST_ASSERT(ker_mat.size() != 0 && src_view.dimensions() == dst_view.dimensions());
    -
    110  gil_function_requires<ImageViewConcept<SrcView>>();
    -
    111  gil_function_requires<MutableImageViewConcept<DstView>>();
    +
    20  dilation,
    +
    21  erosion,
    +
    22 };
    +
    23 
    +
    26 
    +
    39 template <typename SrcView, typename DstView, typename Kernel>
    +
    40 void morph_impl(SrcView const& src_view, DstView const& dst_view, Kernel const& kernel,
    +
    41  morphological_operation identifier)
    +
    42 {
    +
    43  std::ptrdiff_t flip_ker_row, flip_ker_col, row_boundary, col_boundary;
    + +
    45  for (std::ptrdiff_t view_row = 0; view_row < src_view.height(); ++view_row)
    +
    46  {
    +
    47  for (std::ptrdiff_t view_col = 0; view_col < src_view.width(); ++view_col)
    +
    48  {
    +
    49  target_element = src_view(view_col, view_row);
    +
    50  for (std::size_t kernel_row = 0; kernel_row < kernel.size(); ++kernel_row)
    +
    51  {
    +
    52  flip_ker_row = kernel.size() - 1 - kernel_row; // row index of flipped kernel
    +
    53 
    +
    54  for (std::size_t kernel_col = 0; kernel_col < kernel.size(); ++kernel_col)
    +
    55  {
    +
    56  flip_ker_col = kernel.size() - 1 - kernel_col; // column index of flipped kernel
    +
    57 
    +
    58  // We ensure that we consider only those pixels which are overlapped
    +
    59  // on a non-zero kernel_element as
    +
    60  if (kernel.at(flip_ker_row, flip_ker_col) == 0)
    +
    61  {
    +
    62  continue;
    +
    63  }
    +
    64  // index of input signal, used for checking boundary
    +
    65  row_boundary = view_row + (kernel.center_y() - flip_ker_row);
    +
    66  col_boundary = view_col + (kernel.center_x() - flip_ker_col);
    +
    67 
    +
    68  // ignore input samples which are out of bound
    +
    69  if (row_boundary >= 0 && row_boundary < src_view.height() &&
    +
    70  col_boundary >= 0 && col_boundary < src_view.width())
    +
    71  {
    +
    72 
    +
    73  if (identifier == morphological_operation::dilation)
    +
    74  {
    +
    75  target_element =
    +
    76  (std::max)(src_view(col_boundary, row_boundary)[0], target_element);
    +
    77  }
    +
    78  else if (identifier == morphological_operation::erosion)
    +
    79  {
    +
    80  target_element =
    +
    81  (std::min)(src_view(col_boundary, row_boundary)[0], target_element);
    +
    82  }
    +
    83  }
    +
    84  }
    +
    85  }
    +
    86  dst_view(view_col, view_row) = target_element;
    +
    87  }
    +
    88  }
    +
    89 }
    +
    90 
    +
    102 template <typename SrcView, typename DstView, typename Kernel>
    +
    103 void morph(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat,
    +
    104  morphological_operation identifier)
    +
    105 {
    +
    106  BOOST_ASSERT(ker_mat.size() != 0 && src_view.dimensions() == dst_view.dimensions());
    +
    107  gil_function_requires<ImageViewConcept<SrcView>>();
    +
    108  gil_function_requires<MutableImageViewConcept<DstView>>();
    +
    109 
    +
    110  gil_function_requires<ColorSpacesCompatibleConcept<typename color_space_type<SrcView>::type,
    +
    111  typename color_space_type<DstView>::type>>();
    112 
    -
    113  gil_function_requires<ColorSpacesCompatibleConcept<typename color_space_type<SrcView>::type,
    -
    114  typename color_space_type<DstView>::type>>();
    -
    115 
    -
    116  gil::image<typename DstView::value_type> intermediate_img(src_view.dimensions());
    -
    117 
    -
    118  for (std::size_t i = 0; i < src_view.num_channels(); i++)
    -
    119  {
    -
    120  morph_impl(nth_channel_view(src_view, i), nth_channel_view(view(intermediate_img), i),
    -
    121  ker_mat, identifier);
    -
    122  }
    -
    123  copy_pixels(view(intermediate_img), dst_view);
    -
    124 }
    -
    125 
    -
    134 template <typename SrcView, typename DiffView>
    -
    135 void difference_impl(SrcView const& src_view1, SrcView const& src_view2, DiffView const& diff_view)
    -
    136 {
    -
    137  for (std::ptrdiff_t view_row = 0; view_row < src_view1.height(); ++view_row)
    -
    138  for (std::ptrdiff_t view_col = 0; view_col < src_view1.width(); ++view_col)
    -
    139  diff_view(view_col, view_row) =
    -
    140  src_view1(view_col, view_row) - src_view2(view_col, view_row);
    -
    141 }
    -
    142 
    -
    150 template <typename SrcView, typename DiffView>
    -
    151 void difference(SrcView const& src_view1, SrcView const& src_view2, DiffView const& diff_view)
    -
    152 {
    -
    153  gil_function_requires<ImageViewConcept<SrcView>>();
    -
    154  gil_function_requires<MutableImageViewConcept<DiffView>>();
    +
    113  gil::image<typename DstView::value_type> intermediate_img(src_view.dimensions());
    +
    114 
    +
    115  for (std::size_t i = 0; i < src_view.num_channels(); i++)
    +
    116  {
    +
    117  morph_impl(nth_channel_view(src_view, i), nth_channel_view(view(intermediate_img), i),
    +
    118  ker_mat, identifier);
    +
    119  }
    +
    120  copy_pixels(view(intermediate_img), dst_view);
    +
    121 }
    +
    122 
    +
    131 template <typename SrcView, typename DiffView>
    +
    132 void difference_impl(SrcView const& src_view1, SrcView const& src_view2, DiffView const& diff_view)
    +
    133 {
    +
    134  for (std::ptrdiff_t view_row = 0; view_row < src_view1.height(); ++view_row)
    +
    135  for (std::ptrdiff_t view_col = 0; view_col < src_view1.width(); ++view_col)
    +
    136  diff_view(view_col, view_row) =
    +
    137  src_view1(view_col, view_row) - src_view2(view_col, view_row);
    +
    138 }
    +
    139 
    +
    147 template <typename SrcView, typename DiffView>
    +
    148 void difference(SrcView const& src_view1, SrcView const& src_view2, DiffView const& diff_view)
    +
    149 {
    +
    150  gil_function_requires<ImageViewConcept<SrcView>>();
    +
    151  gil_function_requires<MutableImageViewConcept<DiffView>>();
    +
    152 
    +
    153  gil_function_requires<ColorSpacesCompatibleConcept<
    +
    154  typename color_space_type<SrcView>::type, typename color_space_type<DiffView>::type>>();
    155 
    -
    156  gil_function_requires<ColorSpacesCompatibleConcept<
    -
    157  typename color_space_type<SrcView>::type, typename color_space_type<DiffView>::type>>();
    -
    158 
    -
    159  for (std::size_t i = 0; i < src_view1.num_channels(); i++)
    -
    160  {
    -
    161  difference_impl(nth_channel_view(src_view1, i), nth_channel_view(src_view2, i),
    -
    162  nth_channel_view(diff_view, i));
    -
    163  }
    -
    164 }
    -
    165 } // namespace detail
    -
    166 
    -
    179 template <typename SrcView, typename IntOpView, typename Kernel>
    -
    180 void dilate(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat,
    -
    181  int iterations)
    -
    182 {
    -
    183  copy_pixels(src_view, int_op_view);
    -
    184  for (int i = 0; i < iterations; ++i)
    -
    185  morph(int_op_view, int_op_view, ker_mat, detail::morphological_operation::dilation);
    -
    186 }
    -
    187 
    -
    200 template <typename SrcView, typename IntOpView, typename Kernel>
    -
    201 void erode(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat,
    -
    202  int iterations)
    -
    203 {
    -
    204  copy_pixels(src_view, int_op_view);
    -
    205  for (int i = 0; i < iterations; ++i)
    -
    206  morph(int_op_view, int_op_view, ker_mat, detail::morphological_operation::erosion);
    -
    207 }
    -
    208 
    -
    218 template <typename SrcView, typename IntOpView, typename Kernel>
    -
    219 void opening(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat)
    -
    220 {
    -
    221  erode(src_view, int_op_view, ker_mat, 1);
    -
    222  dilate(int_op_view, int_op_view, ker_mat, 1);
    -
    223 }
    -
    224 
    -
    235 template <typename SrcView, typename IntOpView, typename Kernel>
    -
    236 void closing(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat)
    -
    237 {
    -
    238  dilate(src_view, int_op_view, ker_mat, 1);
    -
    239  erode(int_op_view, int_op_view, ker_mat, 1);
    -
    240 }
    -
    241 
    -
    253 template <typename SrcView, typename DstView, typename Kernel>
    -
    254 void morphological_gradient(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    -
    255 {
    -
    256  using namespace boost::gil;
    -
    257  gil::image<typename DstView::value_type> int_dilate(src_view.dimensions()),
    -
    258  int_erode(src_view.dimensions());
    -
    259  dilate(src_view, view(int_dilate), ker_mat, 1);
    -
    260  erode(src_view, view(int_erode), ker_mat, 1);
    -
    261  difference(view(int_dilate), view(int_erode), dst_view);
    -
    262 }
    -
    263 
    -
    273 template <typename SrcView, typename DstView, typename Kernel>
    -
    274 void top_hat(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    -
    275 {
    -
    276  using namespace boost::gil;
    -
    277  gil::image<typename DstView::value_type> int_opening(src_view.dimensions());
    -
    278  opening(src_view, view(int_opening), ker_mat);
    -
    279  difference(src_view, view(int_opening), dst_view);
    -
    280 }
    -
    281 
    -
    291 template <typename SrcView, typename DstView, typename Kernel>
    -
    292 void black_hat(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    -
    293 {
    -
    294  using namespace boost::gil;
    -
    295  gil::image<typename DstView::value_type> int_closing(src_view.dimensions());
    -
    296  closing(src_view, view(int_closing), ker_mat);
    -
    297  difference(view(int_closing), src_view, dst_view);
    -
    298 }
    -
    300 }} // namespace boost::gil
    -
    301 #endif // BOOST_GIL_IMAGE_PROCESSING_MORPHOLOGY_HPP
    +
    156  for (std::size_t i = 0; i < src_view1.num_channels(); i++)
    +
    157  {
    +
    158  difference_impl(nth_channel_view(src_view1, i), nth_channel_view(src_view2, i),
    +
    159  nth_channel_view(diff_view, i));
    +
    160  }
    +
    161 }
    +
    162 } // namespace detail
    +
    163 
    +
    176 template <typename SrcView, typename IntOpView, typename Kernel>
    +
    177 void dilate(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat,
    +
    178  int iterations)
    +
    179 {
    +
    180  copy_pixels(src_view, int_op_view);
    +
    181  for (int i = 0; i < iterations; ++i)
    +
    182  morph(int_op_view, int_op_view, ker_mat, detail::morphological_operation::dilation);
    +
    183 }
    +
    184 
    +
    197 template <typename SrcView, typename IntOpView, typename Kernel>
    +
    198 void erode(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat,
    +
    199  int iterations)
    +
    200 {
    +
    201  copy_pixels(src_view, int_op_view);
    +
    202  for (int i = 0; i < iterations; ++i)
    +
    203  morph(int_op_view, int_op_view, ker_mat, detail::morphological_operation::erosion);
    +
    204 }
    +
    205 
    +
    215 template <typename SrcView, typename IntOpView, typename Kernel>
    +
    216 void opening(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat)
    +
    217 {
    +
    218  erode(src_view, int_op_view, ker_mat, 1);
    +
    219  dilate(int_op_view, int_op_view, ker_mat, 1);
    +
    220 }
    +
    221 
    +
    232 template <typename SrcView, typename IntOpView, typename Kernel>
    +
    233 void closing(SrcView const& src_view, IntOpView const& int_op_view, Kernel const& ker_mat)
    +
    234 {
    +
    235  dilate(src_view, int_op_view, ker_mat, 1);
    +
    236  erode(int_op_view, int_op_view, ker_mat, 1);
    +
    237 }
    +
    238 
    +
    250 template <typename SrcView, typename DstView, typename Kernel>
    +
    251 void morphological_gradient(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    +
    252 {
    +
    253  using namespace boost::gil;
    +
    254  gil::image<typename DstView::value_type> int_dilate(src_view.dimensions()),
    +
    255  int_erode(src_view.dimensions());
    +
    256  dilate(src_view, view(int_dilate), ker_mat, 1);
    +
    257  erode(src_view, view(int_erode), ker_mat, 1);
    +
    258  difference(view(int_dilate), view(int_erode), dst_view);
    +
    259 }
    +
    260 
    +
    270 template <typename SrcView, typename DstView, typename Kernel>
    +
    271 void top_hat(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    +
    272 {
    +
    273  using namespace boost::gil;
    +
    274  gil::image<typename DstView::value_type> int_opening(src_view.dimensions());
    +
    275  opening(src_view, view(int_opening), ker_mat);
    +
    276  difference(src_view, view(int_opening), dst_view);
    +
    277 }
    +
    278 
    +
    288 template <typename SrcView, typename DstView, typename Kernel>
    +
    289 void black_hat(SrcView const& src_view, DstView const& dst_view, Kernel const& ker_mat)
    +
    290 {
    +
    291  using namespace boost::gil;
    +
    292  gil::image<typename DstView::value_type> int_closing(src_view.dimensions());
    +
    293  closing(src_view, view(int_closing), ker_mat);
    +
    294  difference(view(int_closing), src_view, dst_view);
    +
    295 }
    +
    297 }} // namespace boost::gil
    +
    298 #endif // BOOST_GIL_IMAGE_PROCESSING_MORPHOLOGY_HPP
    container interface over image view. Models ImageConcept, PixelBasedConcept
    Definition: image.hpp:42
    -
    void difference(SrcView const &src_view1, SrcView const &src_view2, DiffView const &diff_view)
    Passes parameter values to the function 'difference_impl' alongwith individual channel views of input...
    Definition: morphology.hpp:151
    -
    void morph(SrcView const &src_view, DstView const &dst_view, Kernel const &ker_mat, morphological_operation identifier)
    Checks feasibility of the desired operation and passes parameter values to the function morph_impl al...
    Definition: morphology.hpp:106
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    void difference(SrcView const &src_view1, SrcView const &src_view2, DiffView const &diff_view)
    Passes parameter values to the function 'difference_impl' alongwith individual channel views of input...
    Definition: morphology.hpp:148
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    void morph(SrcView const &src_view, DstView const &dst_view, Kernel const &ker_mat, morphological_operation identifier)
    Checks feasibility of the desired operation and passes parameter values to the function morph_impl al...
    Definition: morphology.hpp:103
    Two color spaces are compatible if they are the same.
    Definition: color.hpp:60
    -
    void morph_impl(SrcView const &src_view, DstView const &dst_view, Kernel const &kernel, morphological_operation identifier)
    Implements morphological operations at pixel level.This function compares neighbouring pixel values a...
    Definition: morphology.hpp:43
    -
    BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
    std::copy for image views
    Definition: algorithm.hpp:288
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    void morph_impl(SrcView const &src_view, DstView const &dst_view, Kernel const &kernel, morphological_operation identifier)
    Implements morphological operations at pixel level.This function compares neighbouring pixel values a...
    Definition: morphology.hpp:40
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    +
    BOOST_FORCEINLINE void copy_pixels(const View1 &src, const View2 &dst)
    std::copy for image views
    Definition: algorithm.hpp:292
    Definition: color_convert.hpp:31
    -
    void difference_impl(SrcView const &src_view1, SrcView const &src_view2, DiffView const &diff_view)
    Calculates the difference between pixel values of first image_view and second image_view.
    Definition: morphology.hpp:135
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    +
    void difference_impl(SrcView const &src_view1, SrcView const &src_view2, DiffView const &diff_view)
    Calculates the difference between pixel values of first image_view and second image_view.
    Definition: morphology.hpp:132
    diff --git a/html/reference/namespaceboost.html b/html/reference/namespaceboost.html new file mode 100644 index 000000000..fcdc99db2 --- /dev/null +++ b/html/reference/namespaceboost.html @@ -0,0 +1,61 @@ + + + + + + + + + Generic Image Library: boost Namespace Reference + + + + + + + +
    + + + + + + +
    +

    Boost GIL

    +

    +
    +
    +
    + + + + + +
    +
    +
    +
    boost Namespace Reference
    +
    +
    + +

    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE) +More...

    +

    Detailed Description

    +

    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)

    +
    + + + + + + diff --git a/html/reference/namespaces.html b/html/reference/namespaces.html new file mode 100644 index 000000000..dfb6cb6f0 --- /dev/null +++ b/html/reference/namespaces.html @@ -0,0 +1,61 @@ + + + + + + + + + Generic Image Library: Namespace List + + + + + + + +
    + + + + + + +
    +

    Boost GIL

    +

    +
    +
    +
    + + + + + +
    +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    + + +
     NboostDefined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    +
    +
    + + + + + + diff --git a/html/reference/numeric_8hpp_source.html b/html/reference/numeric_8hpp_source.html index 4da852b42..53415c15a 100644 --- a/html/reference/numeric_8hpp_source.html +++ b/html/reference/numeric_8hpp_source.html @@ -67,7 +67,7 @@ $(function() {
    18 #include <cstdlib>
    19 #include <cmath>
    20 
    -
    21 namespace boost { namespace gil {
    +
    21 namespace boost { namespace gil {
    22 
    34 inline double normalized_sinc(double x)
    35 {
    @@ -114,182 +114,189 @@ $(function() {
    83 #endif
    84 
    91 template <typename T = float, typename Allocator = std::allocator<T>>
    - -
    93 {
    -
    94  if (side_length % 2 != 1)
    -
    95  throw std::invalid_argument("kernel dimensions should be odd and equal");
    -
    96  const float entry = 1.0f / static_cast<float>(side_length * side_length);
    -
    97 
    -
    98  detail::kernel_2d<T, Allocator> result(side_length, side_length / 2, side_length / 2);
    -
    99  for (auto& cell: result) {
    -
    100  cell = entry;
    -
    101  }
    -
    102 
    -
    103  return result;
    -
    104 }
    -
    105 
    -
    110 template <typename T = float, typename Allocator = std::allocator<T>>
    - -
    112 {
    -
    113  if (side_length % 2 != 1)
    -
    114  throw std::invalid_argument("kernel dimensions should be odd and equal");
    -
    115 
    -
    116  detail::kernel_2d<T, Allocator> result(side_length, side_length / 2, side_length / 2);
    -
    117  for (auto& cell: result) {
    -
    118  cell = 1.0f;
    -
    119  }
    -
    120 
    -
    121  return result;
    -
    122 }
    -
    123 
    -
    129 template <typename T = float, typename Allocator = std::allocator<T>>
    -
    130 inline detail::kernel_2d<T, Allocator> generate_gaussian_kernel(std::size_t side_length, double sigma)
    -
    131 {
    -
    132  if (side_length % 2 != 1)
    -
    133  throw std::invalid_argument("kernel dimensions should be odd and equal");
    -
    134 
    -
    135 
    -
    136  const double denominator = 2 * boost::gil::detail::pi * sigma * sigma;
    -
    137  auto middle = side_length / 2;
    -
    138  std::vector<T, Allocator> values(side_length * side_length);
    -
    139  for (std::size_t y = 0; y < side_length; ++y)
    -
    140  {
    -
    141  for (std::size_t x = 0; x < side_length; ++x)
    -
    142  {
    -
    143  const auto delta_x = middle > x ? middle - x : x - middle;
    -
    144  const auto delta_y = middle > y ? middle - y : y - middle;
    -
    145  const double power = (delta_x * delta_x + delta_y * delta_y) / (2 * sigma * sigma);
    -
    146  const double nominator = std::exp(-power);
    -
    147  const float value = static_cast<float>(nominator / denominator);
    -
    148  values[y * side_length + x] = value;
    -
    149  }
    -
    150  }
    -
    151 
    -
    152  return detail::kernel_2d<T, Allocator>(values.begin(), values.size(), middle, middle);
    -
    153 }
    -
    154 
    -
    162 template <typename T = float, typename Allocator = std::allocator<T>>
    -
    163 inline detail::kernel_2d<T, Allocator> generate_dx_sobel(unsigned int degree = 1)
    -
    164 {
    -
    165  switch (degree)
    -
    166  {
    -
    167  case 0:
    -
    168  {
    -
    169  return detail::get_identity_kernel<T, Allocator>();
    -
    170  }
    -
    171  case 1:
    -
    172  {
    -
    173  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    -
    174  std::copy(detail::dx_sobel.begin(), detail::dx_sobel.end(), result.begin());
    -
    175  return result;
    -
    176  }
    -
    177  default:
    -
    178  throw std::logic_error("not supported yet");
    -
    179  }
    -
    180 
    -
    181  //to not upset compiler
    -
    182  throw std::runtime_error("unreachable statement");
    -
    183 }
    -
    184 
    -
    192 template <typename T = float, typename Allocator = std::allocator<T>>
    - -
    194 {
    -
    195  switch (degree)
    -
    196  {
    -
    197  case 0:
    -
    198  {
    -
    199  return detail::get_identity_kernel<T, Allocator>();
    -
    200  }
    -
    201  case 1:
    +
    92 inline auto generate_normalized_mean(std::size_t side_length)
    + +
    94 {
    +
    95  if (side_length % 2 != 1)
    +
    96  throw std::invalid_argument("kernel dimensions should be odd and equal");
    +
    97  const float entry = 1.0f / static_cast<float>(side_length * side_length);
    +
    98 
    +
    99  detail::kernel_2d<T, Allocator> result(side_length, side_length / 2, side_length / 2);
    +
    100  for (auto& cell: result) {
    +
    101  cell = entry;
    +
    102  }
    +
    103 
    +
    104  return result;
    +
    105 }
    +
    106 
    +
    111 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    112 inline auto generate_unnormalized_mean(std::size_t side_length)
    + +
    114 {
    +
    115  if (side_length % 2 != 1)
    +
    116  throw std::invalid_argument("kernel dimensions should be odd and equal");
    +
    117 
    +
    118  detail::kernel_2d<T, Allocator> result(side_length, side_length / 2, side_length / 2);
    +
    119  for (auto& cell: result) {
    +
    120  cell = 1.0f;
    +
    121  }
    +
    122 
    +
    123  return result;
    +
    124 }
    +
    125 
    +
    131 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    132 inline auto generate_gaussian_kernel(std::size_t side_length, double sigma)
    + +
    134 {
    +
    135  if (side_length % 2 != 1)
    +
    136  throw std::invalid_argument("kernel dimensions should be odd and equal");
    +
    137 
    +
    138  const double denominator = 2 * boost::gil::detail::pi * sigma * sigma;
    +
    139  auto middle = side_length / 2;
    +
    140  std::vector<T, Allocator> values(side_length * side_length);
    +
    141  for (std::size_t y = 0; y < side_length; ++y)
    +
    142  {
    +
    143  for (std::size_t x = 0; x < side_length; ++x)
    +
    144  {
    +
    145  const auto delta_x = middle > x ? middle - x : x - middle;
    +
    146  const auto delta_y = middle > y ? middle - y : y - middle;
    +
    147  const double power = (delta_x * delta_x + delta_y * delta_y) / (2 * sigma * sigma);
    +
    148  const double nominator = std::exp(-power);
    +
    149  const float value = static_cast<float>(nominator / denominator);
    +
    150  values[y * side_length + x] = value;
    +
    151  }
    +
    152  }
    +
    153 
    +
    154  return detail::kernel_2d<T, Allocator>(values.begin(), values.size(), middle, middle);
    +
    155 }
    +
    156 
    +
    164 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    165 inline auto generate_dx_sobel(unsigned int degree = 1)
    + +
    167 {
    +
    168  switch (degree)
    +
    169  {
    +
    170  case 0:
    +
    171  {
    +
    172  return detail::get_identity_kernel<T, Allocator>();
    +
    173  }
    +
    174  case 1:
    +
    175  {
    +
    176  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    +
    177  std::copy(detail::dx_sobel.begin(), detail::dx_sobel.end(), result.begin());
    +
    178  return result;
    +
    179  }
    +
    180  default:
    +
    181  throw std::logic_error("not supported yet");
    +
    182  }
    +
    183 
    +
    184  //to not upset compiler
    +
    185  throw std::runtime_error("unreachable statement");
    +
    186 }
    +
    187 
    +
    195 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    196 inline auto generate_dx_scharr(unsigned int degree = 1)
    + +
    198 {
    +
    199  switch (degree)
    +
    200  {
    +
    201  case 0:
    202  {
    -
    203  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    -
    204  std::copy(detail::dx_scharr.begin(), detail::dx_scharr.end(), result.begin());
    -
    205  return result;
    -
    206  }
    -
    207  default:
    -
    208  throw std::logic_error("not supported yet");
    -
    209  }
    -
    210 
    -
    211  //to not upset compiler
    -
    212  throw std::runtime_error("unreachable statement");
    -
    213 }
    +
    203  return detail::get_identity_kernel<T, Allocator>();
    +
    204  }
    +
    205  case 1:
    +
    206  {
    +
    207  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    +
    208  std::copy(detail::dx_scharr.begin(), detail::dx_scharr.end(), result.begin());
    +
    209  return result;
    +
    210  }
    +
    211  default:
    +
    212  throw std::logic_error("not supported yet");
    +
    213  }
    214 
    -
    222 template <typename T = float, typename Allocator = std::allocator<T>>
    -
    223 inline detail::kernel_2d<T, Allocator> generate_dy_sobel(unsigned int degree = 1)
    -
    224 {
    -
    225  switch (degree)
    -
    226  {
    -
    227  case 0:
    -
    228  {
    -
    229  return detail::get_identity_kernel<T, Allocator>();
    -
    230  }
    -
    231  case 1:
    -
    232  {
    -
    233  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    -
    234  std::copy(detail::dy_sobel.begin(), detail::dy_sobel.end(), result.begin());
    -
    235  return result;
    -
    236  }
    -
    237  default:
    -
    238  throw std::logic_error("not supported yet");
    -
    239  }
    -
    240 
    -
    241  //to not upset compiler
    -
    242  throw std::runtime_error("unreachable statement");
    -
    243 }
    -
    244 
    -
    252 template <typename T = float, typename Allocator = std::allocator<T>>
    - -
    254 {
    -
    255  switch (degree)
    -
    256  {
    -
    257  case 0:
    -
    258  {
    -
    259  return detail::get_identity_kernel<T, Allocator>();
    -
    260  }
    -
    261  case 1:
    -
    262  {
    -
    263  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    -
    264  std::copy(detail::dy_scharr.begin(), detail::dy_scharr.end(), result.begin());
    -
    265  return result;
    +
    215  //to not upset compiler
    +
    216  throw std::runtime_error("unreachable statement");
    +
    217 }
    +
    218 
    +
    226 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    227 inline auto generate_dy_sobel(unsigned int degree = 1)
    + +
    229 {
    +
    230  switch (degree)
    +
    231  {
    +
    232  case 0:
    +
    233  {
    +
    234  return detail::get_identity_kernel<T, Allocator>();
    +
    235  }
    +
    236  case 1:
    +
    237  {
    +
    238  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    +
    239  std::copy(detail::dy_sobel.begin(), detail::dy_sobel.end(), result.begin());
    +
    240  return result;
    +
    241  }
    +
    242  default:
    +
    243  throw std::logic_error("not supported yet");
    +
    244  }
    +
    245 
    +
    246  //to not upset compiler
    +
    247  throw std::runtime_error("unreachable statement");
    +
    248 }
    +
    249 
    +
    257 template <typename T = float, typename Allocator = std::allocator<T>>
    +
    258 inline auto generate_dy_scharr(unsigned int degree = 1)
    + +
    260 {
    +
    261  switch (degree)
    +
    262  {
    +
    263  case 0:
    +
    264  {
    +
    265  return detail::get_identity_kernel<T, Allocator>();
    266  }
    -
    267  default:
    -
    268  throw std::logic_error("not supported yet");
    -
    269  }
    -
    270 
    -
    271  //to not upset compiler
    -
    272  throw std::runtime_error("unreachable statement");
    -
    273 }
    -
    274 
    -
    284 template <typename GradientView, typename OutputView>
    - -
    286  GradientView dx,
    -
    287  GradientView dy,
    -
    288  OutputView ddxx,
    -
    289  OutputView dxdy,
    -
    290  OutputView ddyy)
    -
    291 {
    -
    292  auto sobel_x = generate_dx_sobel();
    -
    293  auto sobel_y = generate_dy_sobel();
    -
    294  detail::convolve_2d(dx, sobel_x, ddxx);
    -
    295  detail::convolve_2d(dx, sobel_y, dxdy);
    -
    296  detail::convolve_2d(dy, sobel_y, ddyy);
    -
    297 }
    -
    298 
    -
    299 }} // namespace boost::gil
    -
    300 
    -
    301 #endif
    +
    267  case 1:
    +
    268  {
    +
    269  detail::kernel_2d<T, Allocator> result(3, 1, 1);
    +
    270  std::copy(detail::dy_scharr.begin(), detail::dy_scharr.end(), result.begin());
    +
    271  return result;
    +
    272  }
    +
    273  default:
    +
    274  throw std::logic_error("not supported yet");
    +
    275  }
    +
    276 
    +
    277  //to not upset compiler
    +
    278  throw std::runtime_error("unreachable statement");
    +
    279 }
    +
    280 
    +
    290 template <typename GradientView, typename OutputView>
    + +
    292  GradientView dx,
    +
    293  GradientView dy,
    +
    294  OutputView ddxx,
    +
    295  OutputView dxdy,
    +
    296  OutputView ddyy)
    +
    297 {
    +
    298  auto sobel_x = generate_dx_sobel();
    +
    299  auto sobel_y = generate_dy_sobel();
    +
    300  detail::convolve_2d(dx, sobel_x, ddxx);
    +
    301  detail::convolve_2d(dx, sobel_y, dxdy);
    +
    302  detail::convolve_2d(dy, sobel_y, ddyy);
    +
    303 }
    +
    304 
    +
    305 }} // namespace boost::gil
    +
    306 
    +
    307 #endif
    -
    detail::kernel_2d< T, Allocator > generate_dy_sobel(unsigned int degree=1)
    Generates Sobel operator in vertical direction.
    Definition: numeric.hpp:223
    BOOST_FORCEINLINE auto copy(boost::gil::pixel< T, CS > *first, boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > *
    Copy when both src and dst are interleaved and of the same type can be just memmove.
    Definition: algorithm.hpp:145
    -
    detail::kernel_2d< T, Allocator > generate_dx_scharr(unsigned int degree=1)
    Generate Scharr operator in horizontal direction.
    Definition: numeric.hpp:193
    -
    detail::kernel_2d< T, Allocator > generate_unnormalized_mean(std::size_t side_length)
    Generate kernel with all 1s.
    Definition: numeric.hpp:111
    -
    void compute_hessian_entries(GradientView dx, GradientView dy, OutputView ddxx, OutputView dxdy, OutputView ddyy)
    Compute xy gradient, and second order x and y gradients.
    Definition: numeric.hpp:285
    -
    detail::kernel_2d< T, Allocator > generate_normalized_mean(std::size_t side_length)
    Generate mean kernel.
    Definition: numeric.hpp:92
    -
    detail::kernel_2d< T, Allocator > generate_gaussian_kernel(std::size_t side_length, double sigma)
    Generate Gaussian kernel.
    Definition: numeric.hpp:130
    -
    detail::kernel_2d< T, Allocator > generate_dx_sobel(unsigned int degree=1)
    Generates Sobel operator in horizontal direction.
    Definition: numeric.hpp:163
    +
    auto generate_dy_sobel(unsigned int degree=1) -> detail::kernel_2d< T, Allocator >
    Generates Sobel operator in vertical direction.
    Definition: numeric.hpp:227
    +
    auto generate_unnormalized_mean(std::size_t side_length) -> detail::kernel_2d< T, Allocator >
    Generate kernel with all 1s.
    Definition: numeric.hpp:112
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    void compute_hessian_entries(GradientView dx, GradientView dy, OutputView ddxx, OutputView dxdy, OutputView ddyy)
    Compute xy gradient, and second order x and y gradients.
    Definition: numeric.hpp:291
    +
    auto generate_dx_sobel(unsigned int degree=1) -> detail::kernel_2d< T, Allocator >
    Generates Sobel operator in horizontal direction.
    Definition: numeric.hpp:165
    +
    auto generate_normalized_mean(std::size_t side_length) -> detail::kernel_2d< T, Allocator >
    Generate mean kernel.
    Definition: numeric.hpp:92
    variable-size kernel
    Definition: kernel.hpp:272
    -
    detail::kernel_2d< T, Allocator > generate_dy_scharr(unsigned int degree=1)
    Generate Scharr operator in vertical direction.
    Definition: numeric.hpp:253
    +
    auto generate_dx_scharr(unsigned int degree=1) -> detail::kernel_2d< T, Allocator >
    Generate Scharr operator in horizontal direction.
    Definition: numeric.hpp:196
    +
    auto generate_gaussian_kernel(std::size_t side_length, double sigma) -> detail::kernel_2d< T, Allocator >
    Generate Gaussian kernel.
    Definition: numeric.hpp:132
    double lanczos(double x, std::ptrdiff_t a)
    Lanczos response at point x.
    Definition: numeric.hpp:46
    +
    auto generate_dy_scharr(unsigned int degree=1) -> detail::kernel_2d< T, Allocator >
    Generate Scharr operator in vertical direction.
    Definition: numeric.hpp:258
    diff --git a/html/reference/packed__pixel_8hpp_source.html b/html/reference/packed__pixel_8hpp_source.html index 6236c12f2..5b64c4b6f 100644 --- a/html/reference/packed__pixel_8hpp_source.html +++ b/html/reference/packed__pixel_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
    14 #include <functional>
    15 #include <type_traits>
    16 
    -
    17 namespace boost { namespace gil {
    +
    17 namespace boost { namespace gil {
    18 
    21 
    25 
    @@ -283,6 +283,7 @@ $(function() {
    275 
    276 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    auto at_c(detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< E >::type
    Provides mutable access to the K-th element, in physical order.
    Definition: color_base.hpp:632
    diff --git a/html/reference/path__spec_8hpp_source.html b/html/reference/path__spec_8hpp_source.html index c275f1ef2..ab433acb7 100644 --- a/html/reference/path__spec_8hpp_source.html +++ b/html/reference/path__spec_8hpp_source.html @@ -63,14 +63,14 @@ $(function() {
    14 #include <string>
    15 #include <type_traits>
    16 
    -
    17 namespace boost { namespace gil { namespace detail {
    +
    17 namespace boost { namespace gil { namespace detail {
    18 
    19 template<typename P> struct is_supported_path_spec : std::false_type {};
    20 template<> struct is_supported_path_spec< std::string > : std::true_type {};
    21 template<> struct is_supported_path_spec< const std::string > : std::true_type {};
    22 template<> struct is_supported_path_spec< std::wstring > : std::true_type {};
    23 template<> struct is_supported_path_spec< const std::wstring > : std::true_type {};
    -
    24 template<> struct is_supported_path_spec< const char* > : std::true_type {};
    +
    24 template<> struct is_supported_path_spec< char const* > : std::true_type {};
    25 template<> struct is_supported_path_spec< char* > : std::true_type {};
    26 template<> struct is_supported_path_spec< const wchar_t* > : std::true_type {};
    27 template<> struct is_supported_path_spec< wchar_t* > : std::true_type {};
    @@ -97,7 +97,7 @@ $(function() {
    48  return std::string( c, c + len );
    49 }
    50 
    -
    51 inline std::string convert_to_string( const char* str )
    +
    51 inline std::string convert_to_string( char const* str )
    52 {
    53  return std::string( str );
    54 }
    @@ -112,22 +112,22 @@ $(function() {
    63  return convert_to_string(path.string());
    64 }
    65 
    -
    66 inline const char* convert_to_native_string( char* str )
    +
    66 inline char const* convert_to_native_string( char* str )
    67 {
    68  return str;
    69 }
    70 
    -
    71 inline const char* convert_to_native_string( const char* str )
    +
    71 inline char const* convert_to_native_string( char const* str )
    72 {
    73  return str;
    74 }
    75 
    -
    76 inline const char* convert_to_native_string( const std::string& str )
    +
    76 inline char const* convert_to_native_string( const std::string& str )
    77 {
    78  return str.c_str();
    79 }
    80 
    -
    81 inline const char* convert_to_native_string( const wchar_t* str )
    +
    81 inline char const* convert_to_native_string( const wchar_t* str )
    82 {
    83  std::size_t len = wcslen( str ) + 1;
    84  char* c = new char[len];
    @@ -136,7 +136,7 @@ $(function() {
    87  return c;
    88 }
    89 
    -
    90 inline const char* convert_to_native_string( const std::wstring& str )
    +
    90 inline char const* convert_to_native_string( std::wstring const& str )
    91 {
    92  std::size_t len = wcslen( str.c_str() ) + 1;
    93  char* c = new char[len];
    @@ -149,6 +149,7 @@ $(function() {
    100 
    101 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/pixel_8hpp_source.html b/html/reference/pixel_8hpp_source.html index 12cc165a7..b730967fc 100644 --- a/html/reference/pixel_8hpp_source.html +++ b/html/reference/pixel_8hpp_source.html @@ -69,7 +69,7 @@ $(function() {
    20 #include <functional>
    21 #include <type_traits>
    22 
    -
    23 namespace boost { namespace gil {
    +
    23 namespace boost { namespace gil {
    24 
    25 // Forward-declare gray_t
    26 struct gray_color_t;
    @@ -301,6 +301,7 @@ $(function() {
    300 
    301 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    mp11::mp_list< gray_color_t > gray_t
    Definition: gray.hpp:21
    diff --git a/html/reference/pixel__based_8hpp_source.html b/html/reference/pixel__based_8hpp_source.html index 28425b501..ce30e21d0 100644 --- a/html/reference/pixel__based_8hpp_source.html +++ b/html/reference/pixel__based_8hpp_source.html @@ -76,7 +76,7 @@ $(function() {
    27 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    28 #endif
    29 
    -
    30 namespace boost { namespace gil {
    +
    30 namespace boost { namespace gil {
    31 
    52 template <typename P>
    @@ -123,6 +123,7 @@ $(function() {
    104 #endif
    Concept for homogeneous pixel-based GIL constructs.
    Definition: pixel_based.hpp:83
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Concept for all pixel-based GIL constructs.
    Definition: pixel_based.hpp:53
    Definition: color_convert.hpp:31
    Returns the number of channels of a pixel-based GIL construct.
    Definition: locator.hpp:38
    diff --git a/html/reference/pixel__dereference_8hpp_source.html b/html/reference/pixel__dereference_8hpp_source.html index f010be89e..a539f9af1 100644 --- a/html/reference/pixel__dereference_8hpp_source.html +++ b/html/reference/pixel__dereference_8hpp_source.html @@ -79,7 +79,7 @@ $(function() {
    30 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    31 #endif
    32 
    -
    33 namespace boost { namespace gil {
    +
    33 namespace boost { namespace gil {
    34 
    52 template <typename D>
    @@ -148,6 +148,7 @@ $(function() {
    Represents a unary function object that can be invoked upon dereferencing a pixel iterator.
    Definition: pixel_dereference.hpp:53
    Pixel concept - A color base whose elements are channels.
    Definition: concepts/pixel.hpp:63
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/pixel__iterator_8hpp_source.html b/html/reference/pixel__iterator_8hpp_source.html index 230eacd6a..e32e9c697 100644 --- a/html/reference/pixel__iterator_8hpp_source.html +++ b/html/reference/pixel__iterator_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 #include <iterator>
    17 #include <type_traits>
    18 
    -
    19 namespace boost { namespace gil {
    +
    19 namespace boost { namespace gil {
    20 
    21 //forwarded declaration (as this file is included in step_iterator.hpp)
    22 template <typename Iterator>
    @@ -186,6 +186,7 @@ $(function() {
    Metafunction predicate returning whether the given iterator allows for changing its values.
    Definition: pixel_iterator.hpp:49
    Returns the type of an iterator just like the input iterator, except operating over immutable values.
    Definition: pixel_iterator.hpp:40
    Definition: pixel_iterator.hpp:124
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    Changes the base iterator of an iterator adaptor. Provide an specialization when introducing new iter...
    Definition: pixel_iterator.hpp:36
    diff --git a/html/reference/pixel__iterator__adaptor_8hpp_source.html b/html/reference/pixel__iterator__adaptor_8hpp_source.html index 16ce109ea..94db23e6a 100644 --- a/html/reference/pixel__iterator__adaptor_8hpp_source.html +++ b/html/reference/pixel__iterator__adaptor_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 
    16 #include <iterator>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    23 
    26 
    @@ -159,74 +159,78 @@ $(function() {
    120 // MemoryBasedIteratorConcept
    122 
    123 template <typename Iterator, typename DFn>
    -
    124 struct byte_to_memunit<dereference_iterator_adaptor<Iterator,DFn> > : public byte_to_memunit<Iterator> {};
    +
    124 struct byte_to_memunit<dereference_iterator_adaptor<Iterator,DFn>> : public byte_to_memunit<Iterator> {};
    125 
    126 template <typename Iterator, typename DFn>
    -
    127 inline typename std::iterator_traits<Iterator>::difference_type
    -
    128 memunit_step(const dereference_iterator_adaptor<Iterator,DFn>& p) {
    -
    129  return memunit_step(p.base());
    -
    130 }
    -
    131 
    -
    132 template <typename Iterator, typename DFn>
    -
    133 inline typename std::iterator_traits<Iterator>::difference_type
    -
    134 memunit_distance(const dereference_iterator_adaptor<Iterator,DFn>& p1,
    -
    135  const dereference_iterator_adaptor<Iterator,DFn>& p2) {
    -
    136  return memunit_distance(p1.base(),p2.base());
    -
    137 }
    -
    138 
    -
    139 template <typename Iterator, typename DFn>
    -
    140 inline void memunit_advance(dereference_iterator_adaptor<Iterator,DFn>& p,
    -
    141  typename std::iterator_traits<Iterator>::difference_type diff) {
    -
    142  memunit_advance(p.base(), diff);
    -
    143 }
    -
    144 
    -
    145 template <typename Iterator, typename DFn>
    -
    146 inline dereference_iterator_adaptor<Iterator,DFn>
    -
    147 memunit_advanced(const dereference_iterator_adaptor<Iterator,DFn>& p,
    -
    148  typename std::iterator_traits<Iterator>::difference_type diff) {
    -
    149  return dereference_iterator_adaptor<Iterator,DFn>(memunit_advanced(p.base(), diff), p.deref_fn());
    -
    150 }
    -
    151 
    -
    152 
    -
    153 template <typename Iterator, typename DFn>
    -
    154 inline
    -
    155 typename std::iterator_traits<dereference_iterator_adaptor<Iterator,DFn> >::reference
    -
    156 memunit_advanced_ref(const dereference_iterator_adaptor<Iterator,DFn>& p,
    -
    157  typename std::iterator_traits<Iterator>::difference_type diff) {
    -
    158  return *memunit_advanced(p, diff);
    -
    159 }
    -
    160 
    -
    162 // HasDynamicXStepTypeConcept
    -
    164 
    -
    165 template <typename Iterator, typename DFn>
    -
    166 struct dynamic_x_step_type<dereference_iterator_adaptor<Iterator,DFn> > {
    -
    167  using type = dereference_iterator_adaptor<typename dynamic_x_step_type<Iterator>::type,DFn>;
    -
    168 };
    -
    169 
    -
    172 template <typename Iterator, typename Deref>
    -
    173 struct iterator_add_deref {
    -
    174  BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    -
    175 
    -
    176  using type = dereference_iterator_adaptor<Iterator, Deref>;
    -
    177 
    -
    178  static type make(const Iterator& it, const Deref& d) { return type(it,d); }
    -
    179 };
    +
    127 inline auto memunit_step(dereference_iterator_adaptor<Iterator,DFn> const& p)
    +
    128  -> typename std::iterator_traits<Iterator>::difference_type
    +
    129 {
    +
    130  return memunit_step(p.base());
    +
    131 }
    +
    132 
    +
    133 template <typename Iterator, typename DFn>
    +
    134 inline auto memunit_distance(dereference_iterator_adaptor<Iterator,DFn> const& p1,
    +
    135  dereference_iterator_adaptor<Iterator,DFn> const& p2)
    +
    136  -> typename std::iterator_traits<Iterator>::difference_type
    +
    137 {
    +
    138  return memunit_distance(p1.base(),p2.base());
    +
    139 }
    +
    140 
    +
    141 template <typename Iterator, typename DFn>
    +
    142 inline void memunit_advance(dereference_iterator_adaptor<Iterator,DFn>& p,
    +
    143  typename std::iterator_traits<Iterator>::difference_type diff) {
    +
    144  memunit_advance(p.base(), diff);
    +
    145 }
    +
    146 
    +
    147 template <typename Iterator, typename DFn>
    +
    148 inline auto memunit_advanced(dereference_iterator_adaptor<Iterator,DFn> const& p,
    +
    149  typename std::iterator_traits<Iterator>::difference_type diff)
    +
    150  -> dereference_iterator_adaptor<Iterator,DFn>
    +
    151 {
    +
    152  return dereference_iterator_adaptor<Iterator,DFn>(memunit_advanced(p.base(), diff), p.deref_fn());
    +
    153 }
    +
    154 
    +
    155 
    +
    156 template <typename Iterator, typename DFn>
    +
    157 inline auto memunit_advanced_ref(dereference_iterator_adaptor<Iterator,DFn> const& p,
    +
    158  typename std::iterator_traits<Iterator>::difference_type diff)
    +
    159  -> typename std::iterator_traits<dereference_iterator_adaptor<Iterator,DFn> >::reference
    +
    160 {
    +
    161  return *memunit_advanced(p, diff);
    +
    162 }
    +
    163 
    +
    165 // HasDynamicXStepTypeConcept
    +
    167 
    +
    168 template <typename Iterator, typename DFn>
    +
    169 struct dynamic_x_step_type<dereference_iterator_adaptor<Iterator,DFn> > {
    +
    170  using type = dereference_iterator_adaptor<typename dynamic_x_step_type<Iterator>::type,DFn>;
    +
    171 };
    +
    172 
    +
    175 template <typename Iterator, typename Deref>
    +
    176 struct iterator_add_deref {
    +
    177  BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    +
    178 
    +
    179  using type = dereference_iterator_adaptor<Iterator, Deref>;
    180 
    -
    183 template <typename Iterator, typename PREV_DEREF, typename Deref>
    -
    184 struct iterator_add_deref<dereference_iterator_adaptor<Iterator, PREV_DEREF>,Deref> {
    -
    185 // BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    -
    186 
    - -
    188 
    -
    189  static type make(const dereference_iterator_adaptor<Iterator, PREV_DEREF>& it, const Deref& d) {
    -
    190  return type(it.base(),deref_compose<Deref,PREV_DEREF>(d,it.deref_fn()));
    -
    191  }
    -
    192 };
    -
    193 
    -
    194 }} // namespace boost::gil
    -
    195 
    -
    196 #endif
    +
    181  static type make(const Iterator& it, const Deref& d) { return type(it,d); }
    +
    182 };
    +
    183 
    +
    186 template <typename Iterator, typename PREV_DEREF, typename Deref>
    +
    187 struct iterator_add_deref<dereference_iterator_adaptor<Iterator, PREV_DEREF>,Deref> {
    +
    188 // BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    +
    189 
    + +
    191 
    +
    192  static type make(const dereference_iterator_adaptor<Iterator, PREV_DEREF>& it, const Deref& d) {
    +
    193  return type(it.base(),deref_compose<Deref,PREV_DEREF>(d,it.deref_fn()));
    +
    194  }
    +
    195 };
    +
    196 
    +
    197 }} // namespace boost::gil
    +
    198 
    +
    199 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Returns the type (and creates an instance) of an iterator that invokes the given dereference adaptor ...
    Definition: locator.hpp:27
    Composes two dereference function objects. Similar to std::unary_compose but needs to pull some alias...
    Definition: utilities.hpp:121
    reference operator[](difference_type d) const
    Definition: pixel_iterator_adaptor.hpp:55
    diff --git a/html/reference/pixel__locator_8hpp_source.html b/html/reference/pixel__locator_8hpp_source.html index f7ecd2070..1d0fe2efd 100644 --- a/html/reference/pixel__locator_8hpp_source.html +++ b/html/reference/pixel__locator_8hpp_source.html @@ -82,7 +82,7 @@ $(function() {
    33 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
    34 #endif
    35 
    -
    36 namespace boost { namespace gil {
    +
    36 namespace boost { namespace gil {
    37 
    41 
    45 
    @@ -322,6 +322,7 @@ $(function() {
    N-dimensional locator over mutable pixels.
    Definition: pixel_locator.hpp:358
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Base template for types that model HasDynamicXStepTypeConcept.
    Definition: dynamic_step.hpp:17
    2-dimensional locator over immutable values
    Definition: pixel_locator.hpp:221
    GIL's 2-dimensional locator over immutable GIL pixels.
    Definition: pixel_locator.hpp:291
    diff --git a/html/reference/pixel__numeric__operations_8hpp_source.html b/html/reference/pixel__numeric__operations_8hpp_source.html index d8a80f306..d75e746b8 100644 --- a/html/reference/pixel__numeric__operations_8hpp_source.html +++ b/html/reference/pixel__numeric__operations_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 #include <boost/gil/pixel.hpp>
    14 #include <boost/gil/channel_numeric_operations.hpp>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    18 // Function objects and utilities for pixel-wise numeric operations.
    19 //
    @@ -231,6 +231,7 @@ $(function() {
    Arithmetic operation of division of two channel values.
    Definition: channel_numeric_operations.hpp:98
    Performs channel-wise division of two pixels.
    Definition: pixel_numeric_operations.hpp:147
    Operation of setting channel value to zero.
    Definition: channel_numeric_operations.hpp:220
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Arithmetic operation of multiplication of two channel values.
    Definition: channel_numeric_operations.hpp:77
    Arithmetic operation of dividing channel value by scalar.
    Definition: channel_numeric_operations.hpp:181
    Performs channel-wise division of pixel elements by scalar.
    Definition: pixel_numeric_operations.hpp:127
    diff --git a/html/reference/planar__pixel__iterator_8hpp_source.html b/html/reference/planar__pixel__iterator_8hpp_source.html index b0aa3ba70..c633e9742 100644 --- a/html/reference/planar__pixel__iterator_8hpp_source.html +++ b/html/reference/planar__pixel__iterator_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 #include <iterator>
    18 #include <type_traits>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    22 //forward declaration (as this file is included in planar_pixel_reference.hpp)
    23 template <typename ChannelReference, typename ColorSpace>
    @@ -225,52 +225,62 @@ $(function() {
    200 // MemoryBasedIteratorConcept
    202 
    203 template <typename IC, typename C>
    -
    204 inline std::ptrdiff_t memunit_step(const planar_pixel_iterator<IC,C>&) { return sizeof(typename std::iterator_traits<IC>::value_type); }
    -
    205 
    -
    206 template <typename IC, typename C>
    -
    207 inline std::ptrdiff_t memunit_distance(const planar_pixel_iterator<IC,C>& p1, const planar_pixel_iterator<IC,C>& p2) {
    -
    208  return memunit_distance(gil::at_c<0>(p1),gil::at_c<0>(p2));
    -
    209 }
    -
    210 
    -
    211 template <typename IC>
    -
    212 struct memunit_advance_fn {
    -
    213  memunit_advance_fn(std::ptrdiff_t diff) : _diff(diff) {}
    -
    214  IC operator()(const IC& p) const { return memunit_advanced(p,_diff); }
    -
    215 
    -
    216  std::ptrdiff_t _diff;
    -
    217 };
    -
    218 
    -
    219 template <typename IC, typename C>
    -
    220 inline void memunit_advance(planar_pixel_iterator<IC,C>& p, std::ptrdiff_t diff) {
    -
    221  static_transform(p, p, memunit_advance_fn<IC>(diff));
    -
    222 }
    -
    223 
    -
    224 template <typename IC, typename C>
    -
    225 inline planar_pixel_iterator<IC,C> memunit_advanced(const planar_pixel_iterator<IC,C>& p, std::ptrdiff_t diff) {
    -
    226  planar_pixel_iterator<IC,C> ret=p;
    -
    227  memunit_advance(ret, diff);
    -
    228  return ret;
    -
    229 }
    -
    230 
    -
    231 template <typename ChannelPtr, typename ColorSpace>
    -
    232 inline planar_pixel_reference<typename std::iterator_traits<ChannelPtr>::reference,ColorSpace>
    -
    233  memunit_advanced_ref(const planar_pixel_iterator<ChannelPtr,ColorSpace>& ptr, std::ptrdiff_t diff) {
    -
    234  return planar_pixel_reference<typename std::iterator_traits<ChannelPtr>::reference,ColorSpace>(ptr, diff);
    -
    235 }
    -
    236 
    -
    238 // HasDynamicXStepTypeConcept
    -
    240 
    -
    241 template <typename IC, typename C>
    -
    242 struct dynamic_x_step_type<planar_pixel_iterator<IC,C> > {
    -
    243  using type = memory_based_step_iterator<planar_pixel_iterator<IC,C>>;
    -
    244 };
    -
    245 } } // namespace boost::gil
    -
    246 
    -
    247 #endif
    +
    204 inline auto memunit_step(planar_pixel_iterator<IC,C> const&)
    +
    205  -> std::ptrdiff_t
    +
    206 {
    +
    207  return sizeof(typename std::iterator_traits<IC>::value_type);
    +
    208 }
    +
    209 
    +
    210 template <typename IC, typename C>
    +
    211 inline auto memunit_distance(planar_pixel_iterator<IC,C> const& p1, planar_pixel_iterator<IC,C> const& p2)
    +
    212  -> std::ptrdiff_t
    +
    213 {
    +
    214  return memunit_distance(gil::at_c<0>(p1),gil::at_c<0>(p2));
    +
    215 }
    +
    216 
    +
    217 template <typename IC>
    +
    218 struct memunit_advance_fn {
    +
    219  memunit_advance_fn(std::ptrdiff_t diff) : _diff(diff) {}
    +
    220  IC operator()(const IC& p) const { return memunit_advanced(p,_diff); }
    +
    221 
    +
    222  std::ptrdiff_t _diff;
    +
    223 };
    +
    224 
    +
    225 template <typename IC, typename C>
    +
    226 inline void memunit_advance(planar_pixel_iterator<IC,C>& p, std::ptrdiff_t diff) {
    +
    227  static_transform(p, p, memunit_advance_fn<IC>(diff));
    +
    228 }
    +
    229 
    +
    230 template <typename IC, typename C>
    +
    231 inline auto memunit_advanced(planar_pixel_iterator<IC,C> const& p, std::ptrdiff_t diff)
    +
    232  -> planar_pixel_iterator<IC,C>
    +
    233 {
    +
    234  planar_pixel_iterator<IC,C> ret=p;
    +
    235  memunit_advance(ret, diff);
    +
    236  return ret;
    +
    237 }
    +
    238 
    +
    239 template <typename ChannelPtr, typename ColorSpace>
    +
    240 inline auto memunit_advanced_ref(planar_pixel_iterator<ChannelPtr,ColorSpace> const& ptr, std::ptrdiff_t diff)
    +
    241  -> planar_pixel_reference<typename std::iterator_traits<ChannelPtr>::reference,ColorSpace>
    +
    242 {
    +
    243  return planar_pixel_reference<typename std::iterator_traits<ChannelPtr>::reference,ColorSpace>(ptr, diff);
    +
    244 }
    +
    245 
    +
    247 // HasDynamicXStepTypeConcept
    +
    249 
    +
    250 template <typename IC, typename C>
    +
    251 struct dynamic_x_step_type<planar_pixel_iterator<IC,C> > {
    +
    252  using type = memory_based_step_iterator<planar_pixel_iterator<IC,C>>;
    +
    253 };
    +
    254 } } // namespace boost::gil
    +
    255 
    +
    256 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    reference operator[](difference_type d) const
    Definition: planar_pixel_iterator.hpp:116
    planar_pixel_iterator(P *pix)
    Definition: planar_pixel_iterator.hpp:97
    -
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1083
    +
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1087
    diff --git a/html/reference/planar__pixel__reference_8hpp_source.html b/html/reference/planar__pixel__reference_8hpp_source.html index c27159816..3a3af1cac 100644 --- a/html/reference/planar__pixel__reference_8hpp_source.html +++ b/html/reference/planar__pixel__reference_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 
    18 #include <type_traits>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    26 
    30 
    @@ -275,6 +275,7 @@ $(function() {
    263 #endif
    A reference proxy to a planar pixel.
    Definition: metafunctions.hpp:26
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void swap(const boost::gil::planar_pixel_reference< CR, CS > x, const boost::gil::planar_pixel_reference< CR, CS > y)
    swap for planar_pixel_reference
    Definition: planar_pixel_reference.hpp:257
    Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept,...
    Definition: metafunctions.hpp:24
    Definition: color_convert.hpp:31
    diff --git a/html/reference/point_8hpp_source.html b/html/reference/point_8hpp_source.html index 35fbf7790..13d46602a 100644 --- a/html/reference/point_8hpp_source.html +++ b/html/reference/point_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 #include <cstddef>
    17 #include <type_traits>
    18 
    -
    19 namespace boost { namespace gil {
    +
    19 namespace boost { namespace gil {
    20 
    30 
    34 template <typename T>
    @@ -208,8 +208,8 @@ $(function() {
    180  double const x = static_cast<double>(p.x) / static_cast<double>(d);
    181  double const y = static_cast<double>(p.y) / static_cast<double>(d);
    182  return point<result_type>{
    -
    183  static_cast<result_type>(iround(x)),
    -
    184  static_cast<result_type>(iround(y))};
    +
    183  static_cast<result_type>(iround(x)),
    +
    184  static_cast<result_type>(iround(y))};
    185  }
    186  else
    187  {
    @@ -263,40 +263,40 @@ $(function() {
    239 
    246 
    248 template <typename T>
    - +
    249 inline auto iround(point<T> const& p) -> point<std::ptrdiff_t>
    250 {
    251  static_assert(std::is_integral<T>::value, "T is not integer");
    252  return { static_cast<std::ptrdiff_t>(p.x), static_cast<std::ptrdiff_t>(p.y) };
    253 }
    254 
    - +
    256 inline auto iround(point<float> const& p) -> point<std::ptrdiff_t>
    257 {
    -
    258  return { iround(p.x), iround(p.y) };
    +
    258  return { iround(p.x), iround(p.y) };
    259 }
    260 
    - +
    263 {
    -
    264  return { iround(p.x), iround(p.y) };
    +
    264  return { iround(p.x), iround(p.y) };
    265 }
    266 
    - +
    268 inline auto ifloor(point<float> const& p) -> point<std::ptrdiff_t>
    269 {
    -
    270  return { ifloor(p.x), ifloor(p.y) };
    +
    270  return { ifloor(p.x), ifloor(p.y) };
    271 }
    272 
    - +
    275 {
    -
    276  return { ifloor(p.x), ifloor(p.y) };
    +
    276  return { ifloor(p.x), ifloor(p.y) };
    277 }
    278 
    - +
    280 inline auto iceil(point<float> const& p) -> point<std::ptrdiff_t>
    281 {
    -
    282  return { iceil(p.x), iceil(p.y) };
    +
    282  return { iceil(p.x), iceil(p.y) };
    283 }
    284 
    - +
    286 inline auto iceil(point<double> const& p) -> point<std::ptrdiff_t>
    287 {
    -
    288  return { iceil(p.x), iceil(p.y) };
    +
    288  return { iceil(p.x), iceil(p.y) };
    289 }
    290 
    291 }} // namespace boost::gil
    @@ -304,13 +304,14 @@ $(function() {
    293 #endif
    BOOST_FORCEINLINE T & axis_value(point< T > &p)
    Definition: point.hpp:234
    -
    point< std::ptrdiff_t > ifloor(point< double > const &p)
    Definition: point.hpp:274
    -
    point< std::ptrdiff_t > iceil(point< double > const &p)
    Definition: point.hpp:286
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto iround(point< double > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:262
    +
    auto iceil(point< double > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:286
    BOOST_FORCEINLINE bool operator!=(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:137
    BOOST_FORCEINLINE auto operator/(point< T > const &p, D d) -> typename std::enable_if< std::is_arithmetic< D >::value, point< typename detail::std_common_type< T, D >::type > >::type
    Definition: point.hpp:169
    2D point both axes of which have the same dimension type
    Definition: locator.hpp:28
    BOOST_FORCEINLINE point< T > operator+(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:145
    -
    point< std::ptrdiff_t > iround(point< double > const &p)
    Definition: point.hpp:262
    +
    auto ifloor(point< double > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:274
    BOOST_FORCEINLINE auto operator*(M m, point< T > const &p) -> typename std::enable_if< std::is_arithmetic< M >::value, point< typename detail::std_common_type< T, M >::type > >::type
    Definition: point.hpp:210
    BOOST_FORCEINLINE point< T > operator-(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:161
    BOOST_FORCEINLINE bool operator==(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:129
    diff --git a/html/reference/position__iterator_8hpp_source.html b/html/reference/position__iterator_8hpp_source.html index f1574fef4..f7708d71c 100644 --- a/html/reference/position__iterator_8hpp_source.html +++ b/html/reference/position__iterator_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
    14 
    15 #include <type_traits>
    16 
    -
    17 namespace boost { namespace gil {
    +
    17 namespace boost { namespace gil {
    18 
    23 
    30 template <typename Deref, int Dim>
    @@ -82,74 +82,89 @@ $(function() {
    43  using point_t = typename Deref::argument_type;
    44 
    -
    46  position_iterator(const point_t& p, const point_t& step, const Deref& d) : _p(p), _step(step), _d(d) {}
    +
    46  position_iterator(point_t const& p, point_t const& step, Deref const& d) : _p(p), _step(step), _d(d) {}
    47 
    -
    48  position_iterator(const position_iterator& p) : _p(p._p), _step(p._step), _d(p._d) {}
    -
    49  template <typename D> position_iterator(const position_iterator<D,Dim>& p) : _p(p._p), _step(p._step), _d(p._d) {}
    -
    50  position_iterator& operator=(const position_iterator& p) { _p=p._p; _d=p._d; _step=p._step; return *this; }
    -
    51 
    -
    52  const point_t& pos() const { return _p; }
    -
    53  const point_t& step() const { return _step; }
    -
    54  const Deref& deref_fn() const { return _d; }
    -
    55 
    -
    56  void set_step(difference_type s) { _step[Dim]=s; }
    -
    59  reference operator[](difference_type d) const { point_t p=_p; p[Dim]+=d*_step[Dim]; return _d(p); }
    +
    48  position_iterator(position_iterator const& p) : _p(p._p), _step(p._step), _d(p._d) {}
    +
    49 
    +
    50  template <typename D>
    +
    51  position_iterator(position_iterator<D,Dim> const& p) : _p(p._p), _step(p._step), _d(p._d) {}
    +
    52 
    +
    53  auto operator=(position_iterator const& p) -> position_iterator&
    +
    54  {
    +
    55  _p=p._p;
    +
    56  _d=p._d;
    +
    57  _step=p._step;
    +
    58  return *this;
    +
    59  }
    60 
    -
    61 private:
    -
    62  point_t _p, _step;
    -
    63  Deref _d;
    +
    61  auto pos() const -> point_t const& { return _p; }
    +
    62  auto step() const -> point_t const& { return _step; }
    +
    63  auto deref_fn() const -> Deref const& { return _d; }
    64 
    -
    65  template <typename DE, int DI> friend struct position_iterator;
    -
    66  friend class boost::iterator_core_access;
    -
    67  reference dereference() const { return _d(_p); }
    -
    68  void increment() { _p[Dim]+=_step[Dim]; }
    -
    69  void decrement() { _p[Dim]-=_step[Dim]; }
    -
    70  void advance(difference_type d) { _p[Dim]+=d*_step[Dim]; }
    -
    71 
    -
    72  difference_type distance_to(const position_iterator& it) const { return (it._p[Dim]-_p[Dim])/_step[Dim]; }
    -
    73  bool equal(const position_iterator& it) const { return _p==it._p; }
    -
    74 };
    -
    75 
    -
    76 template <typename Deref,int Dim>
    -
    77 struct const_iterator_type<position_iterator<Deref,Dim> > {
    -
    78  using type = position_iterator<typename Deref::const_t,Dim>;
    -
    79 };
    -
    80 
    -
    81 template <typename Deref, int Dim>
    -
    82 struct iterator_is_mutable<position_iterator<Deref, Dim>>
    -
    83  : std::integral_constant<bool, Deref::is_mutable>
    -
    84 {
    -
    85 };
    -
    86 
    -
    88 // PixelBasedConcept
    -
    90 
    -
    91 template <typename Deref,int Dim>
    -
    92 struct color_space_type<position_iterator<Deref,Dim> > : public color_space_type<typename Deref::value_type> {};
    -
    93 
    -
    94 template <typename Deref,int Dim>
    -
    95 struct channel_mapping_type<position_iterator<Deref,Dim> > : public channel_mapping_type<typename Deref::value_type> {};
    -
    96 
    -
    97 template <typename Deref,int Dim>
    -
    98 struct is_planar<position_iterator<Deref, Dim>> : std::false_type {};
    -
    99 
    -
    100 template <typename Deref,int Dim>
    -
    101 struct channel_type<position_iterator<Deref,Dim> > : public channel_type<typename Deref::value_type> {};
    -
    102 
    -
    104 // HasDynamicXStepTypeConcept
    -
    106 
    -
    107 template <typename Deref,int Dim>
    -
    108 struct dynamic_x_step_type<position_iterator<Deref,Dim> > {
    -
    109  using type = position_iterator<Deref,Dim>;
    -
    110 };
    -
    111 
    -
    112 } } // namespace boost::gil
    +
    65  void set_step(difference_type s) { _step[Dim]=s; }
    +
    68  auto operator[](difference_type d) const -> reference
    +
    69  {
    +
    70  point_t p=_p;
    +
    71  p[Dim]+=d*_step[Dim];
    +
    72  return _d(p);
    +
    73  }
    +
    74 
    +
    75 private:
    +
    76  point_t _p, _step;
    +
    77  Deref _d;
    +
    78 
    +
    79  template <typename DE, int DI> friend struct position_iterator;
    +
    80  friend class boost::iterator_core_access;
    +
    81  reference dereference() const { return _d(_p); }
    +
    82  void increment() { _p[Dim]+=_step[Dim]; }
    +
    83  void decrement() { _p[Dim]-=_step[Dim]; }
    +
    84  void advance(difference_type d) { _p[Dim]+=d*_step[Dim]; }
    +
    85 
    +
    86  difference_type distance_to(const position_iterator& it) const { return (it._p[Dim]-_p[Dim])/_step[Dim]; }
    +
    87  bool equal(const position_iterator& it) const { return _p==it._p; }
    +
    88 };
    +
    89 
    +
    90 template <typename Deref,int Dim>
    +
    91 struct const_iterator_type<position_iterator<Deref,Dim> > {
    +
    92  using type = position_iterator<typename Deref::const_t,Dim>;
    +
    93 };
    +
    94 
    +
    95 template <typename Deref, int Dim>
    +
    96 struct iterator_is_mutable<position_iterator<Deref, Dim>>
    +
    97  : std::integral_constant<bool, Deref::is_mutable>
    +
    98 {
    +
    99 };
    +
    100 
    +
    102 // PixelBasedConcept
    +
    104 
    +
    105 template <typename Deref,int Dim>
    +
    106 struct color_space_type<position_iterator<Deref,Dim> > : public color_space_type<typename Deref::value_type> {};
    +
    107 
    +
    108 template <typename Deref,int Dim>
    +
    109 struct channel_mapping_type<position_iterator<Deref,Dim> > : public channel_mapping_type<typename Deref::value_type> {};
    +
    110 
    +
    111 template <typename Deref,int Dim>
    +
    112 struct is_planar<position_iterator<Deref, Dim>> : std::false_type {};
    113 
    -
    114 #endif
    +
    114 template <typename Deref,int Dim>
    +
    115 struct channel_type<position_iterator<Deref,Dim> > : public channel_type<typename Deref::value_type> {};
    +
    116 
    +
    118 // HasDynamicXStepTypeConcept
    +
    120 
    +
    121 template <typename Deref,int Dim>
    +
    122 struct dynamic_x_step_type<position_iterator<Deref,Dim> > {
    +
    123  using type = position_iterator<Deref,Dim>;
    +
    124 };
    +
    125 
    +
    126 } } // namespace boost::gil
    +
    127 
    +
    128 #endif
    An iterator that remembers its current X,Y position and invokes a function object with it upon derefe...
    Definition: position_iterator.hpp:31
    -
    reference operator[](difference_type d) const
    Definition: position_iterator.hpp:59
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    -
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1083
    +
    auto operator[](difference_type d) const -> reference
    Definition: position_iterator.hpp:68
    +
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1087
    diff --git a/html/reference/premultiply_8hpp_source.html b/html/reference/premultiply_8hpp_source.html index a6cfdae0f..5f36f2bfd 100644 --- a/html/reference/premultiply_8hpp_source.html +++ b/html/reference/premultiply_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 
    16 #include <type_traits>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    20 template <typename SrcP, typename DstP>
    21 struct channel_premultiply
    @@ -79,7 +79,7 @@ $(function() {
    30  // TODO: Explain why 'channel' input paramater is not used, or used as tag only.
    31 
    32  // @todo: need to do a "channel_convert" too, in case the channel types aren't the same?
    -
    33  get_color(dst_, Channel()) = channel_multiply(get_color(src_,Channel()), alpha_or_max(src_));
    +
    33  get_color(dst_, Channel()) = channel_multiply(get_color(src_,Channel()), alpha_or_max(src_));
    34  }
    35  SrcP const & src_;
    36  DstP & dst_;
    @@ -90,7 +90,7 @@ $(function() {
    41  template <typename SrcP, typename DstP>
    42  void assign_alpha_if(std::true_type, SrcP const &src, DstP &dst)
    43  {
    -
    44  get_color(dst,alpha_t()) = alpha_or_max(src);
    +
    44  get_color(dst,alpha_t()) = alpha_or_max(src);
    45  }
    46 
    47  template <typename SrcP, typename DstP>
    @@ -147,21 +147,23 @@ $(function() {
    98  using add_ref_t = typename SrcView::template add_deref<deref_t>;
    99 public:
    100  using type = typename add_ref_t::type; // the color converted view type
    -
    101  static type make(const SrcView& sv) { return add_ref_t::make(sv, deref_t()); }
    +
    101  static type make(SrcView const& sv) { return add_ref_t::make(sv, deref_t()); }
    102 };
    103 
    -
    104 template <typename DstP, typename View> inline
    -
    105 typename premultiplied_view_type<View,DstP>::type premultiply_view(const View& src)
    -
    106 {
    -
    107  return premultiplied_view_type<View,DstP>::make(src);
    -
    108 }
    -
    109 
    -
    110 }} // namespace boost::gil
    -
    111 
    -
    112 #endif
    +
    104 template <typename DstP, typename View>
    +
    105 inline auto premultiply_view(View const& src)
    +
    106  -> typename premultiplied_view_type<View,DstP>::type
    +
    107 {
    +
    108  return premultiplied_view_type<View,DstP>::make(src);
    +
    109 }
    +
    110 
    +
    111 }} // namespace boost::gil
    +
    112 
    +
    113 #endif
    -
    color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    -
    channel_traits< Channel >::value_type channel_multiply(Channel a, Channel b)
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:539
    +
    auto get_color(ColorBase &cb, Color=Color()) -> typename color_element_reference_type< ColorBase, Color >::type
    Mutable accessor to the element associated with a given color name.
    Definition: color_base_algorithm.hpp:190
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto channel_multiply(Channel a, Channel b) -> typename channel_traits< Channel >::value_type
    A function multiplying two channels. result = a * b / max_value.
    Definition: channel_algorithm.hpp:561
    diff --git a/html/reference/promote__integral_8hpp_source.html b/html/reference/promote__integral_8hpp_source.html index b0ae433d0..c1e7ebc9d 100644 --- a/html/reference/promote__integral_8hpp_source.html +++ b/html/reference/promote__integral_8hpp_source.html @@ -74,7 +74,7 @@ $(function() {
    25 #include <cstddef>
    26 #include <type_traits>
    27 
    -
    28 namespace boost { namespace gil
    +
    28 namespace boost { namespace gil
    29 {
    30 
    31 namespace detail { namespace promote_integral
    @@ -119,7 +119,7 @@ $(function() {
    70 // The following specialization is required to finish the loop over
    71 // all list elements
    72 template <typename T, std::size_t MinSize>
    -
    73 struct promote_to_larger<T, boost::mp11::mp_list<>, MinSize>
    +
    73 struct promote_to_larger<T, boost::mp11::mp_list<>, MinSize>
    74 {
    75  // if promotion fails, keep the number T
    76  // (and cross fingers that overflow will not occur)
    @@ -215,6 +215,7 @@ $(function() {
    198 
    199 #endif // BOOST_GIL_PROMOTE_INTEGRAL_HPP
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Meta-function to define an integral type with size than is (roughly) twice the bit size of T.
    Definition: promote_integral.hpp:121
    diff --git a/html/reference/read__and__convert__image_8hpp_source.html b/html/reference/read__and__convert__image_8hpp_source.html index e40b7aa1f..c5573a19e 100644 --- a/html/reference/read__and__convert__image_8hpp_source.html +++ b/html/reference/read__and__convert__image_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 
    18 #include <type_traits>
    19 
    -
    20 namespace boost{ namespace gil {
    +
    20 namespace boost{ namespace gil {
    21 
    23 
    30 template <typename Reader, typename Image>
    @@ -82,7 +82,7 @@ $(function() {
    40  >::type* /*dummy*/ = nullptr)
    41 {
    42  reader.init_image(img, reader._settings);
    -
    43  reader.apply(view(img));
    +
    43  reader.apply(view(img));
    44 }
    45 
    52 template <typename Device, typename Image, typename ColorConverter, typename FormatTag>
    @@ -266,8 +266,9 @@ $(function() {
    268 
    269 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void read_and_convert_image(Reader &reader, Image &img, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr)
    Reads and color-converts an image. Image memory is allocated.
    Definition: read_and_convert_image.hpp:32
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/read__and__convert__view_8hpp_source.html b/html/reference/read__and__convert__view_8hpp_source.html index 428eda042..30cbdaa95 100644 --- a/html/reference/read__and__convert__view_8hpp_source.html +++ b/html/reference/read__and__convert__view_8hpp_source.html @@ -66,12 +66,12 @@ $(function() {
    17 
    18 #include <type_traits>
    19 
    -
    20 namespace boost{ namespace gil {
    +
    20 namespace boost{ namespace gil {
    21 
    23 
    30 template <typename Reader, typename View>
    31 inline
    -
    32 void read_and_convert_view(Reader& reader, View const& view,
    +
    32 void read_and_convert_view(Reader& reader, View const& view,
    33  typename std::enable_if
    34  <
    35  mp11::mp_and
    @@ -81,16 +81,16 @@ $(function() {
    39  >::value
    40  >::type* /*dummy*/ = nullptr)
    41 {
    -
    42  reader.check_image_size(view.dimensions());
    -
    43  reader.init_view(view, reader._settings);
    -
    44  reader.apply(view);
    +
    42  reader.check_image_size(view.dimensions());
    +
    43  reader.init_view(view, reader._settings);
    +
    44  reader.apply(view);
    45 }
    46 
    53 template <typename Device, typename View, typename ColorConverter, typename FormatTag>
    54 inline
    56  Device& device,
    -
    57  View const& view,
    +
    57  View const& view,
    58  image_read_settings<FormatTag> const& settings,
    59  ColorConverter const& cc,
    60  typename std::enable_if
    @@ -106,14 +106,14 @@ $(function() {
    70  using reader_t = typename get_reader<Device, FormatTag, read_and_convert_t>::type;
    71 
    72  reader_t reader = make_reader(device, settings, read_and_convert_t{cc});
    -
    73  read_and_convert_view(reader, view);
    +
    73  read_and_convert_view(reader, view);
    74 }
    75 
    82 template <typename String, typename View, typename ColorConverter, typename FormatTag>
    83 inline
    85  String const& file_name,
    -
    86  View const& view,
    +
    86  View const& view,
    87  image_read_settings<FormatTag> const& settings,
    88  ColorConverter const& cc,
    89  typename std::enable_if
    @@ -129,14 +129,14 @@ $(function() {
    99  using reader_t = typename get_reader<String, FormatTag, read_and_convert_t>::type;
    100 
    101  reader_t reader = make_reader(file_name, settings, read_and_convert_t{cc});
    -
    102  read_and_convert_view(reader, view);
    +
    102  read_and_convert_view(reader, view);
    103 }
    104 
    111 template <typename String, typename View, typename ColorConverter, typename FormatTag>
    112 inline
    114  String const& file_name,
    -
    115  View const& view,
    +
    115  View const& view,
    116  ColorConverter const& cc,
    117  FormatTag const& tag,
    118  typename std::enable_if
    @@ -152,14 +152,14 @@ $(function() {
    128  using reader_t = typename get_reader<String, FormatTag, read_and_convert_t>::type;
    129 
    130  reader_t reader = make_reader(file_name, tag, read_and_convert_t{cc});
    -
    131  read_and_convert_view(reader, view);
    +
    131  read_and_convert_view(reader, view);
    132 }
    133 
    140 template <typename Device, typename View, typename ColorConverter, typename FormatTag>
    141 inline
    143  Device& device,
    -
    144  View const& view,
    +
    144  View const& view,
    145  ColorConverter const& cc,
    146  FormatTag const& tag,
    147  typename std::enable_if
    @@ -175,14 +175,14 @@ $(function() {
    157  using reader_t = typename get_reader<Device, FormatTag, read_and_convert_t>::type;
    158 
    159  reader_t reader = make_reader(device, tag, read_and_convert_t{cc});
    -
    160  read_and_convert_view(reader, view);
    +
    160  read_and_convert_view(reader, view);
    161 }
    162 
    168 template <typename String, typename View, typename FormatTag>
    169 inline
    171  String const& file_name,
    -
    172  View const& view,
    +
    172  View const& view,
    173  image_read_settings<FormatTag> const& settings,
    174  typename std::enable_if
    175  <
    @@ -197,14 +197,14 @@ $(function() {
    184  using reader_t = typename get_reader<String, FormatTag, read_and_convert_t>::type;
    185 
    186  reader_t reader = make_reader(file_name, settings, read_and_convert_t{});
    -
    187  read_and_convert_view(reader, view);
    +
    187  read_and_convert_view(reader, view);
    188 }
    189 
    195 template <typename Device, typename View, typename FormatTag>
    196 inline
    198  Device& device,
    -
    199  View const& view,
    +
    199  View const& view,
    200  image_read_settings<FormatTag> const& settings,
    201  typename std::enable_if
    202  <
    @@ -219,14 +219,14 @@ $(function() {
    211  using reader_t = typename get_reader<Device, FormatTag, read_and_convert_t>::type;
    212 
    213  reader_t reader = make_reader(device, settings, read_and_convert_t{});
    -
    214  read_and_convert_view(reader, view);
    +
    214  read_and_convert_view(reader, view);
    215 }
    216 
    222 template <typename String, typename View, typename FormatTag>
    223 inline
    225  String const& file_name,
    -
    226  View const& view,
    +
    226  View const& view,
    227  FormatTag const& tag,
    228  typename std::enable_if
    229  <
    @@ -241,14 +241,14 @@ $(function() {
    238  using reader_t = typename get_reader<String, FormatTag, read_and_convert_t>::type;
    239 
    240  reader_t reader = make_reader(file_name, tag, read_and_convert_t{});
    -
    241  read_and_convert_view(reader, view);
    +
    241  read_and_convert_view(reader, view);
    242 }
    243 
    249 template <typename Device, typename View, typename FormatTag>
    250 inline
    252  Device& device,
    -
    253  View const& view,
    +
    253  View const& view,
    254  FormatTag const& tag,
    255  typename std::enable_if
    256  <
    @@ -263,15 +263,16 @@ $(function() {
    265  using reader_t = typename get_reader<Device, FormatTag, read_and_convert_t>::type;
    266 
    267  reader_t reader = make_reader(device, tag, read_and_convert_t{});
    -
    268  read_and_convert_view(reader, view);
    +
    268  read_and_convert_view(reader, view);
    269 }
    270 
    271 }} // namespace boost::gill
    272 
    273 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void read_and_convert_view(Reader &reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr)
    Reads and color-converts an image view. No memory is allocated.
    Definition: read_and_convert_view.hpp:32
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/read__image_8hpp_source.html b/html/reference/read__image_8hpp_source.html index f9d9cd9e4..8a3350b0b 100644 --- a/html/reference/read__image_8hpp_source.html +++ b/html/reference/read__image_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
    19 
    20 #include <type_traits>
    21 
    -
    22 namespace boost { namespace gil {
    +
    22 namespace boost { namespace gil {
    23 
    25 
    30 template <typename Reader, typename Image>
    @@ -89,7 +89,7 @@ $(function() {
    45  >::type* /*dummy*/ = nullptr)
    46 {
    47  reader.init_image(img, reader._settings);
    -
    48  reader.apply(view(img));
    +
    48  reader.apply(view(img));
    49 }
    50 
    56 template <typename Device, typename Image, typename FormatTag>
    @@ -290,9 +290,10 @@ $(function() {
    287 
    288 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Definition: base.hpp:78
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    void read_image(Reader reader, Image &img, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t >, is_read_supported< typename get_pixel_type< typename Image::view_t >::type, typename Reader::format_tag_t > >::value >::type *=nullptr)
    Reads an image without conversion. Image memory is allocated.
    Definition: read_image.hpp:32
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/read__image__info_8hpp_source.html b/html/reference/read__image__info_8hpp_source.html index f02e547fd..af77a7adb 100644 --- a/html/reference/read__image__info_8hpp_source.html +++ b/html/reference/read__image__info_8hpp_source.html @@ -65,7 +65,7 @@ $(function() {
    16 
    17 #include <type_traits>
    18 
    -
    19 namespace boost{ namespace gil {
    +
    19 namespace boost{ namespace gil {
    20 
    22 
    28 template <typename Device, typename FormatTag>
    @@ -138,6 +138,7 @@ $(function() {
    110 #endif
    auto read_image_info(Device &file, image_read_settings< FormatTag > const &settings, typename std::enable_if< mp11::mp_and< detail::is_adaptable_input_device< FormatTag, Device >, is_format_tag< FormatTag > >::value >::type *=nullptr) -> typename get_reader_backend< Device, FormatTag >::type
    Returns the image format backend. Backend is format specific.
    Definition: read_image_info.hpp:30
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Helper metafunction to generate image backend type.
    Definition: get_reader.hpp:114
    diff --git a/html/reference/read__view_8hpp_source.html b/html/reference/read__view_8hpp_source.html index 5ae60fe7e..1d04e1c9f 100644 --- a/html/reference/read__view_8hpp_source.html +++ b/html/reference/read__view_8hpp_source.html @@ -66,12 +66,12 @@ $(function() {
    17 
    18 #include <type_traits>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    23 
    29 template <typename Reader, typename View>
    30 inline
    -
    31 void read_view(Reader reader, View const& view,
    +
    31 void read_view(Reader reader, View const& view,
    32  typename std::enable_if
    33  <
    34  mp11::mp_and
    @@ -86,16 +86,16 @@ $(function() {
    43  >::value
    44  >::type* /*dummy*/ = nullptr)
    45 {
    -
    46  reader.check_image_size(view.dimensions());
    -
    47  reader.init_view(view, reader._settings);
    -
    48  reader.apply(view);
    +
    46  reader.check_image_size(view.dimensions());
    +
    47  reader.init_view(view, reader._settings);
    +
    48  reader.apply(view);
    49 }
    50 
    56 template <typename Device, typename View, typename FormatTag>
    57 inline
    58 void read_view(
    59  Device& file,
    -
    60  View const& view,
    +
    60  View const& view,
    61  image_read_settings<FormatTag> const& settings,
    62  typename std::enable_if
    63  <
    @@ -115,12 +115,12 @@ $(function() {
    77  typename get_reader<Device, FormatTag, detail::read_and_no_convert>::type;
    78 
    79  reader_t reader = make_reader(file, settings, detail::read_and_no_convert());
    -
    80  read_view(reader, view);
    +
    80  read_view(reader, view);
    81 }
    82 
    88 template <typename Device, typename View, typename FormatTag>
    89 inline
    -
    90 void read_view(Device& file, View const& view, FormatTag const& tag,
    +
    90 void read_view(Device& file, View const& view, FormatTag const& tag,
    91  typename std::enable_if
    92  <
    93  mp11::mp_and
    @@ -138,14 +138,14 @@ $(function() {
    105  typename get_reader<Device, FormatTag, detail::read_and_no_convert>::type;
    106 
    107  reader_t reader = make_reader(file, tag, detail::read_and_no_convert());
    -
    108  read_view(reader, view);
    +
    108  read_view(reader, view);
    109 }
    110 
    116 template <typename String, typename View, typename FormatTag>
    117 inline
    118 void read_view(
    119  String const& file_name,
    -
    120  View const& view,
    +
    120  View const& view,
    121  image_read_settings<FormatTag> const& settings,
    122  typename std::enable_if
    123  <
    @@ -165,12 +165,12 @@ $(function() {
    137  typename get_reader<String, FormatTag, detail::read_and_no_convert>::type;
    138 
    139  reader_t reader = make_reader(file_name, settings, detail::read_and_no_convert());
    -
    140  read_view(reader, view);
    +
    140  read_view(reader, view);
    141 }
    142 
    148 template <typename String, typename View, typename FormatTag>
    149 inline
    -
    150 void read_view(String const& file_name, View const& view, FormatTag const& tag,
    +
    150 void read_view(String const& file_name, View const& view, FormatTag const& tag,
    151  typename std::enable_if
    152  <
    153  mp11::mp_and
    @@ -189,16 +189,17 @@ $(function() {
    166  typename get_reader<String, FormatTag, detail::read_and_no_convert>::type;
    167 
    168  reader_t reader = make_reader(file_name, tag, detail::read_and_no_convert());
    -
    169  read_view(reader, view);
    +
    169  read_view(reader, view);
    170 }
    171 
    172 }} // namespace boost::gil
    173 
    174 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void read_view(Reader reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, typename is_format_tag< typename Reader::format_tag_t >::type, typename is_read_supported< typename get_pixel_type< View >::type, typename Reader::format_tag_t >::type >::value >::type *=nullptr)
    Reads an image view without conversion. No memory is allocated.
    Definition: read_view.hpp:31
    Definition: base.hpp:78
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/reader__base_8hpp_source.html b/html/reference/reader__base_8hpp_source.html index 015c90fdc..5b8cce293 100644 --- a/html/reference/reader__base_8hpp_source.html +++ b/html/reference/reader__base_8hpp_source.html @@ -61,7 +61,7 @@ $(function() {
    12 
    13 #include <boost/assert.hpp>
    14 
    -
    15 namespace boost { namespace gil {
    +
    15 namespace boost { namespace gil {
    16 
    25 template< typename FormatTag
    26  , typename ConversionPolicy
    @@ -93,16 +93,16 @@ $(function() {
    64  }
    65 
    66  template< typename View >
    -
    67  void init_view( const View& view
    +
    67  void init_view( const View& view
    68  , const image_read_settings< FormatTag >&
    69  )
    70  {
    -
    71  setup( view.dimensions() );
    +
    71  setup( view.dimensions() );
    72  }
    73 
    74 private:
    75 
    -
    76  void setup( const point_t& /* dim */ )
    +
    76  void setup( point_t const& /* dim */ )
    77  {
    78  //check_coordinates( dim );
    79 
    @@ -117,7 +117,7 @@ $(function() {
    88  //}
    89  }
    90 
    -
    91  void check_coordinates( const point_t& /* dim */ )
    +
    91  void check_coordinates( point_t const& /* dim */ )
    92  {
    93  //using int_t = point_t::value_type;
    94 
    @@ -157,8 +157,9 @@ $(function() {
    reader_base(const ConversionPolicy &cc)
    Definition: reader_base.hpp:42
    reader_base()
    Definition: reader_base.hpp:35
    void init_image(Image &img, const image_read_settings< FormatTag > &settings)
    Definition: reader_base.hpp:53
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Definition: reader_base.hpp:28
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/rgb_8hpp_source.html b/html/reference/rgb_8hpp_source.html index aa97b032d..30a661fe8 100644 --- a/html/reference/rgb_8hpp_source.html +++ b/html/reference/rgb_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 #include <cstddef>
    16 #include <type_traits>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    22 
    24 struct red_t {};
    @@ -80,29 +80,29 @@ $(function() {
    41 
    44 template <typename IC>
    -
    45 inline
    - -
    47  std::size_t width, std::size_t height,
    -
    48  IC r, IC g, IC b,
    -
    49  std::ptrdiff_t rowsize_in_bytes)
    - -
    51 {
    -
    52  using view_t = typename type_from_x_iterator<planar_pixel_iterator<IC, rgb_t>>::view_t;
    -
    53 
    -
    54  return view_t(
    -
    55  width, height,
    -
    56  typename view_t::locator(
    - -
    58  rowsize_in_bytes));
    -
    59 }
    -
    60 
    -
    61 }} // namespace boost::gil
    -
    62 
    -
    63 #endif
    +
    45 inline auto planar_rgb_view(
    +
    46  std::size_t width, std::size_t height,
    +
    47  IC r, IC g, IC b,
    +
    48  std::ptrdiff_t rowsize_in_bytes)
    + +
    50 {
    +
    51  using view_t = typename type_from_x_iterator<planar_pixel_iterator<IC, rgb_t>>::view_t;
    +
    52 
    +
    53  return view_t(
    +
    54  width, height,
    +
    55  typename view_t::locator(
    + +
    57  rowsize_in_bytes));
    +
    58 }
    +
    59 
    +
    60 }} // namespace boost::gil
    +
    61 
    +
    62 #endif
    -
    auto planar_rgb_view(std::size_t width, std::size_t height, IC r, IC g, IC b, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, rgb_t > >::view_t
    from raw RGB planar data
    Definition: rgb.hpp:46
    +
    auto planar_rgb_view(std::size_t width, std::size_t height, IC r, IC g, IC b, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< IC, rgb_t > >::view_t
    from raw RGB planar data
    Definition: rgb.hpp:45
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Blue.
    Definition: rgb.hpp:30
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    Given a pixel iterator defining access to pixels along a row, returns the types of the corresponding ...
    Definition: metafunctions.hpp:302
    Green.
    Definition: rgb.hpp:27
    mp11::mp_list< red_t, green_t, blue_t > rgb_t
    Definition: rgb.hpp:34
    diff --git a/html/reference/rgba_8hpp_source.html b/html/reference/rgba_8hpp_source.html index 936e629eb..5e9ec954a 100644 --- a/html/reference/rgba_8hpp_source.html +++ b/html/reference/rgba_8hpp_source.html @@ -64,7 +64,7 @@ $(function() {
    15 #include <cstddef>
    16 #include <type_traits>
    17 
    -
    18 namespace boost { namespace gil {
    +
    18 namespace boost { namespace gil {
    19 
    22 struct alpha_t {};
    23 
    @@ -79,26 +79,26 @@ $(function() {
    38 
    41 template <typename ChannelPtr>
    -
    42 inline
    -
    43 auto planar_rgba_view(std::size_t width, std::size_t height,
    -
    44  ChannelPtr r, ChannelPtr g, ChannelPtr b, ChannelPtr a,
    -
    45  std::ptrdiff_t rowsize_in_bytes)
    - -
    47 {
    -
    48  using pixel_iterator_t = planar_pixel_iterator<ChannelPtr, rgba_t>;
    -
    49  using view_t = typename type_from_x_iterator<pixel_iterator_t>::view_t;
    -
    50  using locator_t = typename view_t::locator;
    -
    51 
    -
    52  locator_t loc(pixel_iterator_t(r, g, b, a), rowsize_in_bytes);
    -
    53  return view_t(width, height, loc);
    -
    54 }
    -
    55 
    -
    56 }} // namespace boost::gil
    -
    57 
    -
    58 #endif
    +
    42 inline auto planar_rgba_view(std::size_t width, std::size_t height,
    +
    43  ChannelPtr r, ChannelPtr g, ChannelPtr b, ChannelPtr a,
    +
    44  std::ptrdiff_t rowsize_in_bytes)
    + +
    46 {
    +
    47  using pixel_iterator_t = planar_pixel_iterator<ChannelPtr, rgba_t>;
    +
    48  using view_t = typename type_from_x_iterator<pixel_iterator_t>::view_t;
    +
    49  using locator_t = typename view_t::locator;
    +
    50 
    +
    51  locator_t loc(pixel_iterator_t(r, g, b, a), rowsize_in_bytes);
    +
    52  return view_t(width, height, loc);
    +
    53 }
    +
    54 
    +
    55 }} // namespace boost::gil
    +
    56 
    +
    57 #endif
    -
    auto planar_rgba_view(std::size_t width, std::size_t height, ChannelPtr r, ChannelPtr g, ChannelPtr b, ChannelPtr a, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< ChannelPtr, rgba_t > >::view_t
    from raw RGBA planar data
    Definition: rgba.hpp:43
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    auto planar_rgba_view(std::size_t width, std::size_t height, ChannelPtr r, ChannelPtr g, ChannelPtr b, ChannelPtr a, std::ptrdiff_t rowsize_in_bytes) -> typename type_from_x_iterator< planar_pixel_iterator< ChannelPtr, rgba_t > >::view_t
    from raw RGBA planar data
    Definition: rgba.hpp:42
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    A lightweight object that interprets memory as a 2D array of pixels. Models ImageViewConcept,...
    Definition: image_view.hpp:53
    Given a pixel iterator defining access to pixels along a row, returns the types of the corresponding ...
    Definition: metafunctions.hpp:302
    mp11::mp_list< red_t, green_t, blue_t, alpha_t > rgba_t
    Definition: rgba.hpp:25
    diff --git a/html/reference/row__buffer__helper_8hpp_source.html b/html/reference/row__buffer__helper_8hpp_source.html index f3d268206..cbf197175 100644 --- a/html/reference/row__buffer__helper_8hpp_source.html +++ b/html/reference/row__buffer__helper_8hpp_source.html @@ -69,7 +69,7 @@ $(function() {
    20 #include <type_traits>
    21 #include <vector>
    22 
    -
    23 namespace boost { namespace gil { namespace detail {
    +
    23 namespace boost { namespace gil { namespace detail {
    24 
    25 template< typename Pixel
    26  , typename DummyT = void
    @@ -247,6 +247,7 @@ $(function() {
    198 
    199 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    diff --git a/html/reference/scaling_8hpp_source.html b/html/reference/scaling_8hpp_source.html index 3b014c204..6799d7900 100644 --- a/html/reference/scaling_8hpp_source.html +++ b/html/reference/scaling_8hpp_source.html @@ -62,7 +62,7 @@ $(function() {
    13 #include <boost/gil/pixel.hpp>
    14 #include <boost/gil/image_processing/numeric.hpp>
    15 
    -
    16 namespace boost { namespace gil {
    +
    16 namespace boost { namespace gil {
    17 
    36 template <typename ImageView>
    37 void lanczos_at(
    @@ -136,6 +136,7 @@ $(function() {
    114 
    115 #endif
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    void scale_lanczos(ImageView input_view, ImageView output_view, std::ptrdiff_t a)
    Complete Lanczos algorithm.
    Definition: scaling.hpp:95
    double lanczos(double x, std::ptrdiff_t a)
    Lanczos response at point x.
    Definition: numeric.hpp:46
    diff --git a/html/reference/scanline__read__iterator_8hpp_source.html b/html/reference/scanline__read__iterator_8hpp_source.html index 0312d6bbe..a9f0a4420 100644 --- a/html/reference/scanline__read__iterator_8hpp_source.html +++ b/html/reference/scanline__read__iterator_8hpp_source.html @@ -66,7 +66,7 @@ $(function() {
    17 #include <memory>
    18 #include <vector>
    19 
    -
    20 namespace boost { namespace gil {
    +
    20 namespace boost { namespace gil {
    21 
    22 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
    23 #pragma warning(push)
    @@ -148,7 +148,8 @@ $(function() {
    100 #endif
    Input iterator to read images.
    Definition: scanline_read_iterator.hpp:29
    -
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1083
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
    std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
    Definition: algorithm.hpp:1087
    diff --git a/html/reference/step__iterator_8hpp_source.html b/html/reference/step__iterator_8hpp_source.html index 3ed3fd3d0..86c66e451 100644 --- a/html/reference/step__iterator_8hpp_source.html +++ b/html/reference/step__iterator_8hpp_source.html @@ -68,7 +68,7 @@ $(function() {
    19 #include <iterator>
    20 #include <type_traits>
    21 
    -
    22 namespace boost { namespace gil {
    +
    22 namespace boost { namespace gil {
    23 
    27 
    28 namespace detail {
    @@ -87,9 +87,9 @@ $(function() {
    47  using reference = typename std::iterator_traits<Iterator>::reference;
    48 
    -
    50  step_iterator_adaptor(const Iterator& it, SFn step_fn=SFn()) : parent_t(it), _step_fn(step_fn) {}
    +
    50  step_iterator_adaptor(Iterator const& it, SFn step_fn=SFn()) : parent_t(it), _step_fn(step_fn) {}
    51 
    -
    52  difference_type step() const { return _step_fn.step(); }
    +
    52  auto step() const -> difference_type { return _step_fn.step(); }
    53 
    54 protected:
    55  SFn _step_fn;
    @@ -99,227 +99,242 @@ $(function() {
    59  void increment() { _step_fn.advance(this->base_reference(),1); }
    60  void decrement() { _step_fn.advance(this->base_reference(),-1); }
    61  void advance(base_difference_type d) { _step_fn.advance(this->base_reference(),d); }
    -
    62  difference_type distance_to(const step_iterator_adaptor& it) const { return _step_fn.difference(this->base_reference(),it.base_reference()); }
    -
    63 };
    -
    64 
    -
    65 // although iterator_adaptor defines these, the default implementation computes distance and compares for zero.
    -
    66 // it is often faster to just apply the relation operator to the base
    -
    67 template <typename D,typename Iterator,typename SFn> inline
    - -
    69  return p1.step()>0 ? p1.base()> p2.base() : p1.base()< p2.base();
    -
    70 }
    -
    71 
    -
    72 template <typename D,typename Iterator,typename SFn> inline
    -
    73 bool operator<(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    -
    74  return p1.step()>0 ? p1.base()< p2.base() : p1.base()> p2.base();
    -
    75 }
    -
    76 
    -
    77 template <typename D,typename Iterator,typename SFn> inline
    -
    78 bool operator>=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    -
    79  return p1.step()>0 ? p1.base()>=p2.base() : p1.base()<=p2.base();
    -
    80 }
    -
    81 
    -
    82 template <typename D,typename Iterator,typename SFn> inline
    -
    83 bool operator<=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    -
    84  return p1.step()>0 ? p1.base()<=p2.base() : p1.base()>=p2.base();
    -
    85 }
    -
    86 
    -
    87 template <typename D,typename Iterator,typename SFn> inline
    -
    88 bool operator==(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    -
    89  return p1.base()==p2.base();
    -
    90 }
    -
    91 
    -
    92 template <typename D,typename Iterator,typename SFn> inline
    -
    93 bool operator!=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    -
    94  return p1.base()!=p2.base();
    -
    95 }
    -
    96 
    -
    97 } // namespace detail
    -
    98 
    +
    62 
    +
    63  auto distance_to(step_iterator_adaptor const& it) const -> difference_type
    +
    64  {
    +
    65  return _step_fn.difference(this->base_reference(),it.base_reference());
    +
    66  }
    +
    67 };
    +
    68 
    +
    69 // although iterator_adaptor defines these, the default implementation computes distance and compares for zero.
    +
    70 // it is often faster to just apply the relation operator to the base
    +
    71 template <typename D,typename Iterator,typename SFn> inline
    + +
    73  return p1.step()>0 ? p1.base()> p2.base() : p1.base()< p2.base();
    +
    74 }
    +
    75 
    +
    76 template <typename D,typename Iterator,typename SFn> inline
    +
    77 bool operator<(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    +
    78  return p1.step()>0 ? p1.base()< p2.base() : p1.base()> p2.base();
    +
    79 }
    +
    80 
    +
    81 template <typename D,typename Iterator,typename SFn> inline
    +
    82 bool operator>=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    +
    83  return p1.step()>0 ? p1.base()>=p2.base() : p1.base()<=p2.base();
    +
    84 }
    +
    85 
    +
    86 template <typename D,typename Iterator,typename SFn> inline
    +
    87 bool operator<=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    +
    88  return p1.step()>0 ? p1.base()<=p2.base() : p1.base()>=p2.base();
    +
    89 }
    +
    90 
    +
    91 template <typename D,typename Iterator,typename SFn> inline
    +
    92 bool operator==(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    +
    93  return p1.base()==p2.base();
    +
    94 }
    +
    95 
    +
    96 template <typename D,typename Iterator,typename SFn> inline
    +
    97 bool operator!=(const step_iterator_adaptor<D,Iterator,SFn>& p1, const step_iterator_adaptor<D,Iterator,SFn>& p2) {
    +
    98  return p1.base()!=p2.base();
    +
    99 }
    +
    100 
    +
    101 } // namespace detail
    102 
    -
    118 
    -
    121 template <typename Iterator>
    - -
    123  using difference_type = std::ptrdiff_t;
    -
    124 
    -
    125  memunit_step_fn(difference_type step=memunit_step(Iterator())) : _step(step) {}
    -
    126 
    -
    127  difference_type difference(const Iterator& it1, const Iterator& it2) const { return memunit_distance(it1,it2)/_step; }
    -
    128  void advance(Iterator& it, difference_type d) const { memunit_advance(it,d*_step); }
    -
    129  difference_type step() const { return _step; }
    +
    106 
    +
    122 
    +
    125 template <typename Iterator>
    + +
    127  using difference_type = std::ptrdiff_t;
    +
    128 
    +
    129  memunit_step_fn(difference_type step=memunit_step(Iterator())) : _step(step) {}
    130 
    -
    131  void set_step(std::ptrdiff_t step) { _step=step; }
    -
    132 private:
    -
    133  BOOST_GIL_CLASS_REQUIRE(Iterator, boost::gil, MemoryBasedIteratorConcept)
    -
    134  difference_type _step;
    -
    135 };
    -
    136 
    -
    137 template <typename Iterator>
    -
    138 class memory_based_step_iterator : public detail::step_iterator_adaptor<memory_based_step_iterator<Iterator>,
    -
    139  Iterator,
    -
    140  memunit_step_fn<Iterator>>
    -
    141 {
    -
    142  BOOST_GIL_CLASS_REQUIRE(Iterator, boost::gil, MemoryBasedIteratorConcept)
    -
    143 public:
    - -
    145  Iterator,
    - -
    147  using reference = typename parent_t::reference;
    -
    148  using difference_type = typename parent_t::difference_type;
    -
    149  using x_iterator = Iterator;
    -
    150 
    -
    151  memory_based_step_iterator() : parent_t(Iterator()) {}
    -
    152  memory_based_step_iterator(Iterator it, std::ptrdiff_t memunit_step) : parent_t(it, memunit_step_fn<Iterator>(memunit_step)) {}
    -
    153  template <typename I2>
    -
    154  memory_based_step_iterator(const memory_based_step_iterator<I2>& it)
    -
    155  : parent_t(it.base(), memunit_step_fn<Iterator>(it.step())) {}
    -
    156 
    -
    159  reference operator[](difference_type d) const { return *(*this+d); }
    -
    160 
    -
    161  void set_step(std::ptrdiff_t memunit_step) { this->_step_fn.set_step(memunit_step); }
    -
    162 
    -
    163  x_iterator& base() { return parent_t::base_reference(); }
    -
    164  x_iterator const& base() const { return parent_t::base_reference(); }
    -
    165 };
    -
    166 
    -
    167 template <typename Iterator>
    -
    168 struct const_iterator_type<memory_based_step_iterator<Iterator>> {
    -
    169  using type = memory_based_step_iterator<typename const_iterator_type<Iterator>::type>;
    -
    170 };
    -
    171 
    -
    172 template <typename Iterator>
    -
    173 struct iterator_is_mutable<memory_based_step_iterator<Iterator>> : public iterator_is_mutable<Iterator> {};
    +
    131  auto difference(Iterator const& it1, Iterator const& it2) const -> difference_type
    +
    132  {
    +
    133  return memunit_distance(it1,it2)/_step;
    +
    134  }
    +
    135 
    +
    136  void advance(Iterator& it, difference_type d) const { memunit_advance(it,d*_step); }
    +
    137  auto step() const -> difference_type { return _step; }
    +
    138 
    +
    139  void set_step(std::ptrdiff_t step) { _step=step; }
    +
    140 private:
    +
    141  BOOST_GIL_CLASS_REQUIRE(Iterator, boost::gil, MemoryBasedIteratorConcept)
    +
    142  difference_type _step;
    +
    143 };
    +
    144 
    +
    145 template <typename Iterator>
    +
    146 class memory_based_step_iterator : public detail::step_iterator_adaptor<memory_based_step_iterator<Iterator>,
    +
    147  Iterator,
    +
    148  memunit_step_fn<Iterator>>
    +
    149 {
    +
    150  BOOST_GIL_CLASS_REQUIRE(Iterator, boost::gil, MemoryBasedIteratorConcept)
    +
    151 public:
    + +
    153  Iterator,
    + +
    155  using reference = typename parent_t::reference;
    +
    156  using difference_type = typename parent_t::difference_type;
    +
    157  using x_iterator = Iterator;
    +
    158 
    +
    159  memory_based_step_iterator() : parent_t(Iterator()) {}
    +
    160  memory_based_step_iterator(Iterator it, std::ptrdiff_t memunit_step) : parent_t(it, memunit_step_fn<Iterator>(memunit_step)) {}
    +
    161  template <typename I2>
    +
    162  memory_based_step_iterator(const memory_based_step_iterator<I2>& it)
    +
    163  : parent_t(it.base(), memunit_step_fn<Iterator>(it.step())) {}
    +
    164 
    +
    167  auto operator[](difference_type d) const -> reference { return *(*this+d); }
    +
    168 
    +
    169  void set_step(std::ptrdiff_t memunit_step) { this->_step_fn.set_step(memunit_step); }
    +
    170 
    +
    171  auto base() -> x_iterator& { return parent_t::base_reference(); }
    +
    172  auto base() const -> x_iterator const& { return parent_t::base_reference(); }
    +
    173 };
    174 
    -
    175 
    -
    177 // IteratorAdaptorConcept
    -
    179 
    +
    175 template <typename Iterator>
    +
    176 struct const_iterator_type<memory_based_step_iterator<Iterator>> {
    +
    177  using type = memory_based_step_iterator<typename const_iterator_type<Iterator>::type>;
    +
    178 };
    +
    179 
    180 template <typename Iterator>
    -
    181 struct is_iterator_adaptor<memory_based_step_iterator<Iterator>> : std::true_type {};
    +
    181 struct iterator_is_mutable<memory_based_step_iterator<Iterator>> : public iterator_is_mutable<Iterator> {};
    182 
    -
    183 template <typename Iterator>
    -
    184 struct iterator_adaptor_get_base<memory_based_step_iterator<Iterator>>
    -
    185 {
    -
    186  using type = Iterator;
    -
    187 };
    -
    188 
    -
    189 template <typename Iterator, typename NewBaseIterator>
    -
    190 struct iterator_adaptor_rebind<memory_based_step_iterator<Iterator>, NewBaseIterator>
    -
    191 {
    -
    192  using type = memory_based_step_iterator<NewBaseIterator>;
    -
    193 };
    -
    194 
    -
    196 // PixelBasedConcept
    -
    198 
    -
    199 template <typename Iterator>
    -
    200 struct color_space_type<memory_based_step_iterator<Iterator>> : public color_space_type<Iterator> {};
    -
    201 
    -
    202 template <typename Iterator>
    -
    203 struct channel_mapping_type<memory_based_step_iterator<Iterator>> : public channel_mapping_type<Iterator> {};
    -
    204 
    -
    205 template <typename Iterator>
    -
    206 struct is_planar<memory_based_step_iterator<Iterator>> : public is_planar<Iterator> {};
    -
    207 
    -
    208 template <typename Iterator>
    -
    209 struct channel_type<memory_based_step_iterator<Iterator>> : public channel_type<Iterator> {};
    -
    210 
    -
    212 // MemoryBasedIteratorConcept
    -
    214 template <typename Iterator>
    -
    215 struct byte_to_memunit<memory_based_step_iterator<Iterator>> : public byte_to_memunit<Iterator> {};
    -
    216 
    -
    217 template <typename Iterator>
    -
    218 inline std::ptrdiff_t memunit_step(const memory_based_step_iterator<Iterator>& p) { return p.step(); }
    -
    219 
    -
    220 template <typename Iterator>
    -
    221 inline std::ptrdiff_t memunit_distance(const memory_based_step_iterator<Iterator>& p1,
    -
    222  const memory_based_step_iterator<Iterator>& p2) {
    -
    223  return memunit_distance(p1.base(),p2.base());
    -
    224 }
    -
    225 
    -
    226 template <typename Iterator>
    -
    227 inline void memunit_advance(memory_based_step_iterator<Iterator>& p,
    -
    228  std::ptrdiff_t diff) {
    -
    229  memunit_advance(p.base(), diff);
    -
    230 }
    -
    231 
    -
    232 template <typename Iterator>
    -
    233 inline memory_based_step_iterator<Iterator>
    -
    234 memunit_advanced(const memory_based_step_iterator<Iterator>& p,
    -
    235  std::ptrdiff_t diff) {
    -
    236  return memory_based_step_iterator<Iterator>(memunit_advanced(p.base(), diff),p.step());
    -
    237 }
    -
    238 
    -
    239 template <typename Iterator>
    -
    240 inline typename std::iterator_traits<Iterator>::reference
    -
    241 memunit_advanced_ref(const memory_based_step_iterator<Iterator>& p,
    -
    242  std::ptrdiff_t diff) {
    -
    243  return memunit_advanced_ref(p.base(), diff);
    -
    244 }
    -
    245 
    -
    247 // HasDynamicXStepTypeConcept
    -
    249 
    -
    250 template <typename Iterator>
    -
    251 struct dynamic_x_step_type<memory_based_step_iterator<Iterator>> {
    -
    252  using type = memory_based_step_iterator<Iterator>;
    -
    253 };
    +
    183 
    +
    185 // IteratorAdaptorConcept
    +
    187 
    +
    188 template <typename Iterator>
    +
    189 struct is_iterator_adaptor<memory_based_step_iterator<Iterator>> : std::true_type {};
    +
    190 
    +
    191 template <typename Iterator>
    +
    192 struct iterator_adaptor_get_base<memory_based_step_iterator<Iterator>>
    +
    193 {
    +
    194  using type = Iterator;
    +
    195 };
    +
    196 
    +
    197 template <typename Iterator, typename NewBaseIterator>
    +
    198 struct iterator_adaptor_rebind<memory_based_step_iterator<Iterator>, NewBaseIterator>
    +
    199 {
    +
    200  using type = memory_based_step_iterator<NewBaseIterator>;
    +
    201 };
    +
    202 
    +
    204 // PixelBasedConcept
    +
    206 
    +
    207 template <typename Iterator>
    +
    208 struct color_space_type<memory_based_step_iterator<Iterator>> : public color_space_type<Iterator> {};
    +
    209 
    +
    210 template <typename Iterator>
    +
    211 struct channel_mapping_type<memory_based_step_iterator<Iterator>> : public channel_mapping_type<Iterator> {};
    +
    212 
    +
    213 template <typename Iterator>
    +
    214 struct is_planar<memory_based_step_iterator<Iterator>> : public is_planar<Iterator> {};
    +
    215 
    +
    216 template <typename Iterator>
    +
    217 struct channel_type<memory_based_step_iterator<Iterator>> : public channel_type<Iterator> {};
    +
    218 
    +
    220 // MemoryBasedIteratorConcept
    +
    222 template <typename Iterator>
    +
    223 struct byte_to_memunit<memory_based_step_iterator<Iterator>> : public byte_to_memunit<Iterator> {};
    +
    224 
    +
    225 template <typename Iterator>
    +
    226 inline auto memunit_step(memory_based_step_iterator<Iterator> const& p) -> std::ptrdiff_t { return p.step(); }
    +
    227 
    +
    228 template <typename Iterator>
    +
    229 inline auto memunit_distance(memory_based_step_iterator<Iterator> const& p1, memory_based_step_iterator<Iterator> const& p2)
    +
    230  -> std::ptrdiff_t
    +
    231 {
    +
    232  return memunit_distance(p1.base(),p2.base());
    +
    233 }
    +
    234 
    +
    235 template <typename Iterator>
    +
    236 inline void memunit_advance(memory_based_step_iterator<Iterator>& p,
    +
    237  std::ptrdiff_t diff) {
    +
    238  memunit_advance(p.base(), diff);
    +
    239 }
    +
    240 
    +
    241 template <typename Iterator>
    +
    242 inline auto memunit_advanced(const memory_based_step_iterator<Iterator>& p, std::ptrdiff_t diff)
    +
    243  -> memory_based_step_iterator<Iterator>
    +
    244 {
    +
    245  return memory_based_step_iterator<Iterator>(memunit_advanced(p.base(), diff),p.step());
    +
    246 }
    +
    247 
    +
    248 template <typename Iterator>
    +
    249 inline auto memunit_advanced_ref(const memory_based_step_iterator<Iterator>& p, std::ptrdiff_t diff)
    +
    250  -> typename std::iterator_traits<Iterator>::reference
    +
    251 {
    +
    252  return memunit_advanced_ref(p.base(), diff);
    +
    253 }
    254 
    -
    255 // For step iterators, pass the function object to the base
    -
    256 template <typename Iterator, typename Deref>
    -
    257 struct iterator_add_deref<memory_based_step_iterator<Iterator>,Deref> {
    -
    258  BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    -
    259 
    -
    260  using type = memory_based_step_iterator<typename iterator_add_deref<Iterator, Deref>::type>;
    -
    261 
    -
    262  static type make(const memory_based_step_iterator<Iterator>& it, const Deref& d) { return type(iterator_add_deref<Iterator, Deref>::make(it.base(),d),it.step()); }
    -
    263 };
    -
    264 
    +
    256 // HasDynamicXStepTypeConcept
    +
    258 
    +
    259 template <typename Iterator>
    +
    260 struct dynamic_x_step_type<memory_based_step_iterator<Iterator>> {
    +
    261  using type = memory_based_step_iterator<Iterator>;
    +
    262 };
    +
    263 
    +
    264 // For step iterators, pass the function object to the base
    +
    265 template <typename Iterator, typename Deref>
    +
    266 struct iterator_add_deref<memory_based_step_iterator<Iterator>,Deref> {
    +
    267  BOOST_GIL_CLASS_REQUIRE(Deref, boost::gil, PixelDereferenceAdaptorConcept)
    268 
    -
    269 template <typename I> typename dynamic_x_step_type<I>::type make_step_iterator(const I& it, std::ptrdiff_t step);
    +
    269  using type = memory_based_step_iterator<typename iterator_add_deref<Iterator, Deref>::type>;
    270 
    -
    271 namespace detail {
    -
    272 
    -
    273 // if the iterator is a plain base iterator (non-adaptor), wraps it in memory_based_step_iterator
    -
    274 template <typename I>
    -
    275 auto make_step_iterator_impl(I const& it, std::ptrdiff_t step, std::false_type)
    -
    276  -> typename dynamic_x_step_type<I>::type
    -
    277 {
    -
    278  return memory_based_step_iterator<I>(it, step);
    -
    279 }
    +
    271  static type make(const memory_based_step_iterator<Iterator>& it, const Deref& d)
    +
    272  {
    +
    273  return type(iterator_add_deref<Iterator, Deref>::make(it.base(),d),it.step());
    +
    274  }
    +
    275 };
    +
    276 
    280 
    -
    281 // If the iterator is compound, put the step in its base
    -
    282 template <typename I>
    -
    283 auto make_step_iterator_impl(I const& it, std::ptrdiff_t step, std::true_type)
    -
    284  -> typename dynamic_x_step_type<I>::type
    -
    285 {
    -
    286  return make_step_iterator(it.base(), step);
    -
    287 }
    -
    288 
    -
    289 // If the iterator is memory_based_step_iterator, change the step
    -
    290 template <typename BaseIt>
    -
    291 auto make_step_iterator_impl(
    -
    292  memory_based_step_iterator<BaseIt> const& it,
    -
    293  std::ptrdiff_t step,
    -
    294  std::true_type)
    -
    295  -> memory_based_step_iterator<BaseIt>
    -
    296 {
    -
    297  return memory_based_step_iterator<BaseIt>(it.base(), step);
    -
    298 }
    -
    299 
    -
    300 } // namespace detail
    -
    301 
    -
    315 template <typename I> // Models MemoryBasedIteratorConcept, HasDynamicXStepTypeConcept
    -
    316 typename dynamic_x_step_type<I>::type make_step_iterator(const I& it, std::ptrdiff_t step) {
    -
    317  return detail::make_step_iterator_impl(it, step, typename is_iterator_adaptor<I>::type());
    -
    318 }
    -
    319 
    -
    320 }} // namespace boost::gil
    -
    321 
    -
    322 #endif
    +
    281 template <typename I> typename dynamic_x_step_type<I>::type make_step_iterator(const I& it, std::ptrdiff_t step);
    +
    282 
    +
    283 namespace detail {
    +
    284 
    +
    285 // if the iterator is a plain base iterator (non-adaptor), wraps it in memory_based_step_iterator
    +
    286 template <typename I>
    +
    287 auto make_step_iterator_impl(I const& it, std::ptrdiff_t step, std::false_type)
    +
    288  -> typename dynamic_x_step_type<I>::type
    +
    289 {
    +
    290  return memory_based_step_iterator<I>(it, step);
    +
    291 }
    +
    292 
    +
    293 // If the iterator is compound, put the step in its base
    +
    294 template <typename I>
    +
    295 auto make_step_iterator_impl(I const& it, std::ptrdiff_t step, std::true_type)
    +
    296  -> typename dynamic_x_step_type<I>::type
    +
    297 {
    +
    298  return make_step_iterator(it.base(), step);
    +
    299 }
    +
    300 
    +
    301 // If the iterator is memory_based_step_iterator, change the step
    +
    302 template <typename BaseIt>
    +
    303 auto make_step_iterator_impl(
    +
    304  memory_based_step_iterator<BaseIt> const& it,
    +
    305  std::ptrdiff_t step,
    +
    306  std::true_type)
    +
    307  -> memory_based_step_iterator<BaseIt>
    +
    308 {
    +
    309  return memory_based_step_iterator<BaseIt>(it.base(), step);
    +
    310 }
    +
    311 
    +
    312 } // namespace detail
    +
    313 
    +
    327 template <typename I> // Models MemoryBasedIteratorConcept, HasDynamicXStepTypeConcept
    +
    328 inline auto make_step_iterator(I const& it, std::ptrdiff_t step)
    +
    329  -> typename dynamic_x_step_type<I>::type
    +
    330 {
    +
    331  return detail::make_step_iterator_impl(it, step, typename is_iterator_adaptor<I>::type());
    +
    332 }
    +
    333 
    +
    334 }} // namespace boost::gil
    +
    335 
    +
    336 #endif
    MEMORY-BASED STEP ITERATOR.
    Definition: algorithm.hpp:42
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    BOOST_FORCEINLINE bool operator!=(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:137
    -
    function object that returns the memory unit distance between two iterators and advances a given iter...
    Definition: step_iterator.hpp:122
    +
    auto operator[](difference_type d) const -> reference
    Definition: step_iterator.hpp:167
    +
    function object that returns the memory unit distance between two iterators and advances a given iter...
    Definition: step_iterator.hpp:126
    An adaptor over an existing iterator that changes the step unit.
    Definition: step_iterator.hpp:41
    -
    reference operator[](difference_type d) const
    Definition: step_iterator.hpp:159
    Concept of a random-access iterator that can be advanced in memory units (bytes or bits)
    Definition: concepts/pixel_iterator.hpp:236
    BOOST_FORCEINLINE bool operator==(const point< T > &p1, const point< T > &p2)
    Definition: point.hpp:129
    diff --git a/html/reference/structboost_1_1gil_1_1_assignable-members.html b/html/reference/structboost_1_1gil_1_1_assignable-members.html index d86b7cc28..3997b2105 100644 --- a/html/reference/structboost_1_1gil_1_1_assignable-members.html +++ b/html/reference/structboost_1_1gil_1_1_assignable-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_assignable.html b/html/reference/structboost_1_1gil_1_1_assignable.html index cc027479c..e9ef67e00 100644 --- a/html/reference/structboost_1_1gil_1_1_assignable.html +++ b/html/reference/structboost_1_1gil_1_1_assignable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_concept-members.html b/html/reference/structboost_1_1gil_1_1_channel_concept-members.html index 8f541f805..c4eef1f5a 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_channel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_concept.html b/html/reference/structboost_1_1gil_1_1_channel_concept.html index 9fdea75d0..11ed9944c 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_channel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_convertible_concept-members.html b/html/reference/structboost_1_1gil_1_1_channel_convertible_concept-members.html index de1e97851..d8f767eaa 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_convertible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_channel_convertible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_convertible_concept.html b/html/reference/structboost_1_1gil_1_1_channel_convertible_concept.html index aae35a749..d57d97b3a 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_convertible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_channel_convertible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_mapping_concept-members.html b/html/reference/structboost_1_1gil_1_1_channel_mapping_concept-members.html index fa1745fbf..1f98778c6 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_mapping_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_channel_mapping_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_mapping_concept.html b/html/reference/structboost_1_1gil_1_1_channel_mapping_concept.html index 13b84edf9..8b4210d8b 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_mapping_concept.html +++ b/html/reference/structboost_1_1gil_1_1_channel_mapping_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_value_concept-members.html b/html/reference/structboost_1_1gil_1_1_channel_value_concept-members.html index e90bec3fc..75477bd80 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_value_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_channel_value_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channel_value_concept.html b/html/reference/structboost_1_1gil_1_1_channel_value_concept.html index 21fecc009..a281530bd 100644 --- a/html/reference/structboost_1_1gil_1_1_channel_value_concept.html +++ b/html/reference/structboost_1_1gil_1_1_channel_value_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channels_compatible_concept-members.html b/html/reference/structboost_1_1gil_1_1_channels_compatible_concept-members.html index 2b72f1bb8..fce8dd795 100644 --- a/html/reference/structboost_1_1gil_1_1_channels_compatible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_channels_compatible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_channels_compatible_concept.html b/html/reference/structboost_1_1gil_1_1_channels_compatible_concept.html index a97d58942..2f4360dd1 100644 --- a/html/reference/structboost_1_1gil_1_1_channels_compatible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_channels_compatible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_collection_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_collection_image_view_concept-members.html index 097bbe3b6..101862690 100644 --- a/html/reference/structboost_1_1gil_1_1_collection_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_collection_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_collection_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_collection_image_view_concept.html index 0c035069b..810f0860c 100644 --- a/html/reference/structboost_1_1gil_1_1_collection_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_collection_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_base_concept-members.html b/html/reference/structboost_1_1gil_1_1_color_base_concept-members.html index 1fe5d3548..642a502d5 100644 --- a/html/reference/structboost_1_1gil_1_1_color_base_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_color_base_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_base_concept.html b/html/reference/structboost_1_1gil_1_1_color_base_concept.html index d2b6b129e..c3de130cb 100644 --- a/html/reference/structboost_1_1gil_1_1_color_base_concept.html +++ b/html/reference/structboost_1_1gil_1_1_color_base_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_base_value_concept-members.html b/html/reference/structboost_1_1gil_1_1_color_base_value_concept-members.html index a4ba18e5e..628020f7e 100644 --- a/html/reference/structboost_1_1gil_1_1_color_base_value_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_color_base_value_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_base_value_concept.html b/html/reference/structboost_1_1gil_1_1_color_base_value_concept.html index d72015f38..3075ff693 100644 --- a/html/reference/structboost_1_1gil_1_1_color_base_value_concept.html +++ b/html/reference/structboost_1_1gil_1_1_color_base_value_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept-members.html b/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept-members.html index 67ba05c69..9d68e38f6 100644 --- a/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept.html b/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept.html index 09e77aa86..1eeec584b 100644 --- a/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_color_bases_compatible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_space_concept-members.html b/html/reference/structboost_1_1gil_1_1_color_space_concept-members.html index 6ed112de0..1d5d33fc4 100644 --- a/html/reference/structboost_1_1gil_1_1_color_space_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_color_space_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_space_concept.html b/html/reference/structboost_1_1gil_1_1_color_space_concept.html index 540fc5b3a..ef916bc6e 100644 --- a/html/reference/structboost_1_1gil_1_1_color_space_concept.html +++ b/html/reference/structboost_1_1gil_1_1_color_space_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept-members.html b/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept-members.html index b81db4e72..36e00cc45 100644 --- a/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept.html b/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept.html index 3a778185f..cf4949658 100644 --- a/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_color_spaces_compatible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_copy_constructible-members.html b/html/reference/structboost_1_1gil_1_1_copy_constructible-members.html index 137c58a19..a036ec484 100644 --- a/html/reference/structboost_1_1gil_1_1_copy_constructible-members.html +++ b/html/reference/structboost_1_1gil_1_1_copy_constructible-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_copy_constructible.html b/html/reference/structboost_1_1gil_1_1_copy_constructible.html index 0b8052d89..7e81da247 100644 --- a/html/reference/structboost_1_1gil_1_1_copy_constructible.html +++ b/html/reference/structboost_1_1gil_1_1_copy_constructible.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_default_constructible-members.html b/html/reference/structboost_1_1gil_1_1_default_constructible-members.html index 5672fb607..bf45a58d5 100644 --- a/html/reference/structboost_1_1gil_1_1_default_constructible-members.html +++ b/html/reference/structboost_1_1gil_1_1_default_constructible-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_default_constructible.html b/html/reference/structboost_1_1gil_1_1_default_constructible.html index 7aa2fe059..6c297c4f0 100644 --- a/html/reference/structboost_1_1gil_1_1_default_constructible.html +++ b/html/reference/structboost_1_1gil_1_1_default_constructible.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_equality_comparable-members.html b/html/reference/structboost_1_1gil_1_1_equality_comparable-members.html index a9ec5131f..8c844feca 100644 --- a/html/reference/structboost_1_1gil_1_1_equality_comparable-members.html +++ b/html/reference/structboost_1_1gil_1_1_equality_comparable-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_equality_comparable.html b/html/reference/structboost_1_1gil_1_1_equality_comparable.html index 3c8aa2316..2800010d5 100644 --- a/html/reference/structboost_1_1gil_1_1_equality_comparable.html +++ b/html/reference/structboost_1_1gil_1_1_equality_comparable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept-members.html index 7611fe03a..66a95d00e 100644 --- a/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept.html index b95a5d6ec..3786e45cf 100644 --- a/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_forward_collection_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept-members.html b/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept-members.html index 2cd683642..f36ebb110 100644 --- a/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept.html b/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept.html index 4385adf07..322894521 100644 --- a/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept.html +++ b/html/reference/structboost_1_1gil_1_1_has_dynamic_x_step_type_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept-members.html b/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept-members.html index c8219a9a0..9b7a63a02 100644 --- a/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept.html b/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept.html index ce7930f96..762214448 100644 --- a/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept.html +++ b/html/reference/structboost_1_1gil_1_1_has_dynamic_y_step_type_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept-members.html b/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept-members.html index fc56aeb85..4448d559e 100644 --- a/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept.html b/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept.html index ba27c0629..1469e1755 100644 --- a/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept.html +++ b/html/reference/structboost_1_1gil_1_1_has_transposed_type_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept-members.html b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept-members.html index 4060cc902..04c73d839 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept.html b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept.html index f2061d828..8263327e0 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept-members.html b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept-members.html index 9391daef4..925248425 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept.html b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept.html index 8715de9fb..ff1ddcd56 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_color_base_value_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept-members.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept-members.html index 44c06d174..670ab7893 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept.html index 0aa1573ec..015d346e4 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_based_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept-members.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept-members.html index cd4b70cd7..ef531982b 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept.html index 6ff1a3638..58c828d7c 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept-members.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept-members.html index 34e8d1a10..ea923d549 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept.html b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept.html index 71145eaa0..35c576171 100644 --- a/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept.html +++ b/html/reference/structboost_1_1gil_1_1_homogeneous_pixel_value_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_image_concept-members.html b/html/reference/structboost_1_1gil_1_1_image_concept-members.html index 222e42f92..a8167d393 100644 --- a/html/reference/structboost_1_1gil_1_1_image_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_image_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_image_concept.html b/html/reference/structboost_1_1gil_1_1_image_concept.html index 2133ec8e2..0e2a2581b 100644 --- a/html/reference/structboost_1_1gil_1_1_image_concept.html +++ b/html/reference/structboost_1_1gil_1_1_image_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_image_view_concept-members.html index 396ee13c3..3ed4d896b 100644 --- a/html/reference/structboost_1_1gil_1_1_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_image_view_concept.html index 3e0fe96fe..d9deb2d0b 100644 --- a/html/reference/structboost_1_1gil_1_1_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept-members.html b/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept-members.html index 30d56a6fd..bbabd80b6 100644 --- a/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept.html b/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept.html index f8347644c..b8671a507 100644 --- a/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept.html +++ b/html/reference/structboost_1_1gil_1_1_iterator_adaptor_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept-members.html b/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept-members.html index 2213abbcd..cacbe1645 100644 --- a/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept.html b/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept.html index c183d1b74..4905342dc 100644 --- a/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_memory_based_iterator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_metafunction-members.html b/html/reference/structboost_1_1gil_1_1_metafunction-members.html index 14476671b..066acf03f 100644 --- a/html/reference/structboost_1_1gil_1_1_metafunction-members.html +++ b/html/reference/structboost_1_1gil_1_1_metafunction-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_metafunction.html b/html/reference/structboost_1_1gil_1_1_metafunction.html index 036cfa6df..00a759d05 100644 --- a/html/reference/structboost_1_1gil_1_1_metafunction.html +++ b/html/reference/structboost_1_1gil_1_1_metafunction.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_channel_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_channel_concept-members.html index 0e27ed520..803df5e23 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_channel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_channel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_channel_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_channel_concept.html index 10703273e..161bf155a 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_channel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_channel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept-members.html index 9c5d23fcb..c5b8fd129 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept.html index 745b7cdc1..223f5d4c4 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_color_base_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept-members.html index 8c9becda5..67d9bde60 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept.html index 058fb743c..e629954fb 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_color_base_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept-members.html index ff3dab9c1..c2790ed63 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept.html index 96d9ec67e..47c65d514 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_homogeneous_pixel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept-members.html index f46135270..a2f341a77 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept.html index f7249b5cb..1a8a8c725 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept-members.html index ba58900ff..e8f310aa5 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept.html index 5e1b1ef43..a84f111a3 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_iterator_adaptor_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept-members.html index 40c8a84aa..d2eb845eb 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept.html index 0f4773fd1..633bcf9a4 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept-members.html index 9929d40d1..037ce4462 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept.html index 78eb00115..67940fd1a 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_iterator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept-members.html index 3ef87ad5e..01624be23 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept.html index b0860b0c8..aae77f079 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_pixel_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept-members.html index 0bc7b8aff..9557c061f 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept.html index 50133aa3c..76d986107 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept-members.html index 0c9c4b394..b39683da3 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept.html index 8c92b209a..beb5843e9 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access2_d_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept-members.html index 698754f8d..10acddc32 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept.html index f635f7d6c..6f7c2a690 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept-members.html index 644812ca3..bf803523a 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept.html index 904d9cd28..13725199a 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_random_access_n_d_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept-members.html b/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept-members.html index 0402b6bac..51dfb97ed 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept.html b/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept.html index 580f630af..7ca70ff48 100644 --- a/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_mutable_step_iterator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_based_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_based_concept-members.html index 7e02a8a81..128c1fb4a 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_based_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_based_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_based_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_based_concept.html index b0ca41ee9..3f43cac5b 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_based_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_based_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_concept-members.html index 2d7e1d408..8d6b0f546 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_concept.html index 6894cf7ab..646d4dbca 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept-members.html index 53b68e295..71c27fa12 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept.html index b67149717..31a1ca8fe 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_convertible_concept.html @@ -39,7 +39,7 @@ $(function() {
    @@ -86,7 +86,7 @@ struct boost::gil::PixelConvertibleConcept< SrcP, DstP >
  • concepts/pixel.hpp
  • -
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:339
    +
    void color_convert(const SrcP &src, DstP &dst)
    helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
    Definition: color_convert.hpp:342
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept-members.html index c0800dfc5..b6b8e97e0 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept.html index 3ab7580af..a4d169ef9 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_dereference_adaptor_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept-members.html index c1bacac02..ed7d74979 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept.html index 0922fe205..3a29e70a6 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_iterator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_locator_concept-members.html index c306c66e0..58a1539f8 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_locator_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_locator_concept.html index 97fe8a172..c5e9b66dc 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_value_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixel_value_concept-members.html index 69854c255..3da108259 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_value_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_value_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixel_value_concept.html b/html/reference/structboost_1_1gil_1_1_pixel_value_concept.html index cfa452e29..7832f9656 100644 --- a/html/reference/structboost_1_1gil_1_1_pixel_value_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixel_value_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept-members.html b/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept-members.html index 1685945e5..f9060ecf4 100644 --- a/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept.html b/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept.html index c82fb0179..2d855aaf5 100644 --- a/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_pixels_compatible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_point2_d_concept-members.html b/html/reference/structboost_1_1gil_1_1_point2_d_concept-members.html index 01b786459..5e4754920 100644 --- a/html/reference/structboost_1_1gil_1_1_point2_d_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_point2_d_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_point2_d_concept.html b/html/reference/structboost_1_1gil_1_1_point2_d_concept.html index 67d964429..06ed136e3 100644 --- a/html/reference/structboost_1_1gil_1_1_point2_d_concept.html +++ b/html/reference/structboost_1_1gil_1_1_point2_d_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_point_n_d_concept-members.html b/html/reference/structboost_1_1gil_1_1_point_n_d_concept-members.html index 6717d7769..97990bec6 100644 --- a/html/reference/structboost_1_1gil_1_1_point_n_d_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_point_n_d_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_point_n_d_concept.html b/html/reference/structboost_1_1gil_1_1_point_n_d_concept.html index 0abb9233d..d8ce351af 100644 --- a/html/reference/structboost_1_1gil_1_1_point_n_d_concept.html +++ b/html/reference/structboost_1_1gil_1_1_point_n_d_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept-members.html index 6962a648c..a5cd08fb9 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept.html index c7b6fcf7f..4ddb5a112 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept-members.html index c7e5bbc9f..c0397e8d6 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept.html index 746a6f5be..9718d3e51 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    @@ -87,17 +87,17 @@ struct boost::gil::RandomAccess2DImageViewConcept< View >
    y_coord_t View::height() const;
    // X-navigation
    -
    x_iterator View::x_at(const point_t&) const;
    +
    x_iterator View::x_at(point_t const&) const;
    x_iterator View::row_begin(y_coord_t) const;
    x_iterator View::row_end (y_coord_t) const;
    // Y-navigation
    -
    y_iterator View::y_at(const point_t&) const;
    +
    y_iterator View::y_at(point_t const&) const;
    y_iterator View::col_begin(x_coord_t) const;
    y_iterator View::col_end (x_coord_t) const;
    // navigating in 2D
    -
    xy_locator View::xy_at(const point_t&) const;
    +
    xy_locator View::xy_at(point_t const&) const;
    // (x,y) versions of all methods taking point_t
    View::View(x_coord_t,y_coord_t,const locator&);
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept-members.html index bcbcdf273..8c5ecef74 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept.html b/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept.html index 8c87bb10d..e29cfda5d 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access2_d_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept-members.html index bdfb28c2c..bd10a5763 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept.html index 2d90a061a..bbcd00d5d 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_concept.html @@ -39,7 +39,7 @@ $(function() {
    @@ -88,16 +88,16 @@ struct boost::gil::RandomAccessNDImageConcept< Image >
    void Image::recreate(point_t new_dims, std::size_t alignment=1);
    void Image::recreate(point_t new_dims, value_type fill_value, std::size_t alignment);
    -
    const point_t& Image::dimensions() const;
    -
    const const_view_t& const_view(const Image&);
    -
    const view_t& view(Image&);
    +
    point_t const& Image::dimensions() const;
    +
    const const_view_t& const_view(const Image&);
    +
    const view_t& view(Image&);
    };

    The documentation for this struct was generated from the following file: -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    -
    const image< Pixel, IsPlanar, Alloc >::const_view_t const_view(const image< Pixel, IsPlanar, Alloc > &img)
    Returns the constant-pixel view of an image.
    Definition: image.hpp:553
    +
    auto const_view(const image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::const_view_t const
    Returns the constant-pixel view of an image.
    Definition: image.hpp:573
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept-members.html index 4a99d3ee5..67ce1107b 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept.html index 97ba04b40..763009658 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    @@ -111,14 +111,14 @@ struct boost::gil::RandomAccessNDImageViewConcept< View >
    iterator View::end() const;
    reverse_iterator View::rbegin() const;
    reverse_iterator View::rend() const;
    -
    iterator View::at(const point_t&);
    +
    iterator View::at(point_t const&);
    point_t View::dimensions() const; // number of elements along each dimension
    bool View::is_1d_traversable() const; // can an iterator over the first dimension visit each value? I.e. are there gaps between values?
    // iterator along a given dimension starting at a given point
    -
    template <size_t D> View::axis<D>::iterator View::axis_iterator(const point_t&) const;
    +
    template <size_t D> View::axis<D>::iterator View::axis_iterator(point_t const&) const;
    -
    reference operator()(View,const point_t&) const;
    +
    reference operator()(View,point_t const&) const;
    };

    The documentation for this struct was generated from the following file:
    • concepts/image_view.hpp
    • diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept-members.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept-members.html index 68e7c57ed..58fe9a500 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept.html b/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept.html index 80f1de5e4..eaff674da 100644 --- a/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_random_access_n_d_locator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_regular-members.html b/html/reference/structboost_1_1gil_1_1_regular-members.html index 265c19a9d..ac1781f47 100644 --- a/html/reference/structboost_1_1gil_1_1_regular-members.html +++ b/html/reference/structboost_1_1gil_1_1_regular-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_regular.html b/html/reference/structboost_1_1gil_1_1_regular.html index 123d7238b..5a4743cb9 100644 --- a/html/reference/structboost_1_1gil_1_1_regular.html +++ b/html/reference/structboost_1_1gil_1_1_regular.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept-members.html b/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept-members.html index c49712b48..4f57ec0fe 100644 --- a/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept.html b/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept.html index 7d2552b08..fd89d2ae0 100644 --- a/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept.html +++ b/html/reference/structboost_1_1gil_1_1_reversible_collection_image_view_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_same_type-members.html b/html/reference/structboost_1_1gil_1_1_same_type-members.html index 4eb6465fe..956e8e6d9 100644 --- a/html/reference/structboost_1_1gil_1_1_same_type-members.html +++ b/html/reference/structboost_1_1gil_1_1_same_type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_same_type.html b/html/reference/structboost_1_1gil_1_1_same_type.html index a90914671..a1a0f5d82 100644 --- a/html/reference/structboost_1_1gil_1_1_same_type.html +++ b/html/reference/structboost_1_1gil_1_1_same_type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_step_iterator_concept-members.html b/html/reference/structboost_1_1gil_1_1_step_iterator_concept-members.html index 7ed86d7f9..6351719ba 100644 --- a/html/reference/structboost_1_1gil_1_1_step_iterator_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_step_iterator_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_step_iterator_concept.html b/html/reference/structboost_1_1gil_1_1_step_iterator_concept.html index 7ed2209e2..bc81185d4 100644 --- a/html/reference/structboost_1_1gil_1_1_step_iterator_concept.html +++ b/html/reference/structboost_1_1gil_1_1_step_iterator_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_swappable-members.html b/html/reference/structboost_1_1gil_1_1_swappable-members.html index 3cf6720bf..d92f9b63e 100644 --- a/html/reference/structboost_1_1gil_1_1_swappable-members.html +++ b/html/reference/structboost_1_1gil_1_1_swappable-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_swappable.html b/html/reference/structboost_1_1gil_1_1_swappable.html index 895da789e..180fa4e0a 100644 --- a/html/reference/structboost_1_1gil_1_1_swappable.html +++ b/html/reference/structboost_1_1gil_1_1_swappable.html @@ -39,7 +39,7 @@ $(function() {
    @@ -85,7 +85,7 @@ struct boost::gil::Swappable< T >
  • basic.hpp
  • -
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:529
    +
    void swap(boost::gil::packed_channel_reference< BF, FB, NB, M > const x, R &y)
    swap for packed_channel_reference
    Definition: channel.hpp:583
    diff --git a/html/reference/structboost_1_1gil_1_1_views_compatible_concept-members.html b/html/reference/structboost_1_1gil_1_1_views_compatible_concept-members.html index a7ae21870..2561469d9 100644 --- a/html/reference/structboost_1_1gil_1_1_views_compatible_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1_views_compatible_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1_views_compatible_concept.html b/html/reference/structboost_1_1gil_1_1_views_compatible_concept.html index ba77d83a3..e541287ac 100644 --- a/html/reference/structboost_1_1gil_1_1_views_compatible_concept.html +++ b/html/reference/structboost_1_1gil_1_1_views_compatible_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1alpha__t.html b/html/reference/structboost_1_1gil_1_1alpha__t.html index f245eebac..e6ec84cb4 100644 --- a/html/reference/structboost_1_1gil_1_1alpha__t.html +++ b/html/reference/structboost_1_1gil_1_1alpha__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1binary__operation__obj-members.html b/html/reference/structboost_1_1gil_1_1binary__operation__obj-members.html index 3dd21a95a..c9692ce9c 100644 --- a/html/reference/structboost_1_1gil_1_1binary__operation__obj-members.html +++ b/html/reference/structboost_1_1gil_1_1binary__operation__obj-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,9 +50,9 @@ $(function() {

    This is the complete list of members for binary_operation_obj< Derived, Result >, including all inherited members.

    - - - + + +
    operator()(const std::pair< const V1 *, const V2 * > &p) const (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    operator()(const V1 &v1, const V2 &v2) const (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    operator()(const error_t &) const (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    operator()(const std::pair< const V1 *, const V2 * > &p) const -> result_type (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    operator()(const V1 &v1, const V2 &v2) const -> result_type (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    operator()(const error_t &) const -> result_type (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >inline
    result_type typedef (defined in binary_operation_obj< Derived, Result >)binary_operation_obj< Derived, Result >
    diff --git a/html/reference/structboost_1_1gil_1_1binary__operation__obj.html b/html/reference/structboost_1_1gil_1_1binary__operation__obj.html index 7cb209677..22738b691 100644 --- a/html/reference/structboost_1_1gil_1_1binary__operation__obj.html +++ b/html/reference/structboost_1_1gil_1_1binary__operation__obj.html @@ -39,7 +39,7 @@ $(function() {
    @@ -65,17 +65,17 @@ using result_type = Re - - - - + + - - - - + + + +

    Public Member Functions

    +
    template<typename V1 , typename V2 >
    BOOST_FORCEINLINE result_type operator() (const std::pair< const V1 *, const V2 * > &p) const
     
    +
    BOOST_FORCEINLINE auto operator() (const std::pair< const V1 *, const V2 * > &p) const -> result_type
     
    template<typename V1 , typename V2 >
    BOOST_FORCEINLINE result_type operator() (const V1 &v1, const V2 &v2) const
     
    -result_type operator() (const error_t &) const
     
    BOOST_FORCEINLINE auto operator() (const V1 &v1, const V2 &v2) const -> result_type
     
    +auto operator() (const error_t &) const -> result_type
     

    Detailed Description

    template<typename Derived, typename Result = void>
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type-members.html index 23669fe9c..0f9c0ec4f 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type.html index 9f14662e4..05239f3f2 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image1__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type-members.html index 90b6a0e87..89a2d7b48 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type.html index ee9192e7f..e4c58c29f 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image2__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type-members.html index cb3edc590..2178c2b72 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type.html index c265f3537..c1683ff49 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image3__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type-members.html index fdbacce44..db2775b0c 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type.html index 9c5a39a57..0c20a46ba 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image4__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type-members.html index f39616d08..544e5e07c 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type.html index 94fca1c30..fcbd63828 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image5__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image__type-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image__type-members.html index f8b87fc0f..f3b1a5c39 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image__type-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__image__type.html b/html/reference/structboost_1_1gil_1_1bit__aligned__image__type.html index 15e618ba5..33f3bd212 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__image__type.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__image__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator-members.html b/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator-members.html index 901a06f1e..0cf8dd87d 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator-members.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -56,13 +56,13 @@ $(function() { bit_aligned_pixel_iterator(const bit_aligned_pixel_iterator< Ref > &p) (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline bit_aligned_pixel_iterator(reference *ref) (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline bit_aligned_pixel_iterator(typename bit_range_t::byte_t *data, int bit_offset=0) (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inlineexplicit - bit_range() const (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline - bit_range() (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline + bit_range() const -> bit_range_t const & (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline + bit_range() -> bit_range_t & (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline boost::iterator_core_access (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >friend difference_type typedef (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference > - operator->() const (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline + operator->() const -> reference (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline operator=(const bit_aligned_pixel_iterator &p) (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >inline - operator[](difference_type d) constbit_aligned_pixel_iterator< NonAlignedPixelReference >inline + operator[](difference_type d) const -> referencebit_aligned_pixel_iterator< NonAlignedPixelReference >inline reference typedef (defined in bit_aligned_pixel_iterator< NonAlignedPixelReference >)bit_aligned_pixel_iterator< NonAlignedPixelReference >
    diff --git a/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator.html b/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator.html index 153b49f9c..88b7974c7 100644 --- a/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator.html +++ b/html/reference/structboost_1_1gil_1_1bit__aligned__pixel__iterator.html @@ -39,7 +39,7 @@ $(function() {
    @@ -87,17 +87,17 @@ template<typename Ref >  bit_aligned_pixel_iterator (typename bit_range_t::byte_t *data, int bit_offset=0)   -reference operator[] (difference_type d) const -  - -reference operator-> () const -  - -const bit_range_t & bit_range () const -  - -bit_range_t & bit_range () -  +auto operator[] (difference_type d) const -> reference +  + +auto operator-> () const -> reference +  + +auto bit_range () const -> bit_range_t const & +  + +auto bit_range () -> bit_range_t & +  @@ -112,8 +112,8 @@ struct boost::gil::bit_aligned_pixel_iterator< NonAlignedPixelReference ><

    An iterator over non-byte-aligned pixels. Models PixelIteratorConcept, PixelBasedConcept, MemoryBasedIteratorConcept, HasDynamicXStepTypeConcept.

    An iterator over pixels that correspond to non-byte-aligned bit ranges. Examples of such pixels are single bit grayscale pixel, or a 6-bit RGB 222 pixel.

    Member Function Documentation

    - -

    ◆ operator[]()

    + +

    ◆ operator[]()

    @@ -122,11 +122,11 @@ struct boost::gil::bit_aligned_pixel_iterator< NonAlignedPixelReference ><
    diff --git a/html/reference/structboost_1_1gil_1_1black__t.html b/html/reference/structboost_1_1gil_1_1black__t.html index a30e5312e..168c4d1c2 100644 --- a/html/reference/structboost_1_1gil_1_1black__t.html +++ b/html/reference/structboost_1_1gil_1_1black__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1blue__t.html b/html/reference/structboost_1_1gil_1_1blue__t.html index 498719a33..0a9b9d240 100644 --- a/html/reference/structboost_1_1gil_1_1blue__t.html +++ b/html/reference/structboost_1_1gil_1_1blue__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1byte__to__memunit.html b/html/reference/structboost_1_1gil_1_1byte__to__memunit.html index fda1875ba..fbbc9ea2c 100644 --- a/html/reference/structboost_1_1gil_1_1byte__to__memunit.html +++ b/html/reference/structboost_1_1gil_1_1byte__to__memunit.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__assigns__t-members.html b/html/reference/structboost_1_1gil_1_1channel__assigns__t-members.html index de6e38550..c09e3d136 100644 --- a/html/reference/structboost_1_1gil_1_1channel__assigns__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__assigns__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__assigns__t.html b/html/reference/structboost_1_1gil_1_1channel__assigns__t.html index 1d5066a40..ea51041d4 100644 --- a/html/reference/structboost_1_1gil_1_1channel__assigns__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__assigns__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter-members.html b/html/reference/structboost_1_1gil_1_1channel__converter-members.html index 99dbc4a75..df7cd438c 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_converter< SrcChannelV, DstChannelV >, including all inherited members.

    Friends

    - + - +
    reference operator[] auto operator[] ( difference_type  d) const const -> reference
    - +
    argument_type typedef (defined in channel_converter< SrcChannelV, DstChannelV >)channel_converter< SrcChannelV, DstChannelV >
    operator()(const SrcChannelV &src) const (defined in channel_converter< SrcChannelV, DstChannelV >)channel_converter< SrcChannelV, DstChannelV >inline
    operator()(SrcChannelV const &src) const -> DstChannelV (defined in channel_converter< SrcChannelV, DstChannelV >)channel_converter< SrcChannelV, DstChannelV >inline
    result_type typedef (defined in channel_converter< SrcChannelV, DstChannelV >)channel_converter< SrcChannelV, DstChannelV >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter.html b/html/reference/structboost_1_1gil_1_1channel__converter.html index 4bf695203..061e12ab6 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,9 +68,9 @@ using result_type = Ds - - + +

    Public Member Functions

    -DstChannelV operator() (const SrcChannelV &src) const
     
    +auto operator() (SrcChannelV const &src) const -> DstChannelV
     

    Detailed Description

    template<typename SrcChannelV, typename DstChannelV>
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4-members.html index afa61b1fc..4aaa0a6bd 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4.html index b8e115b23..81d6af84d 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01_t_00_01_t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4-members.html index a8e314363..9cb7dd98b 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4.html index c58dce062..bf71829e0 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01_dst_channel_v_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,9 +68,9 @@ using result_type = Ds - - + +

    Public Member Functions

    -DstChannelV operator() (float32_t x) const
     
    +auto operator() (float32_t x) const -> DstChannelV
     

    Detailed Description

    template<typename DstChannelV>
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4-members.html index 2bf458484..77b184a67 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_converter_unsigned< float32_t, uint32_t >, including all inherited members.

    - +
    argument_type typedef (defined in channel_converter_unsigned< float32_t, uint32_t >)channel_converter_unsigned< float32_t, uint32_t >
    operator()(float32_t x) const (defined in channel_converter_unsigned< float32_t, uint32_t >)channel_converter_unsigned< float32_t, uint32_t >inline
    operator()(float32_t x) const -> uint32_t (defined in channel_converter_unsigned< float32_t, uint32_t >)channel_converter_unsigned< float32_t, uint32_t >inline
    result_type typedef (defined in channel_converter_unsigned< float32_t, uint32_t >)channel_converter_unsigned< float32_t, uint32_t >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4.html index 167aba136..3f74ef47f 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01float32__t_00_01uint32__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,9 +68,9 @@ using result_type = ui - - + +

    Public Member Functions

    -uint32_t operator() (float32_t x) const
     
    +auto operator() (float32_t x) const -> uint32_t
     

    Detailed Description

    32 bit <-> float channel conversion

    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4-members.html index 5da648803..28cd284bb 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4.html index 9985a4c01..7f7bc1256 100644 --- a/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__converter__unsigned_3_01uint32__t_00_01float32__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,9 +68,9 @@ using result_type = - - + +

    Public Member Functions

    -float32_t operator() (uint32_t x) const
     
    +auto operator() (uint32_t x) const -> float32_t
     

    Detailed Description

    32 bit <-> float channel conversion

    diff --git a/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t-members.html index 08a6f15db..685d24c85 100644 --- a/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t.html b/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t.html index 8ae805fe1..24fba38be 100644 --- a/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__divides__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__divides__t-members.html b/html/reference/structboost_1_1gil_1_1channel__divides__t-members.html index 22b3d947a..bf8a36860 100644 --- a/html/reference/structboost_1_1gil_1_1channel__divides__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__divides__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__divides__t.html b/html/reference/structboost_1_1gil_1_1channel__divides__t.html index 0ed36e30c..8f4f49473 100644 --- a/html/reference/structboost_1_1gil_1_1channel__divides__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__divides__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__halves__t-members.html b/html/reference/structboost_1_1gil_1_1channel__halves__t-members.html index c8e12b65c..6bd425b1a 100644 --- a/html/reference/structboost_1_1gil_1_1channel__halves__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__halves__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__halves__t.html b/html/reference/structboost_1_1gil_1_1channel__halves__t.html index eb7848c95..a0d7219bf 100644 --- a/html/reference/structboost_1_1gil_1_1channel__halves__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__halves__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference60971d1be7c73d78ff725e654349b4f8.html b/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference60971d1be7c73d78ff725e654349b4f8.html index 02c7cb737..5c317b539 100644 --- a/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference60971d1be7c73d78ff725e654349b4f8.html +++ b/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference60971d1be7c73d78ff725e654349b4f8.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html index e14720caf..fc8aea187 100644 --- a/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__mapping__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t-members.html index c1ba6b51c..3f7c7ef45 100644 --- a/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t.html b/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t.html index d779f0233..32f55305d 100644 --- a/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__minus__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__minus__t-members.html b/html/reference/structboost_1_1gil_1_1channel__minus__t-members.html index 07e38a180..8f1c070a5 100644 --- a/html/reference/structboost_1_1gil_1_1channel__minus__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__minus__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__minus__t.html b/html/reference/structboost_1_1gil_1_1channel__minus__t.html index f842e226f..75f28bb4a 100644 --- a/html/reference/structboost_1_1gil_1_1channel__minus__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__minus__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplier-members.html index ecdd8dd21..9430541c5 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_multiplier< ChannelValue >, including all inherited members.

    - +
    first_argument_type typedef (defined in channel_multiplier< ChannelValue >)channel_multiplier< ChannelValue >
    operator()(ChannelValue a, ChannelValue b) const (defined in channel_multiplier< ChannelValue >)channel_multiplier< ChannelValue >inline
    operator()(ChannelValue a, ChannelValue b) const -> ChannelValue (defined in channel_multiplier< ChannelValue >)channel_multiplier< ChannelValue >inline
    result_type typedef (defined in channel_multiplier< ChannelValue >)channel_multiplier< ChannelValue >
    second_argument_type typedef (defined in channel_multiplier< ChannelValue >)channel_multiplier< ChannelValue >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier.html b/html/reference/structboost_1_1gil_1_1channel__multiplier.html index 080ff19d3..deb36c9ed 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier.html @@ -39,7 +39,7 @@ $(function() {
    @@ -71,9 +71,9 @@ using result_type = Ch - - + +

    Public Member Functions

    -ChannelValue operator() (ChannelValue a, ChannelValue b) const
     
    +auto operator() (ChannelValue a, ChannelValue b) const -> ChannelValue
     

    Detailed Description

    template<typename ChannelValue>
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned-members.html index 48e824bc8..8e5a06fa2 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_multiplier_unsigned< ChannelValue >, including all inherited members.

    - +
    first_argument_type typedef (defined in channel_multiplier_unsigned< ChannelValue >)channel_multiplier_unsigned< ChannelValue >
    operator()(ChannelValue a, ChannelValue b) const (defined in channel_multiplier_unsigned< ChannelValue >)channel_multiplier_unsigned< ChannelValue >inline
    operator()(ChannelValue a, ChannelValue b) const -> ChannelValue (defined in channel_multiplier_unsigned< ChannelValue >)channel_multiplier_unsigned< ChannelValue >inline
    result_type typedef (defined in channel_multiplier_unsigned< ChannelValue >)channel_multiplier_unsigned< ChannelValue >
    second_argument_type typedef (defined in channel_multiplier_unsigned< ChannelValue >)channel_multiplier_unsigned< ChannelValue >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned.html index 50e7f1936..e5bbdfbc9 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned.html @@ -39,7 +39,7 @@ $(function() {
    @@ -71,9 +71,9 @@ using result_type = Ch - - + +

    Public Member Functions

    -ChannelValue operator() (ChannelValue a, ChannelValue b) const
     
    +auto operator() (ChannelValue a, ChannelValue b) const -> ChannelValue
     

    Detailed Description

    template<typename ChannelValue>
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4-members.html index b3a4febca..ecc364d07 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_multiplier_unsigned< float32_t >, including all inherited members.

    - +
    first_argument_type typedef (defined in channel_multiplier_unsigned< float32_t >)channel_multiplier_unsigned< float32_t >
    operator()(float32_t a, float32_t b) const (defined in channel_multiplier_unsigned< float32_t >)channel_multiplier_unsigned< float32_t >inline
    operator()(float32_t a, float32_t b) const -> float32_t (defined in channel_multiplier_unsigned< float32_t >)channel_multiplier_unsigned< float32_t >inline
    result_type typedef (defined in channel_multiplier_unsigned< float32_t >)channel_multiplier_unsigned< float32_t >
    second_argument_type typedef (defined in channel_multiplier_unsigned< float32_t >)channel_multiplier_unsigned< float32_t >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4.html index 35022412f..bd1779b96 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01float32__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -71,9 +71,9 @@ using result_type = - - + +

    Public Member Functions

    -float32_t operator() (float32_t a, float32_t b) const
     
    +auto operator() (float32_t a, float32_t b) const -> float32_t
     

    Detailed Description

    Specialization of channel_multiply for float 0..1 channels.

    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4-members.html index 7b7df8e53..5ce2c6c12 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_multiplier_unsigned< uint16_t >, including all inherited members.

    - +
    first_argument_type typedef (defined in channel_multiplier_unsigned< uint16_t >)channel_multiplier_unsigned< uint16_t >
    operator()(uint16_t a, uint16_t b) const (defined in channel_multiplier_unsigned< uint16_t >)channel_multiplier_unsigned< uint16_t >inline
    operator()(uint16_t a, uint16_t b) const -> uint16_t (defined in channel_multiplier_unsigned< uint16_t >)channel_multiplier_unsigned< uint16_t >inline
    result_type typedef (defined in channel_multiplier_unsigned< uint16_t >)channel_multiplier_unsigned< uint16_t >
    second_argument_type typedef (defined in channel_multiplier_unsigned< uint16_t >)channel_multiplier_unsigned< uint16_t >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4.html index 67528e287..3260ec3ab 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint16__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -71,9 +71,9 @@ using result_type = ui - - + +

    Public Member Functions

    -uint16_t operator() (uint16_t a, uint16_t b) const
     
    +auto operator() (uint16_t a, uint16_t b) const -> uint16_t
     

    Detailed Description

    Specialization of channel_multiply for 16-bit unsigned channels.

    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4-members.html index 6ba976cb2..8cee6fe1e 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,7 +51,7 @@ $(function() {

    This is the complete list of members for channel_multiplier_unsigned< uint8_t >, including all inherited members.

    - +
    first_argument_type typedef (defined in channel_multiplier_unsigned< uint8_t >)channel_multiplier_unsigned< uint8_t >
    operator()(uint8_t a, uint8_t b) const (defined in channel_multiplier_unsigned< uint8_t >)channel_multiplier_unsigned< uint8_t >inline
    operator()(uint8_t a, uint8_t b) const -> uint8_t (defined in channel_multiplier_unsigned< uint8_t >)channel_multiplier_unsigned< uint8_t >inline
    result_type typedef (defined in channel_multiplier_unsigned< uint8_t >)channel_multiplier_unsigned< uint8_t >
    second_argument_type typedef (defined in channel_multiplier_unsigned< uint8_t >)channel_multiplier_unsigned< uint8_t >
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4.html b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4.html index f2bb6f546..5fe82c85b 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplier__unsigned_3_01uint8__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -71,9 +71,9 @@ using result_type = ui - - + +

    Public Member Functions

    -uint8_t operator() (uint8_t a, uint8_t b) const
     
    +auto operator() (uint8_t a, uint8_t b) const -> uint8_t
     

    Detailed Description

    Specialization of channel_multiply for 8-bit unsigned channels.

    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t-members.html index 75b7611ce..80306752e 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t.html b/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t.html index 71ce70317..2b63fcccd 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplies__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplies__t-members.html b/html/reference/structboost_1_1gil_1_1channel__multiplies__t-members.html index 2a338d61c..951f3b139 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplies__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplies__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__multiplies__t.html b/html/reference/structboost_1_1gil_1_1channel__multiplies__t.html index ccbc19e4a..aab94a412 100644 --- a/html/reference/structboost_1_1gil_1_1channel__multiplies__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__multiplies__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t-members.html index f253f5bda..e69921838 100644 --- a/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t.html b/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t.html index 5b76dac2c..b725afae8 100644 --- a/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__plus__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__plus__t-members.html b/html/reference/structboost_1_1gil_1_1channel__plus__t-members.html index ebb67f163..1a92852fd 100644 --- a/html/reference/structboost_1_1gil_1_1channel__plus__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__plus__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__plus__t.html b/html/reference/structboost_1_1gil_1_1channel__plus__t.html index e3bc5257d..2c49ab18c 100644 --- a/html/reference/structboost_1_1gil_1_1channel__plus__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__plus__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__type.html b/html/reference/structboost_1_1gil_1_1channel__type.html index e2ffc5a24..272fbe79e 100644 --- a/html/reference/structboost_1_1gil_1_1channel__type.html +++ b/html/reference/structboost_1_1gil_1_1channel__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4-members.html b/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4-members.html index 7fd1576ce..1e75fc6aa 100644 --- a/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html index 3fd344db7..f66889ee6 100644 --- a/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1channel__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__zeros__t-members.html b/html/reference/structboost_1_1gil_1_1channel__zeros__t-members.html index d1f57ecfb..2d74fea3d 100644 --- a/html/reference/structboost_1_1gil_1_1channel__zeros__t-members.html +++ b/html/reference/structboost_1_1gil_1_1channel__zeros__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channel__zeros__t.html b/html/reference/structboost_1_1gil_1_1channel__zeros__t.html index 89441c1b5..35346f01e 100644 --- a/html/reference/structboost_1_1gil_1_1channel__zeros__t.html +++ b/html/reference/structboost_1_1gil_1_1channel__zeros__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1channels__are__compatible.html b/html/reference/structboost_1_1gil_1_1channels__are__compatible.html index 29f1848af..3ff2d2678 100644 --- a/html/reference/structboost_1_1gil_1_1channels__are__compatible.html +++ b/html/reference/structboost_1_1gil_1_1channels__are__compatible.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type-members.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type-members.html index fbd8bcc2f..62078c431 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type-members.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type.html index 5c319b888..cf47f9127 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_007c517a1792029d793aefced61b1af954.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_007c517a1792029d793aefced61b1af954.html index 7837a7150..90cd67b0c 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_007c517a1792029d793aefced61b1af954.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_007c517a1792029d793aefced61b1af954.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_00_01_c_c_01_4.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_00_01_c_c_01_4.html index dafb9bcd6..d93cbb35a 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_00_01_c_c_01_4.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_00_01_c_c_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4-members.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4-members.html index 447549771..7da85f754 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4.html b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4.html index b63b1f318..2b825e6a2 100644 --- a/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4.html +++ b/html/reference/structboost_1_1gil_1_1color__converted__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_00_01_dst_p_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__const__reference__type-members.html b/html/reference/structboost_1_1gil_1_1color__element__const__reference__type-members.html index 872845d3e..ccd4df808 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__const__reference__type-members.html +++ b/html/reference/structboost_1_1gil_1_1color__element__const__reference__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__const__reference__type.html b/html/reference/structboost_1_1gil_1_1color__element__const__reference__type.html index 257927dce..c6d4d993a 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__const__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1color__element__const__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__reference__type-members.html b/html/reference/structboost_1_1gil_1_1color__element__reference__type-members.html index e67e23225..b0babfb87 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__reference__type-members.html +++ b/html/reference/structboost_1_1gil_1_1color__element__reference__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__reference__type.html b/html/reference/structboost_1_1gil_1_1color__element__reference__type.html index aadfdb829..0c35ab72b 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1color__element__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__type-members.html b/html/reference/structboost_1_1gil_1_1color__element__type-members.html index 23e1526b8..90c68072c 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__type-members.html +++ b/html/reference/structboost_1_1gil_1_1color__element__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__element__type.html b/html/reference/structboost_1_1gil_1_1color__element__type.html index a573d0d69..d11572d4c 100644 --- a/html/reference/structboost_1_1gil_1_1color__element__type.html +++ b/html/reference/structboost_1_1gil_1_1color__element__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html index 6f1dcf2ae..21372d8e9 100644 --- a/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_4fb1a46a79bb525d815c77d4e7feb3e2.html b/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_4fb1a46a79bb525d815c77d4e7feb3e2.html index 7a5d8962a..d65455962 100644 --- a/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_4fb1a46a79bb525d815c77d4e7feb3e2.html +++ b/html/reference/structboost_1_1gil_1_1color__space__type_3_01planar__pixel__reference_3_01_channel_reference_00_4fb1a46a79bb525d815c77d4e7feb3e2.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1const__iterator__type.html b/html/reference/structboost_1_1gil_1_1const__iterator__type.html index 99517ca1a..ca9a372fa 100644 --- a/html/reference/structboost_1_1gil_1_1const__iterator__type.html +++ b/html/reference/structboost_1_1gil_1_1const__iterator__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1contains__color.html b/html/reference/structboost_1_1gil_1_1contains__color.html index 6b28aeac0..84fe4b67d 100644 --- a/html/reference/structboost_1_1gil_1_1contains__color.html +++ b/html/reference/structboost_1_1gil_1_1contains__color.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1cyan__t.html b/html/reference/structboost_1_1gil_1_1cyan__t.html index c7dd687c4..13d63f0d4 100644 --- a/html/reference/structboost_1_1gil_1_1cyan__t.html +++ b/html/reference/structboost_1_1gil_1_1cyan__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__channel__converter-members.html b/html/reference/structboost_1_1gil_1_1default__channel__converter-members.html index 1e1ad8f31..f70520c1a 100644 --- a/html/reference/structboost_1_1gil_1_1default__channel__converter-members.html +++ b/html/reference/structboost_1_1gil_1_1default__channel__converter-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,7 +50,7 @@ $(function() {

    This is the complete list of members for default_channel_converter, including all inherited members.

    - +
    operator()(const Ch1 &src, Ch2 &dst) const (defined in default_channel_converter)default_channel_converterinline
    operator()(Ch1 const &src, Ch2 &dst) const (defined in default_channel_converter)default_channel_converterinline
    diff --git a/html/reference/structboost_1_1gil_1_1default__channel__converter.html b/html/reference/structboost_1_1gil_1_1default__channel__converter.html index 2164f6c2c..e37c5bcb8 100644 --- a/html/reference/structboost_1_1gil_1_1default__channel__converter.html +++ b/html/reference/structboost_1_1gil_1_1default__channel__converter.html @@ -39,7 +39,7 @@ $(function() {
    @@ -58,10 +58,10 @@ $(function() { - - - + +

    Public Member Functions

    +
    template<typename Ch1 , typename Ch2 >
    void operator() (const Ch1 &src, Ch2 &dst) const
     
    void operator() (Ch1 const &src, Ch2 &dst) const
     

    Detailed Description

    Same as channel_converter, except it takes the destination channel by reference, which allows us to move the templates from the class level to the method level. This is important when invoking it on heterogeneous pixels.

    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter-members.html index f9403504b..6a7baf90a 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter.html b/html/reference/structboost_1_1gil_1_1default__color__converter.html index 6b2687fc8..20dc08507 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl.html index 75dec28fd..8e1df7e89 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4-members.html index 9eb278cca..4316f120c 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4.html index 67fbc0154..ddd4f6908 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c1_00_01rgba__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4-members.html index 336bb548a..04754c8dd 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4.html index dff20d212..7886b30ef 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01_c_00_01_c_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4-members.html index c0328558a..088c49dad 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4.html index cc2392340..2f372a172 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01gray__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4-members.html index 7db5c9260..e363336dd 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4.html index 602d92f1a..ec86b6f96 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01cmyk__t_00_01rgb__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4-members.html index 224ff42ef..06db1bd79 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4.html index 853b9eae6..b65692025 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01cmyk__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4-members.html index cad705b0f..ecb4377cf 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4.html index cb8d39574..ad3371ed4 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01gray__t_00_01rgb__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4-members.html index 13a0eb473..9fa8cb491 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4.html index 5d76dadc7..f2b5bdda1 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01cmyk__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4-members.html index d9b4f5ce2..4f34fe124 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4.html index 66d2e4a2f..620396927 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgb__t_00_01gray__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4-members.html index e1a2d54a3..287df82f8 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4.html index e0e3b6e47..d1f94bb81 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01_c2_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4-members.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4-members.html index 6aa785470..57c843109 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4.html b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4.html index 328eba572..7591c0bc9 100644 --- a/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4.html +++ b/html/reference/structboost_1_1gil_1_1default__color__converter__impl_3_01rgba__t_00_01rgba__t_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1deref__base-members.html b/html/reference/structboost_1_1gil_1_1deref__base-members.html index c682ce1cf..0be601c9e 100644 --- a/html/reference/structboost_1_1gil_1_1deref__base-members.html +++ b/html/reference/structboost_1_1gil_1_1deref__base-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1deref__base.html b/html/reference/structboost_1_1gil_1_1deref__base.html index 58ba97c15..625e3b3e0 100644 --- a/html/reference/structboost_1_1gil_1_1deref__base.html +++ b/html/reference/structboost_1_1gil_1_1deref__base.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept-members.html index 86a9ff29a..ac5f43409 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept.html index 8c299777e..653d609cf 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_channel_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept-members.html index d21f3a456..88c7caf56 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept.html index 32dddfd3a..53681379d 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_image_view_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept-members.html index 7f8604800..d2abe8d2b 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept.html index 3b8c0249e..62fa3670f 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_pixel_iterator_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept-members.html index 6647b453a..6688ef170 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept.html index c8eb181a5..2890ac9ce 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access2_d_image_view_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept-members.html index e5a36e3b2..7da592c74 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept.html index d684711ab..e74736ca4 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_image_view_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept-members.html index b09306a65..9f5dbe9c4 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept.html b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept.html index f019f593f..6075128e9 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1_random_access_n_d_locator_is_mutable_concept.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl-members.html index 93ef74a98..564a2b6e3 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl.html b/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl.html index 2ae2d9830..e210c4f64 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1channel__converter__unsigned__impl.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,9 +68,9 @@ using result_type = Ds - - + +

    Public Member Functions

    -DstChannelV operator() (SrcChannelV src) const
     
    +auto operator() (SrcChannelV src) const -> DstChannelV
     

    Detailed Description

    template<typename SrcChannelV, typename DstChannelV, bool SrcIsIntegral, bool DstIsIntegral>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n-members.html index be5bdca90..2642deaba 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n.html index 6265016e8..ab711e57b 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4-members.html index 8a5e0b562..1ab28d41a 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html index 94009f86b..ab76a6d57 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01_i_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4-members.html index 2f76f2b6e..ee320f34e 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4.html index bb104a9c4..37db4a56d 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01_o_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__fr9b29768443232234f95320b3f7e74729.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__fr9b29768443232234f95320b3f7e74729.html index a7c38a298..9c14dc107 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__fr9b29768443232234f95320b3f7e74729.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__fr9b29768443232234f95320b3f7e74729.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html index 217284e70..6bc63fe78 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1copier__n_3_01iterator__from__2d_3_01_i_l_01_4_00_01iterator__from__2d_3_01_o_l_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k-members.html index a732c6e9d..c7dbd63c0 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k.html b/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k.html index ce24a3492..f5188da07 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1correlator__k.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1dec-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1dec-members.html index 7fc1927da..8099005c0 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1dec-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1dec-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1dec.html b/html/reference/structboost_1_1gil_1_1detail_1_1dec.html index 31d7072f6..a4d1551c1 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1dec.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1dec.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4-members.html index e8f4c37b3..cd1dcb922 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4.html index 7ee365b3c..836a14577 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01_it_00_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_01629d3bb430b0f68b56ea86189659092c.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_01629d3bb430b0f68b56ea86189659092c.html index c502d29a8..0475da1c6 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_01629d3bb430b0f68b56ea86189659092c.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_01629d3bb430b0f68b56ea86189659092c.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_0173caba61dca2b882aec2f645342d0509.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_0173caba61dca2b882aec2f645342d0509.html index e0e81c388..34bcb262b 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_0173caba61dca2b882aec2f645342d0509.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc1_0173caba61dca2b882aec2f645342d0509.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4-members.html index ee5b5682d..355152de1 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4.html index 3775981a4..056d3f4bc 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01boost_1_1gil_1_1iterator__from__2d_3_01_loc_01_4_00_01_it_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01p070af5a6381fa1052984b9da304c2ab5.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01p070af5a6381fa1052984b9da304c2ab5.html index d3f8c82f8..e59312c80 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01p070af5a6381fa1052984b9da304c2ab5.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01p070af5a6381fa1052984b9da304c2ab5.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01pf9bfe8ab8bfc90e04b4b4cc6781043d9.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01pf9bfe8ab8bfc90e04b4b4cc6781043d9.html index 0e395a373..f9c37a4b5 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01pf9bfe8ab8bfc90e04b4b4cc6781043d9.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01pixel_3_01_t_00_01_c_s_01_4_01const_01_5_00_01pf9bfe8ab8bfc90e04b4b4cc6781043d9.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d72b7921e34c93820ef294c57244dd71.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d72b7921e34c93820ef294c57244dd71.html index 4c005311f..31838d170 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d72b7921e34c93820ef294c57244dd71.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d72b7921e34c93820ef294c57244dd71.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d7864b08625bf89623b959decef9be6b.html b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d7864b08625bf89623b959decef9be6b.html index 6335b1071..a58d34401 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d7864b08625bf89623b959decef9be6b.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1equal__n__fn_3_01planar__pixel__iterator_3_01_i_c_00_01_c_s_01_4d7864b08625bf89623b959decef9be6b.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1file__stream__device_1_1read__tag.html b/html/reference/structboost_1_1gil_1_1detail_1_1file__stream__device_1_1read__tag.html index 84268d531..6fa1eccd9 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1file__stream__device_1_1read__tag.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1file__stream__device_1_1read__tag.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1filler-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1filler-members.html index f22bd1de1..c23655d6e 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1filler-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1filler-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1filler.html b/html/reference/structboost_1_1gil_1_1detail_1_1filler.html index 2c4d5c4f0..453048493 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1filler.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1filler.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4-members.html index 0c3390c10..b3f330635 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4.html index b6bbee534..cceca7e0e 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1filler_3_011_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple-members.html index 241f28988..6104da391 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,7 +50,7 @@ $(function() {

    This is the complete list of members for hash_tuple< T >, including all inherited members.

    - +
    operator()(std::tuple< T... > const &t) const (defined in hash_tuple< T >)hash_tuple< T >inline
    operator()(std::tuple< T... > const &t) const -> std::size_t (defined in hash_tuple< T >)hash_tuple< T >inline
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple.html b/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple.html index 61e17d722..4c3164b0c 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1hash__tuple.html @@ -39,7 +39,7 @@ $(function() {
    @@ -58,9 +58,9 @@ $(function() { - - + +

    Public Member Functions

    -std::size_t operator() (std::tuple< T... > const &t) const
     
    +auto operator() (std::tuple< T... > const &t) const -> std::size_t
     

    Detailed Description

    template<typename... T>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4-members.html index 8acb1487b..02bc5773a 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4.html index 30a16c0f9..2fb0d4d7c 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_011_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4-members.html index 6b6fb4497..fead07976 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -54,7 +54,7 @@ $(function() { at(std::integral_constant< int, 0 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline at(std::integral_constant< int, 1 >) -> typename element_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline at(std::integral_constant< int, 1 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline - at_c_dynamic(std::size_t i) const (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline + at_c_dynamic(std::size_t i) const -> Element (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline deref() const (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline homogeneous_color_base() (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inline homogeneous_color_base(Element v) (defined in homogeneous_color_base< Element, Layout, 2 >)homogeneous_color_base< Element, Layout, 2 >inlineexplicit diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4.html index 722ca2e26..a8d73590c 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_012_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -103,9 +103,9 @@ auto at (std::integral auto at (std::integral_constant< int, 1 >) const -> typename element_const_reference_type< homogeneous_color_base >::type   - -Element at_c_dynamic (std::size_t i) const -  + +auto at_c_dynamic (std::size_t i) const -> Element + 

    Detailed Description

    template<typename Element, typename Layout>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4-members.html index c2cfeb596..b5ce48749 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -56,7 +56,7 @@ $(function() { at(std::integral_constant< int, 1 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline at(std::integral_constant< int, 2 >) -> typename element_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline at(std::integral_constant< int, 2 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline - at_c_dynamic(std::size_t i) const (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline + at_c_dynamic(std::size_t i) const -> Element (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline deref() const (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline homogeneous_color_base() (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inline homogeneous_color_base(Element v) (defined in homogeneous_color_base< Element, Layout, 3 >)homogeneous_color_base< Element, Layout, 3 >inlineexplicit diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4.html index b817eb272..32e330341 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_013_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -109,9 +109,9 @@ auto at (std::integral auto at (std::integral_constant< int, 2 >) const -> typename element_const_reference_type< homogeneous_color_base >::type   - -Element at_c_dynamic (std::size_t i) const -  + +auto at_c_dynamic (std::size_t i) const -> Element + 

    Detailed Description

    template<typename Element, typename Layout>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4-members.html index 128f783f4..cc5a43ae3 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -58,7 +58,7 @@ $(function() { at(std::integral_constant< int, 2 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline at(std::integral_constant< int, 3 >) -> typename element_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline at(std::integral_constant< int, 3 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline - at_c_dynamic(std::size_t i) const (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline + at_c_dynamic(std::size_t i) const -> Element (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline deref() const (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline homogeneous_color_base() (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inline homogeneous_color_base(Element v) (defined in homogeneous_color_base< Element, Layout, 4 >)homogeneous_color_base< Element, Layout, 4 >inlineexplicit diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4.html index 745f0886c..38f6d3f71 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_014_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -115,9 +115,9 @@ auto at (std::integral auto at (std::integral_constant< int, 3 >) const -> typename element_const_reference_type< homogeneous_color_base >::type   - -Element at_c_dynamic (std::size_t i) const -  + +auto at_c_dynamic (std::size_t i) const -> Element + 

    Detailed Description

    template<typename Element, typename Layout>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4-members.html index 2720b95d9..967bb79a6 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    @@ -60,7 +60,7 @@ $(function() { at(std::integral_constant< int, 3 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline at(std::integral_constant< int, 4 >) -> typename element_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline at(std::integral_constant< int, 4 >) const -> typename element_const_reference_type< homogeneous_color_base >::type (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline - at_c_dynamic(std::size_t i) const (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline + at_c_dynamic(std::size_t i) const -> Element (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline deref() const (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline homogeneous_color_base() (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inline homogeneous_color_base(Element v) (defined in homogeneous_color_base< Element, Layout, 5 >)homogeneous_color_base< Element, Layout, 5 >inlineexplicit diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4.html b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4.html index 47816765d..c5d627e74 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1homogeneous__color__base_3_01_element_00_01_layout_00_015_01_4.html @@ -39,7 +39,7 @@ $(function() {
    @@ -121,9 +121,9 @@ auto at (std::integral template<typename Ref > Ref deref () const   - -Element at_c_dynamic (std::size_t i) const -  + +auto at_c_dynamic (std::size_t i) const -> Element + 

    Detailed Description

    template<typename Element, typename Layout>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1identity-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1identity-members.html index 7517086f3..fbb1fd763 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1identity-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1identity-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1identity.html b/html/reference/structboost_1_1gil_1_1detail_1_1identity.html index a371a9317..41a96b75d 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1identity.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1identity.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1inc-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1inc-members.html index cc89018cd..8932ac8b6 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1inc-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1inc-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1inc.html b/html/reference/structboost_1_1gil_1_1detail_1_1inc.html index a4845491f..3f3b7a873 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1inc.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1inc.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1is__input__device.html b/html/reference/structboost_1_1gil_1_1detail_1_1is__input__device.html index fecd6746e..b90859303 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1is__input__device.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1is__input__device.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1is__output__device.html b/html/reference/structboost_1_1gil_1_1detail_1_1is__output__device.html index 597af847d..dcd75ee27 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1is__output__device.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1is__output__device.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1is__read__device.html b/html/reference/structboost_1_1gil_1_1detail_1_1is__read__device.html index 19226c64d..8b944c6b2 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1is__read__device.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1is__read__device.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1is__read__only.html b/html/reference/structboost_1_1gil_1_1detail_1_1is__read__only.html index 591ce4911..288681889 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1is__read__only.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1is__read__only.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1is__write__device.html b/html/reference/structboost_1_1gil_1_1detail_1_1is__write__device.html index 5b388d0a1..ec71ba1a5 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1is__write__device.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1is__write__device.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn-members.html index 923133ca7..99ee1db45 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn.html b/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn.html index 1d67852ae..908960030 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1kth__channel__deref__fn.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn-members.html index c5e0ea7ae..387ecf82d 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -57,7 +57,7 @@ $(function() { is_mutable (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP >static nth_channel_deref_fn(int n=0) (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP >inline nth_channel_deref_fn(const nth_channel_deref_fn< P > &d) (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP >inline - operator()(argument_type srcP) const (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP >inline + operator()(argument_type srcP) const -> result_type (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP >inline reference typedef (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP > result_type typedef (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP > value_type typedef (defined in nth_channel_deref_fn< SrcP >)nth_channel_deref_fn< SrcP > diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn.html b/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn.html index 8213db33d..5df2582f0 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1nth__channel__deref__fn.html @@ -39,7 +39,7 @@ $(function() {
    @@ -89,9 +89,9 @@ Public Member Functions template<typename P >  nth_channel_deref_fn (const nth_channel_deref_fn< P > &d)   - -result_type operator() (argument_type srcP) const -  + +auto operator() (argument_type srcP) const -> result_type +  diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric-members.html index 8d4dbac21..5ebe3d9b5 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric.html b/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric.html index e3a9aeda9..e6ade91ce 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1plus__asymmetric.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn-members.html index 058cbd4f4..dce69f716 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,7 +50,7 @@ $(function() {

    This is the complete list of members for rgb_to_luminance_fn< RedChannel, GreenChannel, BlueChannel, GrayChannelValue >, including all inherited members.

    Public Attributes

    - +
    operator()(const RedChannel &red, const GreenChannel &green, const BlueChannel &blue) const (defined in rgb_to_luminance_fn< RedChannel, GreenChannel, BlueChannel, GrayChannelValue >)rgb_to_luminance_fn< RedChannel, GreenChannel, BlueChannel, GrayChannelValue >inline
    operator()(const RedChannel &red, const GreenChannel &green, const BlueChannel &blue) const -> GrayChannelValue (defined in rgb_to_luminance_fn< RedChannel, GreenChannel, BlueChannel, GrayChannelValue >)rgb_to_luminance_fn< RedChannel, GreenChannel, BlueChannel, GrayChannelValue >inline
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn.html b/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn.html index 576632722..2a786568f 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1rgb__to__luminance__fn.html @@ -39,7 +39,7 @@ $(function() {
    @@ -58,9 +58,9 @@ $(function() { - - + +

    Public Member Functions

    -GrayChannelValue operator() (const RedChannel &red, const GreenChannel &green, const BlueChannel &blue) const
     
    +auto operator() (const RedChannel &red, const GreenChannel &green, const BlueChannel &blue) const -> GrayChannelValue
     

    Detailed Description

    template<typename RedChannel, typename GreenChannel, typename BlueChannel, typename GrayChannelValue>
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t-members.html index 331b1c9dd..456d48824 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t.html b/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t.html index 43b46c2f2..5a701d441 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1std__fill__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit-members.html b/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit-members.html index c2518c7d0..29b2f4a02 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit-members.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit.html b/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit.html index d8eb34598..085b11bdf 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1tuple__limit.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1detail_1_1type__to__index.html b/html/reference/structboost_1_1gil_1_1detail_1_1type__to__index.html index 86e56a19b..ab3fb0111 100644 --- a/html/reference/structboost_1_1gil_1_1detail_1_1type__to__index.html +++ b/html/reference/structboost_1_1gil_1_1detail_1_1type__to__index.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1devicen__color__t.html b/html/reference/structboost_1_1gil_1_1devicen__color__t.html index 3ebeee0de..943abbe84 100644 --- a/html/reference/structboost_1_1gil_1_1devicen__color__t.html +++ b/html/reference/structboost_1_1gil_1_1devicen__color__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1devicen__layout__t-members.html b/html/reference/structboost_1_1gil_1_1devicen__layout__t-members.html index 8beed2367..84d1ef80a 100644 --- a/html/reference/structboost_1_1gil_1_1devicen__layout__t-members.html +++ b/html/reference/structboost_1_1gil_1_1devicen__layout__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1devicen__layout__t.html b/html/reference/structboost_1_1gil_1_1devicen__layout__t.html index fc2b953d1..018c1b972 100644 --- a/html/reference/structboost_1_1gil_1_1devicen__layout__t.html +++ b/html/reference/structboost_1_1gil_1_1devicen__layout__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1devicen__t-members.html b/html/reference/structboost_1_1gil_1_1devicen__t-members.html index b691d1df0..6549c3753 100644 --- a/html/reference/structboost_1_1gil_1_1devicen__t-members.html +++ b/html/reference/structboost_1_1gil_1_1devicen__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1devicen__t.html b/html/reference/structboost_1_1gil_1_1devicen__t.html index 148bba8cb..2dbcdfde7 100644 --- a/html/reference/structboost_1_1gil_1_1devicen__t.html +++ b/html/reference/structboost_1_1gil_1_1devicen__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type.html b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type.html index deaa22b1a..d83f2bb78 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4-members.html b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4-members.html index 1901532c9..dd085aa84 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4.html b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4.html index 7a774f5fb..2821f6860 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01_pixel_01_5_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4-members.html b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4-members.html index 1868d1ca7..454b7ebe0 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4.html b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4.html index 26a70d92f..c0e88120f 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__x__step__type_3_01const_01_pixel_01_5_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__xy__step__transposed__type.html b/html/reference/structboost_1_1gil_1_1dynamic__xy__step__transposed__type.html index 453ab63dd..cb9df1395 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__xy__step__transposed__type.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__xy__step__transposed__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__xy__step__type.html b/html/reference/structboost_1_1gil_1_1dynamic__xy__step__type.html index 3583e07e7..c76bd4b88 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__xy__step__type.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__xy__step__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1dynamic__y__step__type.html b/html/reference/structboost_1_1gil_1_1dynamic__y__step__type.html index e8a0aeabb..d8f4ec3e7 100644 --- a/html/reference/structboost_1_1gil_1_1dynamic__y__step__type.html +++ b/html/reference/structboost_1_1gil_1_1dynamic__y__step__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1element__const__reference__type.html b/html/reference/structboost_1_1gil_1_1element__const__reference__type.html index 028270c06..dd3fd402d 100644 --- a/html/reference/structboost_1_1gil_1_1element__const__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1element__const__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1element__reference__type.html b/html/reference/structboost_1_1gil_1_1element__reference__type.html index b8e769e2d..442e256ce 100644 --- a/html/reference/structboost_1_1gil_1_1element__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1element__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1element__type.html b/html/reference/structboost_1_1gil_1_1element__type.html index 41a45ae7b..96e0264b9 100644 --- a/html/reference/structboost_1_1gil_1_1element__type.html +++ b/html/reference/structboost_1_1gil_1_1element__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__dynamic__image__reader.html b/html/reference/structboost_1_1gil_1_1get__dynamic__image__reader.html index 19a851f9d..74fbda382 100644 --- a/html/reference/structboost_1_1gil_1_1get__dynamic__image__reader.html +++ b/html/reference/structboost_1_1gil_1_1get__dynamic__image__reader.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__dynamic__image__writer.html b/html/reference/structboost_1_1gil_1_1get__dynamic__image__writer.html index 9a793a9a1..b783976b5 100644 --- a/html/reference/structboost_1_1gil_1_1get__dynamic__image__writer.html +++ b/html/reference/structboost_1_1gil_1_1get__dynamic__image__writer.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__reader.html b/html/reference/structboost_1_1gil_1_1get__reader.html index ec67933ec..37cf8248b 100644 --- a/html/reference/structboost_1_1gil_1_1get__reader.html +++ b/html/reference/structboost_1_1gil_1_1get__reader.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__reader__backend.html b/html/reference/structboost_1_1gil_1_1get__reader__backend.html index 9cfd32cfa..2c66b05bc 100644 --- a/html/reference/structboost_1_1gil_1_1get__reader__backend.html +++ b/html/reference/structboost_1_1gil_1_1get__reader__backend.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__scanline__reader-members.html b/html/reference/structboost_1_1gil_1_1get__scanline__reader-members.html index bd8c11e28..6703d64c3 100644 --- a/html/reference/structboost_1_1gil_1_1get__scanline__reader-members.html +++ b/html/reference/structboost_1_1gil_1_1get__scanline__reader-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__scanline__reader.html b/html/reference/structboost_1_1gil_1_1get__scanline__reader.html index 2c46aab03..c262c9e60 100644 --- a/html/reference/structboost_1_1gil_1_1get__scanline__reader.html +++ b/html/reference/structboost_1_1gil_1_1get__scanline__reader.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1get__writer.html b/html/reference/structboost_1_1gil_1_1get__writer.html index b2b9a9225..c5d2550bf 100644 --- a/html/reference/structboost_1_1gil_1_1get__writer.html +++ b/html/reference/structboost_1_1gil_1_1get__writer.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1gray__color__t.html b/html/reference/structboost_1_1gil_1_1gray__color__t.html index a2833df87..e2e7e4be0 100644 --- a/html/reference/structboost_1_1gil_1_1gray__color__t.html +++ b/html/reference/structboost_1_1gil_1_1gray__color__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1green__t.html b/html/reference/structboost_1_1gil_1_1green__t.html index 66326b822..1bf63e109 100644 --- a/html/reference/structboost_1_1gil_1_1green__t.html +++ b/html/reference/structboost_1_1gil_1_1green__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1image__is__basic.html b/html/reference/structboost_1_1gil_1_1image__is__basic.html index a5e2418f6..145adfce2 100644 --- a/html/reference/structboost_1_1gil_1_1image__is__basic.html +++ b/html/reference/structboost_1_1gil_1_1image__is__basic.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1image__type-members.html b/html/reference/structboost_1_1gil_1_1image__type-members.html index 19f278c80..d9a9e632e 100644 --- a/html/reference/structboost_1_1gil_1_1image__type-members.html +++ b/html/reference/structboost_1_1gil_1_1image__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1image__type.html b/html/reference/structboost_1_1gil_1_1image__type.html index 3e44b141e..d8d9f5f53 100644 --- a/html/reference/structboost_1_1gil_1_1image__type.html +++ b/html/reference/structboost_1_1gil_1_1image__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1is__iterator__adaptor.html b/html/reference/structboost_1_1gil_1_1is__iterator__adaptor.html index 71dc1e48e..e9dd3cdb9 100644 --- a/html/reference/structboost_1_1gil_1_1is__iterator__adaptor.html +++ b/html/reference/structboost_1_1gil_1_1is__iterator__adaptor.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1is__pixel_3_01bit__aligned__pixel__reference_3_01_b_00_01_c_00_01_l_00_01_m_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1is__pixel_3_01bit__aligned__pixel__reference_3_01_b_00_01_c_00_01_l_00_01_m_01_4_01_4.html index 8f758dd0e..78e572ad0 100644 --- a/html/reference/structboost_1_1gil_1_1is__pixel_3_01bit__aligned__pixel__reference_3_01_b_00_01_c_00_01_l_00_01_m_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1is__pixel_3_01bit__aligned__pixel__reference_3_01_b_00_01_c_00_01_l_00_01_m_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1is__pixel_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1is__pixel_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html index cc5b92c8a..300689a4a 100644 --- a/html/reference/structboost_1_1gil_1_1is__pixel_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1is__pixel_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1is__planar_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1is__planar_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html index 421ae6879..6a608cd35 100644 --- a/html/reference/structboost_1_1gil_1_1is__planar_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1is__planar_3_01planar__pixel__reference_3_01_channel_reference_00_01_color_space_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1is__read__supported.html b/html/reference/structboost_1_1gil_1_1is__read__supported.html index df804e6e7..ae26fe419 100644 --- a/html/reference/structboost_1_1gil_1_1is__read__supported.html +++ b/html/reference/structboost_1_1gil_1_1is__read__supported.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__adaptor__get__base.html b/html/reference/structboost_1_1gil_1_1iterator__adaptor__get__base.html index 0e41acdfa..fcfbfa38b 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__adaptor__get__base.html +++ b/html/reference/structboost_1_1gil_1_1iterator__adaptor__get__base.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__adaptor__rebind.html b/html/reference/structboost_1_1gil_1_1iterator__adaptor__rebind.html index 79effd523..aae847001 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__adaptor__rebind.html +++ b/html/reference/structboost_1_1gil_1_1iterator__adaptor__rebind.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__add__deref-members.html b/html/reference/structboost_1_1gil_1_1iterator__add__deref-members.html index 77118ac5f..c86cbe6f9 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__add__deref-members.html +++ b/html/reference/structboost_1_1gil_1_1iterator__add__deref-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__add__deref.html b/html/reference/structboost_1_1gil_1_1iterator__add__deref.html index d137c4e9b..2491ff361 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__add__deref.html +++ b/html/reference/structboost_1_1gil_1_1iterator__add__deref.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_0927b7f3fa453e9b4decea8a0c8e52f27.html b/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_0927b7f3fa453e9b4decea8a0c8e52f27.html index dd06d1871..132f89168 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_0927b7f3fa453e9b4decea8a0c8e52f27.html +++ b/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_0927b7f3fa453e9b4decea8a0c8e52f27.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_099dd338dfbc32474aacfee6846d34880.html b/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_099dd338dfbc32474aacfee6846d34880.html index 80be0b978..8ab8eb934 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_099dd338dfbc32474aacfee6846d34880.html +++ b/html/reference/structboost_1_1gil_1_1iterator__add__deref_3_01dereference__iterator__adaptor_3_01_iterator_00_099dd338dfbc32474aacfee6846d34880.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic.html index 32fac8615..2af9fd12a 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4_01_4.html index bbf6ffbaf..eda4cf59c 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_49e6005b45e6301328ca4342b3cea079.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_49e6005b45e6301328ca4342b3cea079.html index 0fd064ac3..d67c3b803 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_49e6005b45e6301328ca4342b3cea079.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01pixel_3_01_t_00_49e6005b45e6301328ca4342b3cea079.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i11756f255913088facaf56838bba8ad0.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i11756f255913088facaf56838bba8ad0.html index 505416aaa..47c1e9260 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i11756f255913088facaf56838bba8ad0.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i11756f255913088facaf56838bba8ad0.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i1e167244adb96adf7850fda415bdbfe9.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i1e167244adb96adf7850fda415bdbfe9.html index 50dc05032..ac45b78af 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i1e167244adb96adf7850fda415bdbfe9.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01memory__based__step__iterator_3_01planar__pixel__i1e167244adb96adf7850fda415bdbfe9.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4.html index 36f9f1c8c..49ebb3cee 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01_5_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01const_01_5_01_4.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01const_01_5_01_4.html index 895041fc1..8543437b6 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01const_01_5_01_4.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01pixel_3_01_t_00_01_l_01_4_01const_01_5_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01_5_00_01_c_s_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01_5_00_01_c_s_01_4_01_4.html index bb2809ada..89dd59c11 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01_5_00_01_c_s_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01_5_00_01_c_s_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01const_01_5_00_01_c_s_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01const_01_5_00_01_c_s_01_4_01_4.html index ee22b3d71..723a02e4f 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01const_01_5_00_01_c_s_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__basic_3_01planar__pixel__iterator_3_01_t_01const_01_5_00_01_c_s_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__mutable.html b/html/reference/structboost_1_1gil_1_1iterator__is__mutable.html index 80281aead..c069f3874 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__mutable.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__mutable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__is__step.html b/html/reference/structboost_1_1gil_1_1iterator__is__step.html index a9e5015be..d2952371b 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__is__step.html +++ b/html/reference/structboost_1_1gil_1_1iterator__is__step.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__type.html b/html/reference/structboost_1_1gil_1_1iterator__type.html index 7fe69cfe9..bf7cfc39c 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__type.html +++ b/html/reference/structboost_1_1gil_1_1iterator__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1iterator__type__from__pixel.html b/html/reference/structboost_1_1gil_1_1iterator__type__from__pixel.html index eb4b5b8a5..d65bf13f3 100644 --- a/html/reference/structboost_1_1gil_1_1iterator__type__from__pixel.html +++ b/html/reference/structboost_1_1gil_1_1iterator__type__from__pixel.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1kth__channel__view__type-members.html b/html/reference/structboost_1_1gil_1_1kth__channel__view__type-members.html index dd30cc98a..48794bbdf 100644 --- a/html/reference/structboost_1_1gil_1_1kth__channel__view__type-members.html +++ b/html/reference/structboost_1_1gil_1_1kth__channel__view__type-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,7 +50,7 @@ $(function() {

    This is the complete list of members for kth_channel_view_type< K, View >, including all inherited members.

    - +
    make(const View &src) (defined in kth_channel_view_type< K, View >)kth_channel_view_type< K, View >inlinestatic
    make(View const &src) (defined in kth_channel_view_type< K, View >)kth_channel_view_type< K, View >inlinestatic
    type typedef (defined in kth_channel_view_type< K, View >)kth_channel_view_type< K, View >
    diff --git a/html/reference/structboost_1_1gil_1_1kth__channel__view__type.html b/html/reference/structboost_1_1gil_1_1kth__channel__view__type.html index 7b8841956..770f01d7e 100644 --- a/html/reference/structboost_1_1gil_1_1kth__channel__view__type.html +++ b/html/reference/structboost_1_1gil_1_1kth__channel__view__type.html @@ -39,7 +39,7 @@ $(function() {
    @@ -65,9 +65,9 @@ using type = typename - - + +

    Static Public Member Functions

    -static type make (const View &src)
     
    +static type make (View const &src)
     

    Detailed Description

    template<int K, typename View>
    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type-members.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type-members.html index a73d882fb..d6d1ccc00 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type-members.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type.html index 1b11f5a03..962eb62a8 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__const__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type-members.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type-members.html index 59fcc8a94..042c623f3 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type-members.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type.html index 75d5b479f..1eaafc0c0 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__type-members.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__type-members.html index 1dc5ee53d..2653496df 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__type-members.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1kth__semantic__element__type.html b/html/reference/structboost_1_1gil_1_1kth__semantic__element__type.html index c480c0bb4..4a8c8acdf 100644 --- a/html/reference/structboost_1_1gil_1_1kth__semantic__element__type.html +++ b/html/reference/structboost_1_1gil_1_1kth__semantic__element__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1layout-members.html b/html/reference/structboost_1_1gil_1_1layout-members.html index c675debb3..5bc3366aa 100644 --- a/html/reference/structboost_1_1gil_1_1layout-members.html +++ b/html/reference/structboost_1_1gil_1_1layout-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1layout.html b/html/reference/structboost_1_1gil_1_1layout.html index 657294ef6..cf6672fc9 100644 --- a/html/reference/structboost_1_1gil_1_1layout.html +++ b/html/reference/structboost_1_1gil_1_1layout.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__is__basic.html b/html/reference/structboost_1_1gil_1_1locator__is__basic.html index 3a080722f..5bc7b47e2 100644 --- a/html/reference/structboost_1_1gil_1_1locator__is__basic.html +++ b/html/reference/structboost_1_1gil_1_1locator__is__basic.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__is__mutable.html b/html/reference/structboost_1_1gil_1_1locator__is__mutable.html index c9c7b184b..fc75edf6e 100644 --- a/html/reference/structboost_1_1gil_1_1locator__is__mutable.html +++ b/html/reference/structboost_1_1gil_1_1locator__is__mutable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__is__step__in__x.html b/html/reference/structboost_1_1gil_1_1locator__is__step__in__x.html index 0587d276f..8524d8827 100644 --- a/html/reference/structboost_1_1gil_1_1locator__is__step__in__x.html +++ b/html/reference/structboost_1_1gil_1_1locator__is__step__in__x.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__is__step__in__y.html b/html/reference/structboost_1_1gil_1_1locator__is__step__in__y.html index f25971870..3762c660d 100644 --- a/html/reference/structboost_1_1gil_1_1locator__is__step__in__y.html +++ b/html/reference/structboost_1_1gil_1_1locator__is__step__in__y.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__type-members.html b/html/reference/structboost_1_1gil_1_1locator__type-members.html index 29078edfd..796576d1d 100644 --- a/html/reference/structboost_1_1gil_1_1locator__type-members.html +++ b/html/reference/structboost_1_1gil_1_1locator__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1locator__type.html b/html/reference/structboost_1_1gil_1_1locator__type.html index 55a6e38d7..13d48ee2a 100644 --- a/html/reference/structboost_1_1gil_1_1locator__type.html +++ b/html/reference/structboost_1_1gil_1_1locator__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1magenta__t.html b/html/reference/structboost_1_1gil_1_1magenta__t.html index ab588a01c..32e7a6821 100644 --- a/html/reference/structboost_1_1gil_1_1magenta__t.html +++ b/html/reference/structboost_1_1gil_1_1magenta__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1memunit__step__fn-members.html b/html/reference/structboost_1_1gil_1_1memunit__step__fn-members.html index 5a5e6770f..7e212e2ba 100644 --- a/html/reference/structboost_1_1gil_1_1memunit__step__fn-members.html +++ b/html/reference/structboost_1_1gil_1_1memunit__step__fn-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,11 +51,11 @@ $(function() {

    This is the complete list of members for memunit_step_fn< Iterator >, including all inherited members.

    - + - +
    advance(Iterator &it, difference_type d) const (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    difference(const Iterator &it1, const Iterator &it2) const (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    difference(Iterator const &it1, Iterator const &it2) const -> difference_type (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    difference_type typedef (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >
    memunit_step_fn(difference_type step=memunit_step(Iterator())) (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    set_step(std::ptrdiff_t step) (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    step() const (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    step() const -> difference_type (defined in memunit_step_fn< Iterator >)memunit_step_fn< Iterator >inline
    diff --git a/html/reference/structboost_1_1gil_1_1memunit__step__fn.html b/html/reference/structboost_1_1gil_1_1memunit__step__fn.html index 41ea1c8c9..404946231 100644 --- a/html/reference/structboost_1_1gil_1_1memunit__step__fn.html +++ b/html/reference/structboost_1_1gil_1_1memunit__step__fn.html @@ -39,7 +39,7 @@ $(function() {
    @@ -68,15 +68,15 @@ Public Member Functions  memunit_step_fn (difference_type step=memunit_step(Iterator()))   - -difference_type difference (const Iterator &it1, const Iterator &it2) const -  + +auto difference (Iterator const &it1, Iterator const &it2) const -> difference_type +  void advance (Iterator &it, difference_type d) const   - -difference_type step () const -  + +auto step () const -> difference_type +  void set_step (std::ptrdiff_t step)   diff --git a/html/reference/structboost_1_1gil_1_1nth__channel__view__type-members.html b/html/reference/structboost_1_1gil_1_1nth__channel__view__type-members.html index f8fb71af8..9982a9d3a 100644 --- a/html/reference/structboost_1_1gil_1_1nth__channel__view__type-members.html +++ b/html/reference/structboost_1_1gil_1_1nth__channel__view__type-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -50,7 +50,7 @@ $(function() {

    This is the complete list of members for nth_channel_view_type< View >, including all inherited members.

    - +
    make(const View &src, int n) (defined in nth_channel_view_type< View >)nth_channel_view_type< View >inlinestatic
    make(View const &src, int n) (defined in nth_channel_view_type< View >)nth_channel_view_type< View >inlinestatic
    type typedef (defined in nth_channel_view_type< View >)nth_channel_view_type< View >
    diff --git a/html/reference/structboost_1_1gil_1_1nth__channel__view__type.html b/html/reference/structboost_1_1gil_1_1nth__channel__view__type.html index bc186baf5..5c3743afc 100644 --- a/html/reference/structboost_1_1gil_1_1nth__channel__view__type.html +++ b/html/reference/structboost_1_1gil_1_1nth__channel__view__type.html @@ -39,7 +39,7 @@ $(function() {
    @@ -65,9 +65,9 @@ using type = typename - - + +

    Static Public Member Functions

    -static type make (const View &src, int n)
     
    +static type make (View const &src, int n)
     

    Detailed Description

    template<typename View>
    diff --git a/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4-members.html b/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4-members.html index b78eb3f69..9b2119eda 100644 --- a/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4-members.html +++ b/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4-members.html @@ -39,7 +39,7 @@ $(function() {

    diff --git a/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4.html b/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4.html index eaf446716..813761e92 100644 --- a/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4.html +++ b/html/reference/structboost_1_1gil_1_1nth__channel__view__type_3_01any__image__view_3_01_views_8_8_8_01_4_01_4.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1num__channels.html b/html/reference/structboost_1_1gil_1_1num__channels.html index 925d56e65..9028733a6 100644 --- a/html/reference/structboost_1_1gil_1_1num__channels.html +++ b/html/reference/structboost_1_1gil_1_1num__channels.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image1__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image1__type-members.html index b99cf8ffb..bdb016bb2 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image1__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image1__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image1__type.html b/html/reference/structboost_1_1gil_1_1packed__image1__type.html index c79d1abd3..7565339b9 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image1__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image1__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image2__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image2__type-members.html index e93491ffd..65202e1b9 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image2__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image2__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image2__type.html b/html/reference/structboost_1_1gil_1_1packed__image2__type.html index 04252d190..a9872c2ca 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image2__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image2__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image3__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image3__type-members.html index efb652b05..4ee8d1d0b 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image3__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image3__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image3__type.html b/html/reference/structboost_1_1gil_1_1packed__image3__type.html index 489a797de..72dcd275e 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image3__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image3__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image4__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image4__type-members.html index 10c63ffba..303b6218b 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image4__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image4__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image4__type.html b/html/reference/structboost_1_1gil_1_1packed__image4__type.html index eaf8790de..0f809bb33 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image4__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image4__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image5__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image5__type-members.html index cd9bb7c43..418f9dfc0 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image5__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image5__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image5__type.html b/html/reference/structboost_1_1gil_1_1packed__image5__type.html index ad2a55790..90890d481 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image5__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image5__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image__type-members.html b/html/reference/structboost_1_1gil_1_1packed__image__type-members.html index 198d8dbf4..ca4660de9 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__image__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__image__type.html b/html/reference/structboost_1_1gil_1_1packed__image__type.html index 74dcbb6a0..51f6dfe9e 100644 --- a/html/reference/structboost_1_1gil_1_1packed__image__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__image__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__pixel-members.html b/html/reference/structboost_1_1gil_1_1packed__pixel-members.html index 37c973a2f..f26a89ef8 100644 --- a/html/reference/structboost_1_1gil_1_1packed__pixel-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__pixel-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__pixel.html b/html/reference/structboost_1_1gil_1_1packed__pixel.html index 4e3f33532..470896d75 100644 --- a/html/reference/structboost_1_1gil_1_1packed__pixel.html +++ b/html/reference/structboost_1_1gil_1_1packed__pixel.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__pixel__type-members.html b/html/reference/structboost_1_1gil_1_1packed__pixel__type-members.html index f27cdb151..ca61dbc4f 100644 --- a/html/reference/structboost_1_1gil_1_1packed__pixel__type-members.html +++ b/html/reference/structboost_1_1gil_1_1packed__pixel__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1packed__pixel__type.html b/html/reference/structboost_1_1gil_1_1packed__pixel__type.html index 30afa233e..934a60590 100644 --- a/html/reference/structboost_1_1gil_1_1packed__pixel__type.html +++ b/html/reference/structboost_1_1gil_1_1packed__pixel__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel-members.html b/html/reference/structboost_1_1gil_1_1pixel-members.html index 551d7b7b2..c4ec44715 100644 --- a/html/reference/structboost_1_1gil_1_1pixel-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel.html b/html/reference/structboost_1_1gil_1_1pixel.html index 47491636c..ebd6cb476 100644 --- a/html/reference/structboost_1_1gil_1_1pixel.html +++ b/html/reference/structboost_1_1gil_1_1pixel.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__assigns__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__assigns__t-members.html index 45e8837ca..8cda09a06 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__assigns__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__assigns__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__assigns__t.html b/html/reference/structboost_1_1gil_1_1pixel__assigns__t.html index a53a5ffd5..4e364c1c4 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__assigns__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__assigns__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t-members.html index 7e3b477b3..8ca85121b 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t.html b/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t.html index 19ed2ed80..ab8641000 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__divides__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__divides__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__divides__t-members.html index 8d19141bb..93051d699 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__divides__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__divides__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__divides__t.html b/html/reference/structboost_1_1gil_1_1pixel__divides__t.html index c906fac13..20cd0a317 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__divides__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__divides__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__halves__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__halves__t-members.html index 0af81c0fb..269c8d2bc 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__halves__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__halves__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__halves__t.html b/html/reference/structboost_1_1gil_1_1pixel__halves__t.html index 528eb9a00..40e1ae66a 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__halves__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__halves__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__is__reference.html b/html/reference/structboost_1_1gil_1_1pixel__is__reference.html index 4bf412bb8..e0a4dfed7 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__is__reference.html +++ b/html/reference/structboost_1_1gil_1_1pixel__is__reference.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__minus__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__minus__t-members.html index ae95bb74b..794abb1e2 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__minus__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__minus__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__minus__t.html b/html/reference/structboost_1_1gil_1_1pixel__minus__t.html index f6ace1c85..8f1d064cc 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__minus__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__minus__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t-members.html index 8725ba97f..025828720 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t.html b/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t.html index 3137af1e1..dc19d9f7b 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__multiplies__scalar__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__multiplies__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__multiplies__t-members.html index 573d874f5..6da224e60 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__multiplies__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__multiplies__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__multiplies__t.html b/html/reference/structboost_1_1gil_1_1pixel__multiplies__t.html index ec4acd0e8..b9fc88aa8 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__multiplies__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__multiplies__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__plus__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__plus__t-members.html index 286a3f9f6..cf766b132 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__plus__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__plus__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__plus__t.html b/html/reference/structboost_1_1gil_1_1pixel__plus__t.html index 26dc3c74c..d3da653aa 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__plus__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__plus__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__proxy.html b/html/reference/structboost_1_1gil_1_1pixel__proxy.html index 662521bbd..a6fc2e733 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__proxy.html +++ b/html/reference/structboost_1_1gil_1_1pixel__proxy.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__reference__is__basic.html b/html/reference/structboost_1_1gil_1_1pixel__reference__is__basic.html index 9c1c9452a..52c526d8e 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__reference__is__basic.html +++ b/html/reference/structboost_1_1gil_1_1pixel__reference__is__basic.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__reference__is__mutable.html b/html/reference/structboost_1_1gil_1_1pixel__reference__is__mutable.html index 0037bcbbf..077b1ef04 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__reference__is__mutable.html +++ b/html/reference/structboost_1_1gil_1_1pixel__reference__is__mutable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__reference__is__proxy.html b/html/reference/structboost_1_1gil_1_1pixel__reference__is__proxy.html index a30c73ca4..d2578002a 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__reference__is__proxy.html +++ b/html/reference/structboost_1_1gil_1_1pixel__reference__is__proxy.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__reference__type.html b/html/reference/structboost_1_1gil_1_1pixel__reference__type.html index a5baee1d9..3cebf71e7 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__reference__type.html +++ b/html/reference/structboost_1_1gil_1_1pixel__reference__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__value__type-members.html b/html/reference/structboost_1_1gil_1_1pixel__value__type-members.html index 2a71502b0..60e308188 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__value__type-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__value__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__value__type.html b/html/reference/structboost_1_1gil_1_1pixel__value__type.html index 57a90f0d8..79397ad4d 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__value__type.html +++ b/html/reference/structboost_1_1gil_1_1pixel__value__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__zeros__t-members.html b/html/reference/structboost_1_1gil_1_1pixel__zeros__t-members.html index 694a53ef0..e5643811a 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__zeros__t-members.html +++ b/html/reference/structboost_1_1gil_1_1pixel__zeros__t-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixel__zeros__t.html b/html/reference/structboost_1_1gil_1_1pixel__zeros__t.html index 81f3823df..cc2eda458 100644 --- a/html/reference/structboost_1_1gil_1_1pixel__zeros__t.html +++ b/html/reference/structboost_1_1gil_1_1pixel__zeros__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1pixels__are__compatible.html b/html/reference/structboost_1_1gil_1_1pixels__are__compatible.html index 95b013fe6..910fcdcfc 100644 --- a/html/reference/structboost_1_1gil_1_1pixels__are__compatible.html +++ b/html/reference/structboost_1_1gil_1_1pixels__are__compatible.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1planar__pixel__iterator-members.html b/html/reference/structboost_1_1gil_1_1planar__pixel__iterator-members.html index 046679028..c7df6d89f 100644 --- a/html/reference/structboost_1_1gil_1_1planar__pixel__iterator-members.html +++ b/html/reference/structboost_1_1gil_1_1planar__pixel__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1planar__pixel__iterator.html b/html/reference/structboost_1_1gil_1_1planar__pixel__iterator.html index dc4cf3f84..ecd20fb13 100644 --- a/html/reference/structboost_1_1gil_1_1planar__pixel__iterator.html +++ b/html/reference/structboost_1_1gil_1_1planar__pixel__iterator.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1planar__pixel__reference-members.html b/html/reference/structboost_1_1gil_1_1planar__pixel__reference-members.html index 768fc2710..481e38d0c 100644 --- a/html/reference/structboost_1_1gil_1_1planar__pixel__reference-members.html +++ b/html/reference/structboost_1_1gil_1_1planar__pixel__reference-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1planar__pixel__reference.html b/html/reference/structboost_1_1gil_1_1planar__pixel__reference.html index 4b019650e..bf84ca732 100644 --- a/html/reference/structboost_1_1gil_1_1planar__pixel__reference.html +++ b/html/reference/structboost_1_1gil_1_1planar__pixel__reference.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1position__iterator-members.html b/html/reference/structboost_1_1gil_1_1position__iterator-members.html index 356a1519e..0c75ea6c2 100644 --- a/html/reference/structboost_1_1gil_1_1position__iterator-members.html +++ b/html/reference/structboost_1_1gil_1_1position__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    @@ -51,21 +51,21 @@ $(function() {

    This is the complete list of members for position_iterator< Deref, Dim >, including all inherited members.

    - + - - + + - + - - - + + + - +
    boost::iterator_core_access (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >friend
    deref_fn() const (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    deref_fn() const -> Deref const & (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    difference_type typedef (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >
    operator=(const position_iterator &p) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    operator[](difference_type d) constposition_iterator< Deref, Dim >inline
    operator=(position_iterator const &p) -> position_iterator & (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    operator[](difference_type d) const -> referenceposition_iterator< Deref, Dim >inline
    parent_t typedef (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >
    point_t typedef (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >
    pos() const (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    pos() const -> point_t const & (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >friend
    position_iterator() (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(const point_t &p, const point_t &step, const Deref &d) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(const position_iterator &p) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(const position_iterator< D, Dim > &p) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(point_t const &p, point_t const &step, Deref const &d) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(position_iterator const &p) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    position_iterator(position_iterator< D, Dim > const &p) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    reference typedef (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >
    set_step(difference_type s) (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    step() const (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    step() const -> point_t const & (defined in position_iterator< Deref, Dim >)position_iterator< Deref, Dim >inline
    diff --git a/html/reference/structboost_1_1gil_1_1position__iterator.html b/html/reference/structboost_1_1gil_1_1position__iterator.html index 1d217c5a1..0f594f547 100644 --- a/html/reference/structboost_1_1gil_1_1position__iterator.html +++ b/html/reference/structboost_1_1gil_1_1position__iterator.html @@ -39,7 +39,7 @@ $(function() {
    @@ -77,33 +77,33 @@ using point_t = typena - - - - - + + + + - - - - - - - - - - + + + + + + + + + + - - + +

    Public Member Functions

    position_iterator (const point_t &p, const point_t &step, const Deref &d)
     
    position_iterator (const position_iterator &p)
     
    +
    position_iterator (point_t const &p, point_t const &step, Deref const &d)
     
    position_iterator (position_iterator const &p)
     
    template<typename D >
     position_iterator (const position_iterator< D, Dim > &p)
     
    -position_iteratoroperator= (const position_iterator &p)
     
    -const point_t & pos () const
     
    -const point_t & step () const
     
    -const Deref & deref_fn () const
     
     position_iterator (position_iterator< D, Dim > const &p)
     
    +auto operator= (position_iterator const &p) -> position_iterator &
     
    +auto pos () const -> point_t const &
     
    +auto step () const -> point_t const &
     
    +auto deref_fn () const -> Deref const &
     
    void set_step (difference_type s)
     
    reference operator[] (difference_type d) const
     
    auto operator[] (difference_type d) const -> reference
     
    @@ -124,8 +124,8 @@ struct boost::gil::position_iterator< Deref, Dim >

    Member Function Documentation

    - -

    ◆ operator[]()

    + +

    ◆ operator[]()

    @@ -134,11 +134,12 @@ struct boost::gil::position_iterator< Deref, Dim >
    diff --git a/html/reference/structboost_1_1gil_1_1reader__base-members.html b/html/reference/structboost_1_1gil_1_1reader__base-members.html index 90c96e136..6b7dbb580 100644 --- a/html/reference/structboost_1_1gil_1_1reader__base-members.html +++ b/html/reference/structboost_1_1gil_1_1reader__base-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1reader__base.html b/html/reference/structboost_1_1gil_1_1reader__base.html index eda010538..6789a9a05 100644 --- a/html/reference/structboost_1_1gil_1_1reader__base.html +++ b/html/reference/structboost_1_1gil_1_1reader__base.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1red__t.html b/html/reference/structboost_1_1gil_1_1red__t.html index c63db2855..e600bfdde 100644 --- a/html/reference/structboost_1_1gil_1_1red__t.html +++ b/html/reference/structboost_1_1gil_1_1red__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1size.html b/html/reference/structboost_1_1gil_1_1size.html index a3396c6d6..840e006ff 100644 --- a/html/reference/structboost_1_1gil_1_1size.html +++ b/html/reference/structboost_1_1gil_1_1size.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1transposed__type-members.html b/html/reference/structboost_1_1gil_1_1transposed__type-members.html index 34ff16153..f56dd70e9 100644 --- a/html/reference/structboost_1_1gil_1_1transposed__type-members.html +++ b/html/reference/structboost_1_1gil_1_1transposed__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1transposed__type.html b/html/reference/structboost_1_1gil_1_1transposed__type.html index 80f089776..ae2ccd4e1 100644 --- a/html/reference/structboost_1_1gil_1_1transposed__type.html +++ b/html/reference/structboost_1_1gil_1_1transposed__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1type__from__x__iterator-members.html b/html/reference/structboost_1_1gil_1_1type__from__x__iterator-members.html index 801e3a3f5..8d79e33cf 100644 --- a/html/reference/structboost_1_1gil_1_1type__from__x__iterator-members.html +++ b/html/reference/structboost_1_1gil_1_1type__from__x__iterator-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1type__from__x__iterator.html b/html/reference/structboost_1_1gil_1_1type__from__x__iterator.html index dd044fa35..9366f4d4b 100644 --- a/html/reference/structboost_1_1gil_1_1type__from__x__iterator.html +++ b/html/reference/structboost_1_1gil_1_1type__from__x__iterator.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__is__basic.html b/html/reference/structboost_1_1gil_1_1view__is__basic.html index 0691c74f4..6928368d9 100644 --- a/html/reference/structboost_1_1gil_1_1view__is__basic.html +++ b/html/reference/structboost_1_1gil_1_1view__is__basic.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__is__mutable.html b/html/reference/structboost_1_1gil_1_1view__is__mutable.html index 2cbcc86db..c950a8e70 100644 --- a/html/reference/structboost_1_1gil_1_1view__is__mutable.html +++ b/html/reference/structboost_1_1gil_1_1view__is__mutable.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__is__step__in__x.html b/html/reference/structboost_1_1gil_1_1view__is__step__in__x.html index 323eca29f..272484a30 100644 --- a/html/reference/structboost_1_1gil_1_1view__is__step__in__x.html +++ b/html/reference/structboost_1_1gil_1_1view__is__step__in__x.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__is__step__in__y.html b/html/reference/structboost_1_1gil_1_1view__is__step__in__y.html index cc7e5f410..5b6a61ca1 100644 --- a/html/reference/structboost_1_1gil_1_1view__is__step__in__y.html +++ b/html/reference/structboost_1_1gil_1_1view__is__step__in__y.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__type-members.html b/html/reference/structboost_1_1gil_1_1view__type-members.html index 7b2b89f54..aa9091109 100644 --- a/html/reference/structboost_1_1gil_1_1view__type-members.html +++ b/html/reference/structboost_1_1gil_1_1view__type-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__type.html b/html/reference/structboost_1_1gil_1_1view__type.html index 5cd727000..129ab4350 100644 --- a/html/reference/structboost_1_1gil_1_1view__type.html +++ b/html/reference/structboost_1_1gil_1_1view__type.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__type__from__pixel-members.html b/html/reference/structboost_1_1gil_1_1view__type__from__pixel-members.html index 5df16cb06..372c8173a 100644 --- a/html/reference/structboost_1_1gil_1_1view__type__from__pixel-members.html +++ b/html/reference/structboost_1_1gil_1_1view__type__from__pixel-members.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1view__type__from__pixel.html b/html/reference/structboost_1_1gil_1_1view__type__from__pixel.html index 45e3f9e25..b745c37b6 100644 --- a/html/reference/structboost_1_1gil_1_1view__type__from__pixel.html +++ b/html/reference/structboost_1_1gil_1_1view__type__from__pixel.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1views__are__compatible.html b/html/reference/structboost_1_1gil_1_1views__are__compatible.html index e31bb878b..247b3e0f3 100644 --- a/html/reference/structboost_1_1gil_1_1views__are__compatible.html +++ b/html/reference/structboost_1_1gil_1_1views__are__compatible.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/structboost_1_1gil_1_1yellow__t.html b/html/reference/structboost_1_1gil_1_1yellow__t.html index da37545be..2c7f82b99 100644 --- a/html/reference/structboost_1_1gil_1_1yellow__t.html +++ b/html/reference/structboost_1_1gil_1_1yellow__t.html @@ -39,7 +39,7 @@ $(function() {
    diff --git a/html/reference/threshold_8hpp_source.html b/html/reference/threshold_8hpp_source.html index 24c896cd8..3b07a1414 100644 --- a/html/reference/threshold_8hpp_source.html +++ b/html/reference/threshold_8hpp_source.html @@ -73,7 +73,7 @@ $(function() {
    24 #include <boost/gil/image_processing/convolve.hpp>
    25 #include <boost/gil/image_processing/numeric.hpp>
    26 
    -
    27 namespace boost { namespace gil {
    +
    27 namespace boost { namespace gil {
    28 
    29 namespace detail {
    30 
    @@ -347,7 +347,7 @@ $(function() {
    340  for (std::size_t i = 0; i < src_view.num_channels(); i++)
    341  {
    342  detail::otsu_impl
    -
    343  (nth_channel_view(src_view, i), nth_channel_view(dst_view, i), direction);
    +
    343  (nth_channel_view(src_view, i), nth_channel_view(dst_view, i), direction);
    344  }
    345  }
    346 }
    @@ -413,7 +413,7 @@ $(function() {
    406  typedef typename channel_type<DstView>::type result_channel_t;
    407 
    408  image<typename SrcView::value_type> temp_img(src_view.width(), src_view.height());
    -
    409  typename image<typename SrcView::value_type>::view_t temp_view = view(temp_img);
    +
    409  typename image<typename SrcView::value_type>::view_t temp_view = view(temp_img);
    410  SrcView temp_conv(temp_view);
    411 
    412  if (method == threshold_adaptive_method::mean)
    @@ -428,7 +428,7 @@ $(function() {
    421  }
    422  else if (method == threshold_adaptive_method::gaussian)
    423  {
    -
    424  detail::kernel_2d<float> kernel = generate_gaussian_kernel(kernel_size, 1.0);
    +
    424  detail::kernel_2d<float> kernel = generate_gaussian_kernel(kernel_size, 1.0);
    425  convolve_2d(src_view, kernel, temp_view);
    426  }
    427 
    @@ -474,16 +474,17 @@ $(function() {
    threshold_direction
    Definition: threshold.hpp:70
    void threshold_binary(SrcView const &src_view, DstView const &dst_view, typename channel_type< DstView >::type threshold_value, threshold_direction direction=threshold_direction::regular)
    Applies fixed threshold to each pixel of image view. Performs image binarization by thresholding chan...
    Definition: threshold.hpp:148
    -
    nth_channel_view_type< View >::type nth_channel_view(const View &src, int n)
    Definition: image_view_factory.hpp:418
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    @ inverse
    Consider values less than or equal to threshold value.
    threshold_optimal_value
    Method of optimal threshold value calculation.
    Definition: threshold.hpp:78
    @ regular
    Consider values greater than threshold value.
    -
    detail::kernel_2d< T, Allocator > generate_gaussian_kernel(std::size_t side_length, double sigma)
    Generate Gaussian kernel.
    Definition: numeric.hpp:130
    threshold_truncate_mode
    TODO.
    Definition: threshold.hpp:85
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    nth_channel_view_type< View >::type nth_channel_view(View const &src, int n)
    Definition: image_view_factory.hpp:448
    Definition: color_convert.hpp:31
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    +
    auto generate_gaussian_kernel(std::size_t side_length, double sigma) -> detail::kernel_2d< T, Allocator >
    Generate Gaussian kernel.
    Definition: numeric.hpp:132
    diff --git a/html/reference/todo.html b/html/reference/todo.html index f5f6a32cf..21dec2b49 100644 --- a/html/reference/todo.html +++ b/html/reference/todo.html @@ -60,7 +60,7 @@ $(function() {
    TODO: Is Locator allowed or practical to occur?
    Class file_stream_device< FormatTag >
    switch to a sane interface as soon as there is something good in boost. I.E. the IOChains library would fit very well here.
    -
    Member file_stream_device< FormatTag >::read (byte_t *data, std::size_t count)
    +
    Member file_stream_device< FormatTag >::read (byte_t *data, std::size_t count) -> std::size_t

    : change byte_t* to void*

    : add compiler symbol to turn error checking on and off.

    diff --git a/html/reference/typedefs_8hpp_source.html b/html/reference/typedefs_8hpp_source.html index a622801c6..94a46d872 100644 --- a/html/reference/typedefs_8hpp_source.html +++ b/html/reference/typedefs_8hpp_source.html @@ -67,203 +67,233 @@ $(function() {
    18 
    19 #include <cstdint>
    20 #include <memory>
    -
    21 
    -
    22 // B - bits size/signedness, CM - channel model, CS - colour space, LAYOUT - pixel layout
    -
    23 // Example: B = '8', CM = 'uint8_t', CS = 'bgr, LAYOUT='bgr_layout_t'
    -
    24 #define BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    -
    25  template <typename, typename> struct pixel; \
    -
    26  template <typename, typename> struct planar_pixel_reference; \
    -
    27  template <typename, typename> struct planar_pixel_iterator; \
    -
    28  template <typename> class memory_based_step_iterator; \
    -
    29  template <typename> class point; \
    -
    30  template <typename> class memory_based_2d_locator; \
    -
    31  template <typename> class image_view; \
    -
    32  template <typename, bool, typename> class image; \
    -
    33  using CS##B##_pixel_t = pixel<CM, LAYOUT>; \
    -
    34  using CS##B##c_pixel_t = pixel<CM, LAYOUT> const; \
    -
    35  using CS##B##_ref_t = pixel<CM, LAYOUT>&; \
    -
    36  using CS##B##c_ref_t = pixel<CM, LAYOUT> const&; \
    -
    37  using CS##B##_ptr_t = CS##B##_pixel_t*; \
    -
    38  using CS##B##c_ptr_t = CS##B##c_pixel_t*; \
    -
    39  using CS##B##_step_ptr_t = memory_based_step_iterator<CS##B##_ptr_t>; \
    -
    40  using CS##B##c_step_ptr_t = memory_based_step_iterator<CS##B##c_ptr_t>; \
    -
    41  using CS##B##_loc_t \
    -
    42  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_ptr_t>>; \
    -
    43  using CS##B##c_loc_t \
    -
    44  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_ptr_t>>; \
    -
    45  using CS##B##_step_loc_t \
    -
    46  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_step_ptr_t>>; \
    -
    47  using CS##B##c_step_loc_t \
    -
    48  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_step_ptr_t>>; \
    -
    49  using CS##B##_view_t = image_view<CS##B##_loc_t>; \
    -
    50  using CS##B##c_view_t = image_view<CS##B##c_loc_t>; \
    -
    51  using CS##B##_step_view_t = image_view<CS##B##_step_loc_t>; \
    -
    52  using CS##B##c_step_view_t = image_view<CS##B##c_step_loc_t>; \
    -
    53  using CS##B##_image_t = image<CS##B##_pixel_t, false, std::allocator<unsigned char>>;
    -
    54 
    -
    55 // Example: B = '8', CM = 'uint8_t', CS = 'bgr' CS_FULL = 'rgb_t' LAYOUT='bgr_layout_t'
    -
    56 #define BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(B, CM, CS, CS_FULL, LAYOUT) \
    -
    57  BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    -
    58  using CS##B##_planar_ref_t = planar_pixel_reference<CM&, CS_FULL>; \
    -
    59  using CS##B##c_planar_ref_t = planar_pixel_reference<CM const&, CS_FULL>; \
    -
    60  using CS##B##_planar_ptr_t = planar_pixel_iterator<CM*, CS_FULL>; \
    -
    61  using CS##B##c_planar_ptr_t = planar_pixel_iterator<CM const*, CS_FULL>; \
    -
    62  using CS##B##_planar_step_ptr_t = memory_based_step_iterator<CS##B##_planar_ptr_t>; \
    -
    63  using CS##B##c_planar_step_ptr_t \
    -
    64  = memory_based_step_iterator<CS##B##c_planar_ptr_t>; \
    -
    65  using CS##B##_planar_loc_t \
    -
    66  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_planar_ptr_t>>; \
    -
    67  using CS##B##c_planar_loc_t \
    -
    68  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_planar_ptr_t>>; \
    -
    69  using CS##B##_planar_step_loc_t \
    -
    70  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_planar_step_ptr_t>>; \
    -
    71  using CS##B##c_planar_step_loc_t \
    -
    72  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_planar_step_ptr_t>>; \
    -
    73  using CS##B##_planar_view_t = image_view<CS##B##_planar_loc_t>; \
    -
    74  using CS##B##c_planar_view_t = image_view<CS##B##c_planar_loc_t>; \
    -
    75  using CS##B##_planar_step_view_t = image_view<CS##B##_planar_step_loc_t>; \
    -
    76  using CS##B##c_planar_step_view_t = image_view<CS##B##c_planar_step_loc_t>; \
    -
    77  using CS##B##_planar_image_t \
    -
    78  = image<CS##B##_pixel_t, true, std::allocator<unsigned char>>;
    -
    79 
    -
    80 #define BOOST_GIL_DEFINE_BASE_TYPEDEFS(B, CM, CS) \
    -
    81  BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, CS##_layout_t)
    -
    82 
    -
    83 #define BOOST_GIL_DEFINE_ALL_TYPEDEFS(B, CM, CS) \
    -
    84  BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(B, CM, CS, CS##_t, CS##_layout_t)
    -
    85 
    -
    86 
    -
    87 namespace boost { namespace gil {
    -
    88 
    -
    89 // forward declarations
    -
    90 template <typename B, typename Mn, typename Mx> struct scoped_channel_value;
    -
    91 template <typename T> struct float_point_zero;
    -
    92 template <typename T> struct float_point_one;
    -
    93 
    -
    97 
    -
    100 using std::uint8_t;
    -
    101 
    -
    104 using std::uint16_t;
    -
    105 
    -
    108 using std::uint32_t;
    -
    109 
    -
    112 using std::int8_t;
    -
    113 
    -
    116 using std::int16_t;
    +
    21 #if !defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    +
    22 # include <memory_resource>
    +
    23 #endif
    +
    24 
    +
    25 // B - bits size/signedness, CM - channel model, CS - colour space, LAYOUT - pixel layout
    +
    26 // Example: B = '8', CM = 'uint8_t', CS = 'bgr, LAYOUT='bgr_layout_t'
    +
    27 #define BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    +
    28  template <typename, typename> \
    +
    29  struct pixel; \
    +
    30  template <typename, typename> \
    +
    31  struct planar_pixel_reference; \
    +
    32  template <typename, typename> \
    +
    33  struct planar_pixel_iterator; \
    +
    34  template <typename> \
    +
    35  class memory_based_step_iterator; \
    +
    36  template <typename> \
    +
    37  class point; \
    +
    38  template <typename> \
    +
    39  class memory_based_2d_locator; \
    +
    40  template <typename> \
    +
    41  class image_view; \
    +
    42  template <typename, bool, typename> \
    +
    43  class image; \
    +
    44  using CS##B##_pixel_t = pixel<CM, LAYOUT>; \
    +
    45  using CS##B##c_pixel_t = pixel<CM, LAYOUT> const; \
    +
    46  using CS##B##_ref_t = pixel<CM, LAYOUT>&; \
    +
    47  using CS##B##c_ref_t = pixel<CM, LAYOUT> const&; \
    +
    48  using CS##B##_ptr_t = CS##B##_pixel_t*; \
    +
    49  using CS##B##c_ptr_t = CS##B##c_pixel_t*; \
    +
    50  using CS##B##_step_ptr_t = memory_based_step_iterator<CS##B##_ptr_t>; \
    +
    51  using CS##B##c_step_ptr_t = memory_based_step_iterator<CS##B##c_ptr_t>; \
    +
    52  using CS##B##_loc_t = memory_based_2d_locator<memory_based_step_iterator<CS##B##_ptr_t>>; \
    +
    53  using CS##B##c_loc_t = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_ptr_t>>; \
    +
    54  using CS##B##_step_loc_t \
    +
    55  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_step_ptr_t>>; \
    +
    56  using CS##B##c_step_loc_t \
    +
    57  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_step_ptr_t>>; \
    +
    58  using CS##B##_view_t = image_view<CS##B##_loc_t>; \
    +
    59  using CS##B##c_view_t = image_view<CS##B##c_loc_t>; \
    +
    60  using CS##B##_step_view_t = image_view<CS##B##_step_loc_t>; \
    +
    61  using CS##B##c_step_view_t = image_view<CS##B##c_step_loc_t>; \
    +
    62  using CS##B##_image_t = image<CS##B##_pixel_t, false, std::allocator<unsigned char>>;
    +
    63 
    +
    64 #define BOOST_GIL_DEFINE_BASE_PMR_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    +
    65  namespace pmr { \
    +
    66  using CS##B##_image_t \
    +
    67  = image<CS##B##_pixel_t, false, std::pmr::polymorphic_allocator<unsigned char>>; \
    +
    68  }
    +
    69 
    +
    70 // Example: B = '8', CM = 'uint8_t', CS = 'bgr' CS_FULL = 'rgb_t' LAYOUT='bgr_layout_t'
    +
    71 #define BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(B, CM, CS, CS_FULL, LAYOUT) \
    +
    72  BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    +
    73  using CS##B##_planar_ref_t = planar_pixel_reference<CM&, CS_FULL>; \
    +
    74  using CS##B##c_planar_ref_t = planar_pixel_reference<CM const&, CS_FULL>; \
    +
    75  using CS##B##_planar_ptr_t = planar_pixel_iterator<CM*, CS_FULL>; \
    +
    76  using CS##B##c_planar_ptr_t = planar_pixel_iterator<CM const*, CS_FULL>; \
    +
    77  using CS##B##_planar_step_ptr_t = memory_based_step_iterator<CS##B##_planar_ptr_t>; \
    +
    78  using CS##B##c_planar_step_ptr_t = memory_based_step_iterator<CS##B##c_planar_ptr_t>; \
    +
    79  using CS##B##_planar_loc_t \
    +
    80  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_planar_ptr_t>>; \
    +
    81  using CS##B##c_planar_loc_t \
    +
    82  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_planar_ptr_t>>; \
    +
    83  using CS##B##_planar_step_loc_t \
    +
    84  = memory_based_2d_locator<memory_based_step_iterator<CS##B##_planar_step_ptr_t>>; \
    +
    85  using CS##B##c_planar_step_loc_t \
    +
    86  = memory_based_2d_locator<memory_based_step_iterator<CS##B##c_planar_step_ptr_t>>; \
    +
    87  using CS##B##_planar_view_t = image_view<CS##B##_planar_loc_t>; \
    +
    88  using CS##B##c_planar_view_t = image_view<CS##B##c_planar_loc_t>; \
    +
    89  using CS##B##_planar_step_view_t = image_view<CS##B##_planar_step_loc_t>; \
    +
    90  using CS##B##c_planar_step_view_t = image_view<CS##B##c_planar_step_loc_t>; \
    +
    91  using CS##B##_planar_image_t = image<CS##B##_pixel_t, true, std::allocator<unsigned char>>;
    +
    92 
    +
    93 #define BOOST_GIL_DEFINE_ALL_PMR_TYPEDEFS_INTERNAL(B, CM, CS, CS_FULL, LAYOUT) \
    +
    94  BOOST_GIL_DEFINE_BASE_PMR_TYPEDEFS_INTERNAL(B, CM, CS, LAYOUT) \
    +
    95  namespace pmr { \
    +
    96  using CS##B##_planar_image_t \
    +
    97  = image<CS##B##_pixel_t, true, std::pmr::polymorphic_allocator<unsigned char>>; \
    +
    98  }
    +
    99 
    +
    100 #if defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    +
    101 # define BOOST_GIL_DEFINE_BASE_TYPEDEFS(B, CM, CS) \
    +
    102  BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, CS##_layout_t)
    +
    103 
    +
    104 # define BOOST_GIL_DEFINE_ALL_TYPEDEFS(B, CM, CS) \
    +
    105  BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(B, CM, CS, CS##_t, CS##_layout_t)
    +
    106 #else
    +
    107 # define BOOST_GIL_DEFINE_BASE_TYPEDEFS(B, CM, CS) \
    +
    108  BOOST_GIL_DEFINE_BASE_TYPEDEFS_INTERNAL(B, CM, CS, CS##_layout_t) \
    +
    109  BOOST_GIL_DEFINE_BASE_PMR_TYPEDEFS_INTERNAL(B, CM, CS, CS##_layout_t)
    +
    110 
    +
    111 # define BOOST_GIL_DEFINE_ALL_TYPEDEFS(B, CM, CS) \
    +
    112  BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(B, CM, CS, CS##_t, CS##_layout_t) \
    +
    113  BOOST_GIL_DEFINE_ALL_PMR_TYPEDEFS_INTERNAL(B, CM, CS, CS##_t, CS##_layout_t)
    +
    114 #endif
    +
    115 
    +
    116 namespace boost { namespace gil {
    117 
    -
    120 using std::int32_t;
    -
    121 
    -
    124 using float32_t = scoped_channel_value<float, float_point_zero<float>, float_point_one<float>>;
    -
    125 
    -
    128 using float64_t = scoped_channel_value<double, float_point_zero<double>, float_point_one<double>>;
    -
    129 
    -
    130 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, gray)
    -
    131 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, gray)
    -
    132 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, gray)
    -
    133 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, gray)
    -
    134 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, gray)
    -
    135 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, gray)
    -
    136 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, gray)
    -
    137 
    -
    138 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, bgr)
    -
    139 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, bgr)
    -
    140 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, bgr)
    -
    141 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, bgr)
    -
    142 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, bgr)
    -
    143 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, bgr)
    -
    144 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, bgr)
    -
    145 
    -
    146 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, argb)
    -
    147 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, argb)
    -
    148 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, argb)
    -
    149 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, argb)
    -
    150 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, argb)
    -
    151 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, argb)
    -
    152 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, argb)
    -
    153 
    -
    154 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, abgr)
    -
    155 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, abgr)
    -
    156 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, abgr)
    -
    157 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, abgr)
    -
    158 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, abgr)
    -
    159 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, abgr)
    -
    160 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, abgr)
    -
    161 
    -
    162 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, bgra)
    -
    163 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, bgra)
    -
    164 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, bgra)
    -
    165 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, bgra)
    -
    166 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, bgra)
    -
    167 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, bgra)
    -
    168 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, bgra)
    -
    169 
    -
    170 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, rgb)
    -
    171 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, rgb)
    -
    172 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, rgb)
    -
    173 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, rgb)
    -
    174 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, rgb)
    -
    175 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, rgb)
    -
    176 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, rgb)
    -
    177 
    -
    178 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, rgba)
    -
    179 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, rgba)
    -
    180 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, rgba)
    -
    181 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, rgba)
    -
    182 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, rgba)
    -
    183 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, rgba)
    -
    184 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, rgba)
    -
    185 
    -
    186 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, cmyk)
    -
    187 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, cmyk)
    -
    188 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, cmyk)
    -
    189 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, cmyk)
    -
    190 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, cmyk)
    -
    191 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, cmyk)
    -
    192 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, cmyk)
    -
    193 
    -
    194 template <int N> struct devicen_t;
    -
    195 template <int N> struct devicen_layout_t;
    -
    196 
    -
    197 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    198 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    199 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    200 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    201 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    202 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    203 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    -
    204 
    -
    205 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    206 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    207 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    208 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    209 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    210 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    211 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    -
    212 
    -
    213 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    214 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    215 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    216 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    217 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    218 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    219 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    -
    220 
    -
    221 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    222 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    223 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    224 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    225 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    226 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    227 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    -
    228 
    -
    229 }} // namespace boost::gil
    -
    230 
    -
    231 #endif
    +
    118 // forward declarations
    +
    119 template <typename B, typename Mn, typename Mx> struct scoped_channel_value;
    +
    120 template <typename T> struct float_point_zero;
    +
    121 template <typename T> struct float_point_one;
    +
    122 
    +
    126 
    +
    129 using std::uint8_t;
    +
    130 
    +
    133 using std::uint16_t;
    +
    134 
    +
    137 using std::uint32_t;
    +
    138 
    +
    141 using std::int8_t;
    +
    142 
    +
    145 using std::int16_t;
    +
    146 
    +
    149 using std::int32_t;
    +
    150 
    +
    153 using float32_t = scoped_channel_value<float, float_point_zero<float>, float_point_one<float>>;
    +
    154 
    +
    157 using float64_t = scoped_channel_value<double, float_point_zero<double>, float_point_one<double>>;
    +
    158 
    +
    159 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, gray)
    +
    160 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, gray)
    +
    161 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, gray)
    +
    162 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, gray)
    +
    163 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, gray)
    +
    164 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, gray)
    +
    165 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, gray)
    +
    166 
    +
    167 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, bgr)
    +
    168 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, bgr)
    +
    169 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, bgr)
    +
    170 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, bgr)
    +
    171 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, bgr)
    +
    172 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, bgr)
    +
    173 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, bgr)
    +
    174 
    +
    175 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, argb)
    +
    176 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, argb)
    +
    177 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, argb)
    +
    178 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, argb)
    +
    179 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, argb)
    +
    180 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, argb)
    +
    181 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, argb)
    +
    182 
    +
    183 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, abgr)
    +
    184 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, abgr)
    +
    185 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, abgr)
    +
    186 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, abgr)
    +
    187 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, abgr)
    +
    188 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, abgr)
    +
    189 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, abgr)
    +
    190 
    +
    191 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, bgra)
    +
    192 BOOST_GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, bgra)
    +
    193 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, bgra)
    +
    194 BOOST_GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, bgra)
    +
    195 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, bgra)
    +
    196 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, bgra)
    +
    197 BOOST_GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, bgra)
    +
    198 
    +
    199 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, rgb)
    +
    200 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, rgb)
    +
    201 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, rgb)
    +
    202 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, rgb)
    +
    203 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, rgb)
    +
    204 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, rgb)
    +
    205 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, rgb)
    +
    206 
    +
    207 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, rgba)
    +
    208 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, rgba)
    +
    209 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, rgba)
    +
    210 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, rgba)
    +
    211 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, rgba)
    +
    212 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, rgba)
    +
    213 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, rgba)
    +
    214 
    +
    215 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, cmyk)
    +
    216 BOOST_GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, cmyk)
    +
    217 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, cmyk)
    +
    218 BOOST_GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, cmyk)
    +
    219 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, cmyk)
    +
    220 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, cmyk)
    +
    221 BOOST_GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, cmyk)
    +
    222 
    +
    223 template <int N> struct devicen_t;
    +
    224 template <int N> struct devicen_layout_t;
    +
    225 
    +
    226 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    227 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    228 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    229 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    230 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    231 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    232 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev2n, devicen_t<2>, devicen_layout_t<2>)
    +
    233 
    +
    234 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    235 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    236 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    237 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    238 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    239 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    240 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev3n, devicen_t<3>, devicen_layout_t<3>)
    +
    241 
    +
    242 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    243 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    244 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    245 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    246 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    247 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    248 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev4n, devicen_t<4>, devicen_layout_t<4>)
    +
    249 
    +
    250 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8, uint8_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    251 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, int8_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    252 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16, uint16_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    253 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, int16_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    254 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32, uint32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    255 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, int32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    256 BOOST_GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, float32_t, dev5n, devicen_t<5>, devicen_layout_t<5>)
    +
    257 
    +
    258 }} // namespace boost::gil
    +
    259 
    +
    260 #endif
    -
    scoped_channel_value< double, float_point_zero< double >, float_point_one< double > > float64_t
    64-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:128
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    scoped_channel_value< double, float_point_zero< double >, float_point_one< double > > float64_t
    64-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:157
    Unnamed color space of 1, 2, 3, 4, or 5 channels.
    Definition: device_n.hpp:33
    unnamed color layout of up to five channels
    Definition: device_n.hpp:56
    -
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:124
    +
    scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
    32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept
    Definition: typedefs.hpp:153
    diff --git a/html/reference/utilities_8hpp_source.html b/html/reference/utilities_8hpp_source.html index 3eb8f982e..9e0387c1b 100644 --- a/html/reference/utilities_8hpp_source.html +++ b/html/reference/utilities_8hpp_source.html @@ -90,36 +90,36 @@ $(function() {
    41 #include <utility>
    42 #include <type_traits>
    43 
    -
    44 namespace boost { namespace gil {
    +
    44 namespace boost { namespace gil {
    45 
    48 
    52 
    -
    53 inline std::ptrdiff_t iround(float x)
    +
    53 inline std::ptrdiff_t iround(float x)
    54 {
    55  return static_cast<std::ptrdiff_t>(x + (x < 0.0f ? -0.5f : 0.5f));
    56 }
    57 
    -
    58 inline std::ptrdiff_t iround(double x)
    +
    58 inline std::ptrdiff_t iround(double x)
    59 {
    60  return static_cast<std::ptrdiff_t>(x + (x < 0.0 ? -0.5 : 0.5));
    61 }
    62 
    -
    63 inline std::ptrdiff_t ifloor(float x)
    +
    63 inline std::ptrdiff_t ifloor(float x)
    64 {
    65  return static_cast<std::ptrdiff_t>(std::floor(x));
    66 }
    67 
    -
    68 inline std::ptrdiff_t ifloor(double x)
    +
    68 inline std::ptrdiff_t ifloor(double x)
    69 {
    70  return static_cast<std::ptrdiff_t>(std::floor(x));
    71 }
    72 
    -
    73 inline std::ptrdiff_t iceil(float x)
    +
    73 inline std::ptrdiff_t iceil(float x)
    74 {
    75  return static_cast<std::ptrdiff_t>(std::ceil(x));
    76 }
    77 
    -
    78 inline std::ptrdiff_t iceil(double x)
    +
    78 inline std::ptrdiff_t iceil(double x)
    79 {
    80  return static_cast<std::ptrdiff_t>(std::ceil(x));
    81 }
    @@ -187,150 +187,152 @@ $(function() {
    152 // reinterpret_cast is implementation-defined. Static cast is not.
    153 template <typename OutPtr, typename In>
    154 BOOST_FORCEINLINE
    -
    155 OutPtr gil_reinterpret_cast(In* p)
    +
    155 auto gil_reinterpret_cast(In* p) -> OutPtr
    156 {
    157  return static_cast<OutPtr>(static_cast<void*>(p));
    158 }
    159 
    -
    160 template <typename OutPtr, typename In> BOOST_FORCEINLINE
    -
    161 const OutPtr gil_reinterpret_cast_c(const In* p)
    -
    162 {
    -
    163  return static_cast<const OutPtr>(static_cast<const void*>(p));
    -
    164 }
    -
    165 
    -
    166 namespace detail {
    -
    167 
    -
    171 
    -
    172 template <class InputIter, class Size, class OutputIter>
    -
    173 std::pair<InputIter, OutputIter> _copy_n(InputIter first, Size count,
    -
    174  OutputIter result, std::input_iterator_tag)
    -
    175 {
    -
    176  for ( ; count > 0; --count)
    -
    177  {
    -
    178  *result = *first;
    -
    179  ++first;
    -
    180  ++result;
    -
    181  }
    -
    182  return std::pair<InputIter, OutputIter>(first, result);
    -
    183 }
    -
    184 
    -
    185 template <class RAIter, class Size, class OutputIter>
    -
    186 inline std::pair<RAIter, OutputIter>
    -
    187 _copy_n(RAIter first, Size count, OutputIter result, std::random_access_iterator_tag)
    -
    188 {
    -
    189  RAIter last = first + count;
    -
    190  return std::pair<RAIter, OutputIter>(last, std::copy(first, last, result));
    -
    191 }
    -
    192 
    -
    193 template <class InputIter, class Size, class OutputIter>
    -
    194 inline std::pair<InputIter, OutputIter>
    -
    195 _copy_n(InputIter first, Size count, OutputIter result)
    -
    196 {
    -
    197  return _copy_n(first, count, result, typename std::iterator_traits<InputIter>::iterator_category());
    -
    198 }
    -
    199 
    -
    200 template <class InputIter, class Size, class OutputIter>
    -
    201 inline std::pair<InputIter, OutputIter>
    -
    202 copy_n(InputIter first, Size count, OutputIter result)
    -
    203 {
    -
    204  return detail::_copy_n(first, count, result);
    -
    205 }
    -
    206 
    -
    208 template <typename T>
    -
    209 struct identity
    -
    210 {
    -
    211  using argument_type = T;
    -
    212  using result_type = T;
    -
    213  const T& operator()(const T& val) const { return val; }
    -
    214 };
    -
    215 
    -
    217 template <typename T1, typename T2>
    - -
    219  using first_argument_type = T1;
    -
    220  using second_argument_type = T2;
    -
    221  using result_type = T1;
    -
    222  T1 operator()(T1 f1, T2 f2) const
    -
    223  {
    -
    224  return f1+f2;
    -
    225  }
    -
    226 };
    -
    227 
    -
    229 template <typename T>
    -
    230 struct inc
    -
    231 {
    -
    232  using argument_type = T;
    -
    233  using result_type = T;
    -
    234  T operator()(T x) const { return ++x; }
    -
    235 };
    -
    236 
    -
    238 template <typename T>
    -
    239 struct dec
    -
    240 {
    -
    241  using argument_type = T;
    -
    242  using result_type = T;
    -
    243  T operator()(T x) const { return --x; }
    -
    244 };
    -
    245 
    -
    247 // a given Boost.MP11-compatible list (or size if the type is not present)
    -
    248 template <typename Types, typename T>
    -
    249 struct type_to_index : mp11::mp_find<Types, T>
    -
    250 {
    -
    251  static_assert(mp11::mp_contains<Types, T>::value, "T should be element of Types");
    -
    252 };
    -
    253 
    -
    254 } // namespace detail
    -
    255 
    -
    258 template
    -
    259 <
    -
    260  typename ColorSpace,
    -
    261  typename ChannelMapping = mp11::mp_iota
    -
    262  <
    -
    263  std::integral_constant<int, mp11::mp_size<ColorSpace>::value>
    -
    264  >
    -
    265 >
    -
    266 struct layout
    -
    267 {
    -
    268  using color_space_t = ColorSpace;
    -
    269  using channel_mapping_t = ChannelMapping;
    -
    270 
    -
    271  static_assert(mp11::mp_size<ColorSpace>::value > 0,
    -
    272  "color space should not be empty sequence");
    -
    273 };
    -
    274 
    -
    277 template <typename Value, typename T1, typename T2>
    -
    278 void swap_proxy(T1& left, T2& right)
    -
    279 {
    -
    280  Value tmp = left;
    -
    281  left = right;
    -
    282  right = tmp;
    -
    283 }
    -
    284 
    -
    286 BOOST_FORCEINLINE bool little_endian()
    -
    287 {
    -
    288  short tester = 0x0001;
    -
    289  return *(char*)&tester!=0;
    -
    290 }
    -
    292 BOOST_FORCEINLINE bool big_endian()
    -
    293 {
    -
    294  return !little_endian();
    -
    295 }
    -
    296 
    -
    297 }} // namespace boost::gil
    -
    298 
    -
    299 #endif
    +
    160 template <typename OutPtr, typename In>
    +
    161 BOOST_FORCEINLINE
    +
    162 auto gil_reinterpret_cast_c(In const* p) -> OutPtr const
    +
    163 {
    +
    164  return static_cast<OutPtr const>(static_cast<void const*>(p));
    +
    165 }
    +
    166 
    +
    167 namespace detail {
    +
    168 
    +
    172 
    +
    173 template <class InputIter, class Size, class OutputIter>
    +
    174 auto _copy_n(InputIter first, Size count, OutputIter result, std::input_iterator_tag)
    +
    175  -> std::pair<InputIter, OutputIter>
    +
    176 {
    +
    177  for ( ; count > 0; --count)
    +
    178  {
    +
    179  *result = *first;
    +
    180  ++first;
    +
    181  ++result;
    +
    182  }
    +
    183  return std::pair<InputIter, OutputIter>(first, result);
    +
    184 }
    +
    185 
    +
    186 template <class RAIter, class Size, class OutputIter>
    +
    187 inline auto _copy_n(RAIter first, Size count, OutputIter result, std::random_access_iterator_tag)
    +
    188  -> std::pair<RAIter, OutputIter>
    +
    189 {
    +
    190  RAIter last = first + count;
    +
    191  return std::pair<RAIter, OutputIter>(last, std::copy(first, last, result));
    +
    192 }
    +
    193 
    +
    194 template <class InputIter, class Size, class OutputIter>
    +
    195 inline auto _copy_n(InputIter first, Size count, OutputIter result)
    +
    196  -> std::pair<InputIter, OutputIter>
    +
    197 {
    +
    198  return _copy_n(first, count, result, typename std::iterator_traits<InputIter>::iterator_category());
    +
    199 }
    +
    200 
    +
    201 template <class InputIter, class Size, class OutputIter>
    +
    202 inline auto copy_n(InputIter first, Size count, OutputIter result)
    +
    203  -> std::pair<InputIter, OutputIter>
    +
    204 {
    +
    205  return detail::_copy_n(first, count, result);
    +
    206 }
    +
    207 
    +
    209 template <typename T>
    +
    210 struct identity
    +
    211 {
    +
    212  using argument_type = T;
    +
    213  using result_type = T;
    +
    214  const T& operator()(const T& val) const { return val; }
    +
    215 };
    +
    216 
    +
    218 template <typename T1, typename T2>
    + +
    220  using first_argument_type = T1;
    +
    221  using second_argument_type = T2;
    +
    222  using result_type = T1;
    +
    223  T1 operator()(T1 f1, T2 f2) const
    +
    224  {
    +
    225  return f1+f2;
    +
    226  }
    +
    227 };
    +
    228 
    +
    230 template <typename T>
    +
    231 struct inc
    +
    232 {
    +
    233  using argument_type = T;
    +
    234  using result_type = T;
    +
    235  T operator()(T x) const { return ++x; }
    +
    236 };
    +
    237 
    +
    239 template <typename T>
    +
    240 struct dec
    +
    241 {
    +
    242  using argument_type = T;
    +
    243  using result_type = T;
    +
    244  T operator()(T x) const { return --x; }
    +
    245 };
    +
    246 
    +
    248 // a given Boost.MP11-compatible list (or size if the type is not present)
    +
    249 template <typename Types, typename T>
    +
    250 struct type_to_index : mp11::mp_find<Types, T>
    +
    251 {
    +
    252  static_assert(mp11::mp_contains<Types, T>::value, "T should be element of Types");
    +
    253 };
    +
    254 
    +
    255 } // namespace detail
    +
    256 
    +
    259 template
    +
    260 <
    +
    261  typename ColorSpace,
    +
    262  typename ChannelMapping = mp11::mp_iota
    +
    263  <
    +
    264  std::integral_constant<int, mp11::mp_size<ColorSpace>::value>
    +
    265  >
    +
    266 >
    +
    267 struct layout
    +
    268 {
    +
    269  using color_space_t = ColorSpace;
    +
    270  using channel_mapping_t = ChannelMapping;
    +
    271 
    +
    272  static_assert(mp11::mp_size<ColorSpace>::value > 0,
    +
    273  "color space should not be empty sequence");
    +
    274 };
    +
    275 
    +
    278 template <typename Value, typename T1, typename T2>
    +
    279 void swap_proxy(T1& left, T2& right)
    +
    280 {
    +
    281  Value tmp = left;
    +
    282  left = right;
    +
    283  right = tmp;
    +
    284 }
    +
    285 
    +
    287 BOOST_FORCEINLINE bool little_endian()
    +
    288 {
    +
    289  short tester = 0x0001;
    +
    290  return *(char*)&tester!=0;
    +
    291 }
    +
    293 BOOST_FORCEINLINE bool big_endian()
    +
    294 {
    +
    295  return !little_endian();
    +
    296 }
    +
    297 
    +
    298 }} // namespace boost::gil
    +
    299 
    +
    300 #endif
    -
    point< std::ptrdiff_t > ifloor(point< float > const &p)
    Definition: point.hpp:268
    BOOST_FORCEINLINE auto copy(boost::gil::pixel< T, CS > *first, boost::gil::pixel< T, CS > *last, boost::gil::pixel< T, CS > *dst) -> boost::gil::pixel< T, CS > *
    Copy when both src and dst are interleaved and of the same type can be just memmove.
    Definition: algorithm.hpp:145
    -
    plus function object whose arguments may be of different type.
    Definition: utilities.hpp:218
    -
    point< std::ptrdiff_t > iceil(point< float > const &p)
    Definition: point.hpp:280
    -
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:266
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    +
    plus function object whose arguments may be of different type.
    Definition: utilities.hpp:219
    +
    auto ifloor(point< float > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:268
    +
    Represents a color space and ordering of channels in memory.
    Definition: utilities.hpp:267
    Composes two dereference function objects. Similar to std::unary_compose but needs to pull some alias...
    Definition: utilities.hpp:121
    -
    identity taken from SGI STL.
    Definition: utilities.hpp:209
    -
    Returns the index corresponding to the first occurrance of a given given type in.
    Definition: utilities.hpp:249
    -
    point< std::ptrdiff_t > iround(point< T > const &p)
    Definition: point.hpp:249
    -
    operator– wrapped in a function object
    Definition: utilities.hpp:239
    +
    identity taken from SGI STL.
    Definition: utilities.hpp:210
    +
    Returns the index corresponding to the first occurrance of a given given type in.
    Definition: utilities.hpp:250
    +
    operator– wrapped in a function object
    Definition: utilities.hpp:240
    Helper base class for pixel dereference adaptors.
    Definition: utilities.hpp:106
    -
    operator++ wrapped in a function object
    Definition: utilities.hpp:230
    +
    auto iround(point< T > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:249
    +
    auto iceil(point< float > const &p) -> point< std::ptrdiff_t >
    Definition: point.hpp:280
    +
    operator++ wrapped in a function object
    Definition: utilities.hpp:231
    diff --git a/html/reference/virtual__locator_8hpp_source.html b/html/reference/virtual__locator_8hpp_source.html index 9126883f0..2044fe7b0 100644 --- a/html/reference/virtual__locator_8hpp_source.html +++ b/html/reference/virtual__locator_8hpp_source.html @@ -63,7 +63,7 @@ $(function() {
    14 #include <boost/assert.hpp>
    15 #include <boost/iterator/iterator_facade.hpp>
    16 
    -
    17 namespace boost { namespace gil {
    +
    17 namespace boost { namespace gil {
    18 
    31 template <typename DerefFn, bool IsTransposed>
    @@ -223,6 +223,7 @@ $(function() {
    A 2D locator over a virtual image Upon dereferencing, invokes a given function object passing it its ...
    Definition: virtual_locator.hpp:32
    An iterator that remembers its current X,Y position and invokes a function object with it upon derefe...
    Definition: position_iterator.hpp:31
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    auto y_distance_to(this_t const &it2, x_coord_t) const -> y_coord_t
    Returns the y distance between two x_iterators given the difference of their x positions.
    Definition: virtual_locator.hpp:114
    Composes two dereference function objects. Similar to std::unary_compose but needs to pull some alias...
    Definition: utilities.hpp:121
    bool is_1d_traversable(x_coord_t) const
    Definition: virtual_locator.hpp:122
    diff --git a/html/reference/write__view_8hpp_source.html b/html/reference/write__view_8hpp_source.html index 57af5ad66..2bbc56fd2 100644 --- a/html/reference/write__view_8hpp_source.html +++ b/html/reference/write__view_8hpp_source.html @@ -66,11 +66,11 @@ $(function() {
    17 
    18 #include <type_traits>
    19 
    -
    20 namespace boost{ namespace gil {
    +
    20 namespace boost{ namespace gil {
    21 
    23 template<typename Writer, typename View>
    24 inline
    -
    25 void write_view(Writer& writer, View const& view,
    +
    25 void write_view(Writer& writer, View const& view,
    26  typename std::enable_if
    27  <
    28  mp11::mp_and
    @@ -85,12 +85,12 @@ $(function() {
    37  >::value
    38  >::type* /* ptr */ = nullptr)
    39 {
    -
    40  writer.apply(view);
    +
    40  writer.apply(view);
    41 }
    42 
    44 template<typename Device, typename View, typename FormatTag>
    45 inline
    -
    46 void write_view(Device& device, View const& view, FormatTag const& tag,
    +
    46 void write_view(Device& device, View const& view, FormatTag const& tag,
    47  typename std::enable_if
    48  <
    49  mp11::mp_and
    @@ -107,12 +107,12 @@ $(function() {
    60 {
    61  using writer_t = typename get_writer<Device, FormatTag>::type;
    62  writer_t writer = make_writer(device, tag);
    -
    63  write_view(writer, view);
    +
    63  write_view(writer, view);
    64 }
    65 
    67 template<typename String, typename View, typename FormatTag>
    68 inline
    -
    69 void write_view(String const& file_name, View const& view, FormatTag const& tag,
    +
    69 void write_view(String const& file_name, View const& view, FormatTag const& tag,
    70  typename std::enable_if
    71  <
    72  mp11::mp_and
    @@ -129,13 +129,13 @@ $(function() {
    83 {
    84  using writer_t = typename get_writer<String, FormatTag>::type;
    85  writer_t writer = make_writer(file_name, tag);
    -
    86  write_view(writer, view);
    +
    86  write_view(writer, view);
    87 }
    88 
    90 template<typename Device, typename View, typename FormatTag, typename Log>
    91 inline
    -
    93  Device& device, View const& view, image_write_info<FormatTag, Log> const& info,
    +
    93  Device& device, View const& view, image_write_info<FormatTag, Log> const& info,
    94  typename std::enable_if
    95  <
    96  mp11::mp_and
    @@ -152,13 +152,13 @@ $(function() {
    107 {
    108  using writer_t = typename get_writer<Device, FormatTag>::type;
    109  writer_t writer = make_writer(device, info);
    -
    110  write_view(writer, view);
    +
    110  write_view(writer, view);
    111 }
    112 
    114 template<typename String, typename View, typename FormatTag, typename Log>
    115 inline
    -
    117  String const& file_name, View const& view, image_write_info<FormatTag, Log> const& info,
    +
    117  String const& file_name, View const& view, image_write_info<FormatTag, Log> const& info,
    118  typename std::enable_if
    119  <
    120  mp11::mp_and
    @@ -175,14 +175,14 @@ $(function() {
    131 {
    132  using writer_t = typename get_writer<String, FormatTag>::type;
    133  writer_t writer = make_writer(file_name, info);
    -
    134  write_view(writer, view);
    +
    134  write_view(writer, view);
    135 }
    136 
    138 
    139 // without image_write_info
    140 template <typename Writer, typename ...Views>
    141 inline
    -
    142 void write_view(Writer& writer, any_image_view<Views...> const& view,
    +
    142 void write_view(Writer& writer, any_image_view<Views...> const& view,
    143  typename std::enable_if
    144  <
    145  mp11::mp_and
    @@ -192,7 +192,7 @@ $(function() {
    149  >::value
    150  >::type * /* ptr */ = nullptr)
    151 {
    -
    152  writer.apply(view);
    +
    152  writer.apply(view);
    153 }
    154 
    155 // without image_write_info
    @@ -275,9 +275,10 @@ $(function() {
    Helper metafunction to generate writer type.
    Definition: get_writer.hpp:20
    void write_view(Device &device, any_image_view< Views... > const &views, image_write_info< FormatTag, Log > const &info, typename std::enable_if< mp11::mp_and< typename detail::is_write_device< FormatTag, Device >::type, typename is_format_tag< FormatTag >::type >::value >::type *=0)
    Definition: write_view.hpp:196
    -
    const image< Pixel, IsPlanar, Alloc >::view_t & view(image< Pixel, IsPlanar, Alloc > &img)
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:549
    +
    defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
    Definition: algorithm.hpp:36
    Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
    Definition: any_image_view.hpp:75
    -
    Definition: device.hpp:643
    +
    auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
    Returns the non-constant-pixel view of an image.
    Definition: image.hpp:565
    +
    Definition: device.hpp:637
    Helper metafunction to generate dynamic image writer type.
    Definition: get_writer.hpp:63
    diff --git a/html/search.html b/html/search.html index 346b8c0ab..a5ee303e4 100644 --- a/html/search.html +++ b/html/search.html @@ -89,7 +89,7 @@ diff --git a/html/searchindex.js b/html/searchindex.js index 2acbd1f9e..3e5e8eab5 100644 --- a/html/searchindex.js +++ b/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["design/basics","design/channel","design/color_base","design/color_space","design/concepts","design/conclusions","design/dynamic_image","design/examples","design/extending","design/image","design/image_view","design/index","design/metafunctions","design/pixel","design/pixel_iterator","design/pixel_locator","design/point","design/technicalities","histogram/create","histogram/cumulative","histogram/extend","histogram/extension/index","histogram/extension/overview","histogram/extension/std","histogram/fill","histogram/index","histogram/limitations","histogram/overview","histogram/stl_compatibility","histogram/subhistogram","histogram/utilities","image_processing/affine-region-detectors","image_processing/basics","image_processing/contrast_enhancement/histogram_equalization","image_processing/contrast_enhancement/histogram_matching","image_processing/contrast_enhancement/index","image_processing/contrast_enhancement/overview","image_processing/index","image_processing/overview","index","installation","io","naming","numeric","toolbox","tutorial/gradient","tutorial/histogram","tutorial/video"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["design/basics.rst","design/channel.rst","design/color_base.rst","design/color_space.rst","design/concepts.rst","design/conclusions.rst","design/dynamic_image.rst","design/examples.rst","design/extending.rst","design/image.rst","design/image_view.rst","design/index.rst","design/metafunctions.rst","design/pixel.rst","design/pixel_iterator.rst","design/pixel_locator.rst","design/point.rst","design/technicalities.rst","histogram/create.rst","histogram/cumulative.rst","histogram/extend.rst","histogram/extension/index.rst","histogram/extension/overview.rst","histogram/extension/std.rst","histogram/fill.rst","histogram/index.rst","histogram/limitations.rst","histogram/overview.rst","histogram/stl_compatibility.rst","histogram/subhistogram.rst","histogram/utilities.rst","image_processing/affine-region-detectors.rst","image_processing/basics.rst","image_processing/contrast_enhancement/histogram_equalization.rst","image_processing/contrast_enhancement/histogram_matching.rst","image_processing/contrast_enhancement/index.rst","image_processing/contrast_enhancement/overview.rst","image_processing/index.rst","image_processing/overview.rst","index.rst","installation.rst","io.rst","naming.rst","numeric.rst","toolbox.rst","tutorial/gradient.rst","tutorial/histogram.rst","tutorial/video.rst"],objects:{},objnames:{},objtypes:{},terms:{"0rrgggbb":13,"0x06":13,"0x0c":13,"0x11":13,"0x30":13,"0x60":13,"0x83":13,"0xc1":13,"1000s":31,"100s":31,"100x100":7,"200x200":45,"4x3":0,"50x50":10,"abstract":[0,5,10,39,45],"boolean":[12,45],"byte":[1,9,10,13,14,15,17,39,45],"case":[2,5,7,8,10,12,13,15,19,20,31,33,34,41,45],"char":[7,9,10,12,13,14,41,45],"class":[1,2,4,6,8,9,10,12,13,14,15,17,19,22,24,25,27,29,39,41,45],"const":[1,2,6,7,8,9,10,12,13,14,15,16,17,20,24,41,42,45,46],"default":[1,3,6,7,8,9,10,12,14,17,20,22,42,45],"final":[2,7,8,45],"float":[1,7,12,18,19,41,42,45],"function":[2,6,8,10,12,14,15,17,19,20,25,29,31,39,41,45,46],"import":[6,9,17,41],"int":[1,2,3,7,10,13,15,18,19,20,23,24,29,41,45,46],"long":[4,7,8,10,12,45],"new":[5,22,45,46],"public":[6,8,10,14,15,41],"return":[1,2,4,6,7,8,10,12,13,14,15,17,20,29,41,45],"short":[12,41,45,46],"static":[1,2,6,7,8,10,13,14,15,45],"switch":[6,45],"throw":6,"true":[1,2,12,13,14,15,33,34,45],"try":[7,27,33,34,41,45],"var":[7,46],"void":[2,4,6,7,8,9,10,13,14,17,41,45,46],"while":[0,1,3,13,15,36,45],And:18,But:41,For:[1,2,3,4,6,7,8,10,12,13,14,15,20,31,33,34,40,41,42,45,46],Its:[1,2,13,14,45],Not:7,One:[15,17,31,33,34,41,45],Such:[1,6,15,45],That:[6,45],The:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,17,19,21,22,25,27,31,32,33,34,35,37,38,39,40,41,42,44,45,46],Their:[6,15,45],Then:[15,33,34,45],There:[0,2,6,12,18,32,41,45],These:[2,12,13,22,36,45],Use:[17,24,41],Using:[10,12,15,18,39,46],_bmp_test_fil:41,_concept_:45,_dimens:10,_dst:45,_height:41,_imag:[12,42],_img_siz:45,_info:41,_io_dev:41,_is_:12,_loc:[12,42],_pixel:[10,12,42],_planar:[12,42],_png_test_fil:41,_ptr:[12,42],_ref:[12,42],_scanline_length:41,_step:[12,42],_tiff_graphicsmagick_test_fil:41,_tiff_lib_tiff_test_fil:41,_variants_:45,_view:[12,42],_width:[15,41],abbrevi:45,abgr_layout_t:3,abil:[19,41],abl:[14,41],about:[4,8,15,32,45,47],abov:[0,2,7,10,13,14,15,17,31,32,41,45,46],abraham:17,access:[1,2,3,6,7,8,13,15,41,45],accessor:[2,16],accordingli:8,account:7,achiev:[32,33],acknowledg:39,actual:[8,40,46],adapt:1,adaptor:[8,10,15],add:[6,8,15,22,24,41],add_deref:[8,10,15],add_ref_t:8,added:44,adding:[7,41],addit:[1,2,4,6,9,10,14,15,45],addition:45,address:[0,12,13],adjac:[10,14,45],adob:10,advanc:[10,14,15,41,45],advantag:[45,46],advis:41,affin:[37,39],after:[2,22,45],again:[15,31],against:[17,40],ahe:36,alex:17,algorithm:[0,4,5,6,7,8,9,14,15,17,25,27,35,36,37,38,39],align:[0,6,9,10,13,14,39,45,46],all:[0,1,2,3,4,6,7,8,10,13,14,15,17,19,31,41,44,45],alloc:[7,9,10,12,41,45,46],allocator_typ:9,allow:[0,1,2,5,6,8,9,10,12,13,14,15,17,39,41,45],alon:32,along:[10,12,14,15,16,45],alpha:[0,44],alpha_t:3,alreadi:[12,13,41,45],also:[0,1,2,3,7,10,12,13,14,15,16,18,22,24,33,36,41,45,46],altern:[18,45],although:33,alvei:31,alwai:[13,17,42,45],among:19,amount:[14,15],analog:13,analysi:[12,37],andrew:31,angl:29,ani:[0,2,5,6,7,8,10,12,14,15,27,29,31,32,40,45,46],anoth:[1,2,5,6,8,10,13,14,24,32,41,45],another_iter:14,any_imag:[6,41,45],any_image_view:[6,45],any_pixel:[6,45],any_pixel_iter:[6,45],anyth:[8,14,41],apart:22,api:39,append:12,appendix:45,appli:[0,1,14,32,33,34,39,41,45],applic:[36,41,45],appropri:[1,6,41],approxim:[13,14,45],arbitrari:[8,14,20,45],area:[7,10,41],aren:41,argb_layout_t:3,argument:[6,14,45],argument_typ:[8,10,45],aris:[17,24],arithmet:[1,32],around:[7,14,15,41],arrai:[0,14,15,22,23,32],ascii:41,assembl:45,assert:[1,7,13,45],assert_sam:6,assign:[1,2,4,6,9,13,17,24,45],assignableconcept:14,associ:[1,2,3,6,12,45],assum:[31,45],at_c:[2,13],atom:45,author:41,auto:[4,18,19,29,41],automat:41,avail:[6,10,15,22,24,37,41,45],averag:15,avoid:45,awai:[10,14],axes:[18,20,27,29],axi:[10,15,16,18,20,29,32,45],axis1:18,axis2:18,axis3:18,axis:32,axis_iter:[10,15],axis_valu:16,b16:7,back:[6,10,45],backend:41,backend_t:41,backward:42,bad_cast:6,base:[1,6,10,11,13,14,15,17,39,41,45,46],basic:[4,11,12,31,37,39,41],beauti:36,becam:41,becaus:[1,6,9,10,12,13,15,31,45],been:[5,34,41,45,46],befor:[19,20,24,33,34,41],begin:[7,10,41,45,46],behav:6,being:[12,37,41],belong:44,below:[11,14,15,21,25,31,33,34,35,37,41,45],berlin:31,besid:[3,41],beta:10,better:45,between:[1,6,8,10,13,14,29,33,34,45],bgr16_view_t:7,bgr16s_pixel_t:45,bgr16s_view_t:45,bgr232:13,bgr232_pixel_t:13,bgr232_ptr_t:13,bgr232_ref_t:13,bgr556:13,bgr556_pixel_t:13,bgr8:13,bgr8_image_t:[12,42],bgr8_pixel_t:[7,13],bgr8_view_t:6,bgr:[0,2,7,12,13,42,45,46],bgr_layout_t:[3,13],bgra_layout_t:3,big:[31,41],biggest:45,bilinear:39,bin:[7,19,24,27,29,33,34],binari:[41,45],binaryfunctionconcept:10,bit:[0,1,2,7,8,9,10,13,14,15,41,42,45,46],bit_align:13,bit_aligned_image1_typ:12,bit_aligned_image2_typ:12,bit_aligned_image3_typ:12,bit_aligned_image4_typ:12,bit_aligned_image5_typ:12,bit_aligned_image_typ:12,bit_aligned_pixel_iter:[13,14],bit_aligned_pixel_refer:13,bitdepth:[12,42],bitfield:12,bitmask:39,bits16:1,bits32f:1,bits8:[7,10,13,14,45],bitwis:10,block:[10,45],blue:[2,7,13,17,24,29],blue_t:[2,3,7,13],blur:[31,39],bmp_filenam:41,bmp_test_fil:41,bmp_wiki:41,bodi:45,bool:[1,2,4,6,8,9,10,12,13,14,15,20,33,34,45],boost:[3,6,7,10,12,14,20,22,38,40,41,44,45,46],boost_check_equ:41,boost_concept:14,boost_gil_extension_io_jpeg_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_png_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_tiff_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_zlib_c_lib_compiled_as_cplusplu:41,boost_gil_io_enable_gray_alpha:41,boost_gil_io_png_1_4_or_low:41,boost_gil_io_png_dithering_support:41,boost_gil_io_png_fixed_point_support:41,boost_gil_io_png_floating_point_support:41,boost_gil_io_test_allow_reading_imag:41,boost_gil_io_test_allow_writing_imag:41,boost_gil_io_use_bmp_test_suite_imag:41,boost_gil_io_use_boost_filesystem:41,boost_gil_io_use_png_test_suite_imag:41,boost_gil_io_use_pnm_test_suite_imag:41,boost_gil_io_use_tiff_graphicsmagick_test_suite_imag:41,boost_gil_io_use_tiff_libtiff_test_suite_imag:41,boost_gil_use_concept_check:[10,45],boost_mpl_assert:13,boostorg:40,border:7,both:[0,6,7,13,15,16,31,34,41,45,46],bottom:[0,10,15,45],bound:[6,13],boundari:45,bourdev:47,brace:24,bracket:29,branch:40,bring:[33,34],buffer:[7,13,45],build:[0,40,41],built:[1,7,12,13,14,27,40,45],byte_to_memunit:14,c_str:41,cach:[15,45],cache_loc:[15,45],cached_location_t:[15,45],calcul:[19,33,34,46],call:[6,7,8,10,13,17,19,31,41,45,46],can:[2,4,5,6,7,8,9,10,12,13,14,15,16,17,24,27,31,32,39,40,41,45,46],cannot:[7,10,32,45],canon:[13,45],capabl:41,captur:3,care:[8,33],carriag:[15,45],cast:45,cater:24,caus:[31,45],caution:6,cav:6,cb1:2,cb2:2,cb3:2,cc_t:41,ccv:10,ccv_imag:45,cell:24,center:[7,32],centerimg:7,central:45,certain:32,challeng:[0,45],chan16:1,chang:[6,8,10,12,14,22,31,41,45,46],channel16_0_5_reference_t:1,channel16_11_5_reference_t:1,channel16_5_6_reference_t:1,channel1:1,channel2:1,channel3:1,channel:[0,2,3,5,6,7,10,11,12,13,14,17,24,29,32,33,34,39,41,42,45,46],channel_6bit:1,channel_convert:[1,7,8,13,45],channel_convert_to_unsign:45,channel_invert:[1,8],channel_mapping_t:3,channel_mapping_typ:[12,13,45],channel_multipli:1,channel_t:45,channel_trait:[1,8],channel_typ:[7,12,13,44,45],channel_type_to_index:44,channelbitsizevector:12,channelconcept:[1,13],channelconvertibleconcept:1,channelmap:3,channelmappingconcept:[3,13],channelptr:14,channelrefer:13,channelrefvec:14,channelscompatibleconcept:[1,13],channelvalu:[12,13,14],channelvalueconcept:[1,12],check:[6,7,10,15,29,40,45],choic:[15,31],choos:15,chose:7,christoph:31,chunki:45,claim:41,classtyp:[12,42],clear:[24,32,41],client:40,clockwis:45,clone:27,close:41,closer:45,cmake:22,cmyk16_pixel_t:[12,13,42],cmyk16_planar_image_t:6,cmyk16_planar_step_view_t:6,cmyk16_planar_view_t:6,cmyk16c_planar_ref_t:42,cmyk16c_planar_view_t:6,cmyk16sc_planar_ref_t:12,cmyk8_image_t:41,cmyk:[0,12,42],cmyk_t:3,cmyka:44,code:[0,5,6,7,8,10,15,20,38,39,40,41,42,46],col:46,col_begin:10,col_end:10,collect:[6,44],color:[0,1,5,6,7,10,11,12,13,14,15,29,33,34,39,41,42,44,46],color_bas:2,color_const_reference_t:2,color_convert:[8,13,44],color_convert_deref_fn:[8,14],color_convert_view:8,color_converted_view:[7,8,10,45,46],color_converted_view_typ:[8,10],color_converter_typ:41,color_reference_t:2,color_spac:44,color_space_t:[2,3],color_space_typ:[7,8,12,13,45],colorbas:2,colorbaseconcept:[2,13],colorbasescompatibleconcept:[2,13],colorbasevalueconcept:2,colorconvert:10,colorspac:[3,12,13,14,42],colorspace1:3,colorspace2:3,colorspaceconcept:[3,13],colorspacescompatibleconcept:[2,3,45],column:[14,15,45,46],com:[10,40,47],combin:[6,14,15,31,45],come:[12,41],commerci:46,common:[0,2,4,6,41],commonli:13,commun:44,compact:1,compactli:[7,45],compar:[0,1,2,5,6,7,45],comparison:[1,6,15,31],compat:[1,2,3,6,7,10,13,25,27,39,41,45],compil:[1,2,5,6,7,10,13,14,17,27,45],complement:5,complet:[40,41,45],complex:[6,7,13,15,24,31,45],complic:[8,9,17],compon:[0,1,42],compos:[10,14],comprehend:45,comprehens:45,compris:3,comput:[7,15,31,32,45,46],computexgradientgray8:45,concentr:33,concept:[0,1,2,5,8,9,10,11,13,14,15,16,31,32,39,45],concept_check:[10,45],concept_map:4,conceptc:4,conceptu:13,conclus:[11,39],concret:[6,45],condit:[15,31],confer:31,config:22,configur:[18,40],consid:[1,3,6,13,19,20,32,46],consist:[2,15,40,45],const_iterator_typ:14,const_point:1,const_refer:[1,8,10,13,14,45],const_t:[6,8,9,10,14,15,45],const_view:[9,45],const_view_t:[6,9],constant:[2,10,12,13,17,31,45],constexpr:[8,45],construct:[1,4,5,6,7,8,9,10,12,13,14,17,24,27,45],constructor:[1,6,7,9,17,18,24,40,45],consult:41,contain:[1,2,3,6,7,9,13,14,19,21,41,45],content:[11,21,25,35,37,44],context:[32,41],contigu:2,contrast:[33,36,37,39],conveni:8,convent:[39,45],convers:[1,13,14,15,27,41],conversionpolici:41,convert:[1,2,7,8,10,12,13,14,19,33,34,41,44,45],convolut:[10,37,39],convolv:[7,32],coord:45,coord_t:[9,10,15],coordin:[15,16,41,45],copi:[1,2,6,7,8,9,10,13,15,17,19,24,41,45,46],copy_and_convert_pixel:[10,45],copy_pixel:[6,7,10,41,45],copyabl:10,copyconstruct:[2,4],copyconstructibleconcept:14,cordelia:31,corner:[7,10,31,45],correct:45,correctli:[4,17],correspond:[1,2,5,8,10,14,18,32,33,34,45],cost:5,could:[6,7,10,14,15,18,32,41,45],count:[7,19],counter:45,counterpart:41,coupl:41,cours:[15,41],cout:[20,24],cover:[31,33],cpp:39,creat:[1,3,6,7,8,12,13,14,15,19,25,27,39,41],create_with_margin:7,cstddef:20,cumul:[25,27,33,34,39],cumulative_histogram:[19,23],curli:24,current:[3,6,14,15,22,40,41,45],curvatur:[31,37],custom:[1,10,15],d_channel_t:45,dark:36,data:[1,5,8,9,10,41,42,45],dave:17,deal:45,dealloc:45,debug:45,decent:41,declar:45,decrement:15,dedic:[11,21,25,35,37],deep:[6,9,17,45],deeper:31,default_color_convert:10,default_color_converter_impl:8,defaultconstruct:4,defaultconstructibleconcept:14,defin:[0,1,2,3,4,6,10,12,13,14,15,16,17,39,41,45],definit:[3,44],degrad:45,degre:45,delai:15,deleg:10,delet:9,demand:41,demo:[23,29],demonstr:[10,24,41,45],denot:[14,17,45],depend:[32,40,41],depth:[0,6,7,10,12,14,42,45,46],deref:[10,15],deref_compos:14,deref_t:8,derefer:[8,45],dereferenc:[7,8,10,12,14,15,17],dereference_iterator_adaptor:14,deriv:[10,31,37],derived_image_typ:[12,45],derived_iterator_typ:[12,45],derived_pixel_reference_typ:[12,45],derived_view_typ:[12,45],describ:[0,2,4,11,15,16,21,25,35,37,41],descript:[41,42],design:[0,2,5,39,41,45],desir:[29,33,45],despit:6,destin:[1,6,7,8,41,45],destroi:6,destructor:[9,45],det:31,detail:[2,6,14,41],detect:[37,41,45],detector:[37,39],determin:[14,15,31],develop:[10,38,40],devic:41,devicen_t:3,diagram:15,diff:14,differ:[1,6,13,14,15,17,31,32,34,41,45],difference_typ:[10,15],difficult:[0,45],dim:[6,9,45],dimens:[6,9,10,15,16,24,29,31,33,34,41,45],dimension:[7,9,10,15,16,45],direct:[12,14,15,31,32,41,45],directli:[7,13,15,17,18,24,41,45,46],directori:44,disadvantag:45,discrimin:31,discuss:[0,40],disk:[6,8,45],dispatch:8,displai:41,distanc:[14,45],distinct:[1,13,31,45],distribut:[13,33],dither:41,divis:14,do_swap:6,doc:22,document:[0,4,21,25,32,35,37,41,45],doe:[1,7,10,12,17,40,45],doesn:[41,45],doing:[6,8,13],don:[6,8,9,10,12,13,15,36,45],done:[7,15,18,32,41,45],doubl:[8,45],down:[6,7,10],download:[10,40],draw:32,drawback:45,drive:41,drop:40,dst:[1,2,7,8,10,41,45],dst_channel_t:45,dst_img:[33,34],dst_it:45,dst_pixel:45,dst_row_byt:45,dst_view:41,dstchannel:1,dstcolorspac:8,dstimag:7,dstp:[8,10],dstpixel:13,dstview:45,due:[13,24,40],dummi:29,duplic:46,dure:[27,38,41],dxdx:31,dxdy:31,dydi:31,dynam:[11,12,14,15,39,41],dynamic_at_c:[2,13],dynamic_imag:[6,39,45],dynamic_image_al:[6,45],dynamic_x_step_typ:[6,10,14],dynamic_xy_step_transposed_typ:10,dynamic_xy_step_typ:[6,10],dynamic_y_step_typ:[10,15],each:[0,2,7,8,10,13,15,16,19,33,34,41,45],earli:[10,45],easi:[41,45],easier:[10,18,45],easili:45,edg:[31,45],effect:[32,45],effici:[0,7,10,14,15,45,46],either:[6,7,8,10,14,34,41,45],element:[2,3,10,11,13,14,32,45],element_const_reference_typ:[2,13],element_recurs:2,element_reference_typ:[2,13],element_typ:2,els:[8,15],elsewher:19,email:41,enabl:41,encod:41,end:[0,7,9,10,15,41,45,46],enhanc:[33,36,37,39],enough:31,ensur:[10,45],entir:[33,45],enumer:[41,45],epipolar:38,equal:[1,2,3,6,10,13,15,34,36,45],equal_pixel:10,equalitycompar:[1,2,4],equival:[2,6,10,14,15],error:[1,6,7,10,17,45],especi:6,essenti:0,establish:42,etc:[0,6,10,13,22,33,34,40,41,45],european:31,evalu:[12,14],even:[6,7,8,41,45,46],ever:7,everi:[5,6,10,14,15,42,45,46],everyth:8,exact:32,exactli:13,exampl:[1,2,3,4,6,8,10,11,12,13,14,15,17,18,19,20,32,41,42,45,46],except:[2,6,8,10,14,15,40,45],exclud:45,execut:[6,45],exercis:45,exist:[5,7,8,19,41,46],expect:[34,41],expens:45,explan:[10,31,33,34,41],explicit:[6,13,45],explicitli:45,extend:[5,11,25,27,39,45],extending_gil__io_with_new_format:41,extens:[6,8,10,25,40,45,46],extern:[21,41],extra:[7,10,13,45,46],extract:45,extrem:31,eyes:36,fact:[41,45],factori:[8,10,45],fail:45,fall:[7,10],fals:[8,12,15,23,24,29,45],familiar:45,famou:34,far:45,fast:[10,15,45],faster:[1,5,9,15,45],fastest:7,featr:46,featur:[31,34,37,38,41,46],fetch:45,few:[24,29,33,34,36,41],fewer:29,file:[6,8,20,22,40,41,45],file_nam:6,filenam:41,filesystem:41,fill:[2,7,10,13,15,19,23,25,27,29,39,41,45],fill_histogram:[22,23,24,29],fill_pixel:[7,10,41],fill_valu:9,filter:[15,37],find:[15,40],first:[0,1,2,3,6,7,8,10,13,15,19,33,38,41],first_argument_typ:10,firstbit:1,fit:13,five:[3,5,12],flat:[32,33],flatten:33,flavour:41,flexibl:[1,6,12,46],flip:[10,14,45],flipped_left_right_view:10,flipped_up_down_view:10,float_on:1,float_zero:1,flow:27,fly:14,focu:[36,45],focus:45,folder:[32,39,41],follow:[0,1,2,3,5,6,7,9,10,12,13,15,16,22,27,31,33,41,42,44,45,46],for_each:[2,7,10,45],for_each_pixel:[7,10,24,45,46],for_each_pixel_posit:[10,45],forc:41,form:[0,9,12,13,29,31,32,45],format:[13,24,40,45],format_tag:41,formattag:41,forward:14,forwardtraversalconcept:14,found:41,four:[15,45],fourth:7,frame:38,framework:41,frederik:31,free:[15,40,45],freeli:[7,10],frequenc:19,frequent:15,friendli:[15,45],from:[0,1,5,6,7,8,12,13,14,15,18,20,22,24,27,29,31,39,40,41,45,46],fulfil:4,full:[6,13],fulli:[8,41,45],fun:10,function_requir:13,fundament:[1,15,38],fundamental_step:14,further:17,furthermor:[41,45],futur:46,gap:10,gaussian:[31,32],gcc:40,gener:[0,2,4,6,7,9,10,11,14,16,20,31,32,42],generate_pixel:10,geometri:38,get:[1,6,8,10,12,14,19,20,27,29,31,32,45],get_color:[2,7,8,13],get_info:41,get_num_bit:44,get_num_it:45,get_pixel_typ:44,get_read_devic:41,get_reader_backend:41,gil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,29,35,36,37,39,40,42,44,47],gil_function_requir:[2,7,10,45],github:40,give:[7,15,41],given:[0,2,6,8,9,10,12,13,14,15,17,31,45],glimps:45,global:45,goal:[5,33],goe:45,going:15,good:[32,33,36,45],googl:38,gool:31,gradient:[31,32,39],grai:[7,8,31,44],graph:32,grate:17,gray16:41,gray16_image_t:[41,45],gray16_pixel_t:45,gray16_step_view_t:10,gray16c_view_t:45,gray1:[41,45],gray1_image_t:41,gray2:41,gray32s_pixel_t:45,gray32s_view_t:45,gray4:41,gray4_image_t:41,gray7:41,gray8:41,gray8_image_t:[6,18,23,24,33,34,41,45],gray8_pixel_t:[7,8,24,45,46],gray8_view_t:7,gray8c_loc_t:45,gray8c_view_t:45,gray8s_image_t:45,gray8s_pixel_t:45,gray8s_view_t:45,gray_alpha:41,gray_alpha_16:41,gray_alpha_8:41,gray_channel_t:7,gray_color_t:[7,8],gray_cs_t:7,gray_image_t:45,gray_layout_t:45,gray_pixel_t:45,gray_t:[3,7,8,12],gray_to_rgb:7,grayimage_histogram:[7,46],graypixel:7,grayscal:[7,8,10,12,14,15,33,45],grayview:[7,46],green:[7,10,13,17,24,29,46],green_t:[2,3,7,13],grid:45,group:[0,3],guarante:4,guid:[10,39,45],guidelin:41,gv8:7,half:45,half_x_differ:45,halfdiff_cast_channel:45,hand:[0,5,31,39,45,46],handl:45,happen:[6,31,45],hard:[12,41],hardli:45,harrismatrix:31,has:[2,5,6,7,9,10,12,14,15,19,41,45],hasdynamicxsteptypeconcept:[14,15],hasdynamicysteptypeconcept:15,hash:20,hash_combin:20,hash_valu:20,hasher:20,hassl:45,hastransposedtypeconcept:15,have:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,31,33,34,36,41,44,45,46],hcb:2,header:[39,40,41,44],heidelberg:31,height:[6,7,9,10,33,34,45,46],help:32,helper:12,henc:[33,34,36],here:[0,1,2,3,4,6,7,8,10,12,13,14,15,32,41,45],hessianmatrix:31,heterogen:[12,13,45],high:29,higher:8,hill:[31,32],his:41,hist:[7,46],histogram:[20,21,22,27,36,39],histogram_equ:33,histogram_match:34,homogen:[2,13,14,45],homogeneous_color_bas:[2,14],homogeneouscolorbaseconcept:[2,13,14],homogeneouscolorbasevalueconcept:2,homogeneouspixel:13,homogeneouspixelbasedconcept:[12,13],homogeneouspixelconcept:13,homogeneouspixelvalueconcept:13,hopefulli:[41,44],horizont:[7,12,14,15,32,45],how:[1,3,6,7,8,10,12,13,14,31,41,45],howev:[2,10,45],hpp:[6,8,20,39,40,41,44,45],hsl:44,hsv:[33,34,44],html:10,http:[10,40,47],human:36,idea:33,ideal:33,ident:[7,8],identifi:20,ifstream:41,ignor:[13,45],illumin:34,illustr:[6,7,45],imag:[0,5,11,13,14,16,18,21,23,24,25,27,31,32,33,34,35,36,38,40,42,44,46],image_read_info:41,image_read_set:41,image_t:[6,41],image_typ:[8,12,44,45],image_view:[6,9,10,45],image_write_info:41,imageconcept:[6,7,9,12],imagemagick:41,imagetyp:6,imageviewconcept:[6,7,9,10,12,45],imageviewtyp:6,imagin:32,img:[6,7,9,10,15,23,24,29,41,45,46],img_view:8,immut:[6,9,10,12,14,15,42,45],impact:[10,45],implement:[1,2,6,8,10,13,14,15,17,31,40,41],impos:1,improv:[44,45],in1:45,in2:45,in_buff:41,inaccuraci:41,inc:14,includ:[4,6,20,36,40,41,44,45],incompat:[1,6,7,41,45],incomplet:41,incorrect:45,incorrectli:17,increas:10,increment:[14,15,45],independ:[15,33,34,41,45],index:[2,10,13,15,41,45,46],indexed_imag:44,indic:[1,12,15,24,32,42,45],indica:42,ineffici:6,info:41,inform:[1,15,41],inher:14,inherit:[13,40],initi:[7,13,38,45],inlin:[6,8,45],inner:45,inp_img:[33,34],input:[10,24,32,33,34,45],insid:[6,7,8,10,15,16,45],inspect:40,instal:[39,41],instanc:[6,8,14,24,29,41,45],instanti:[6,10,15,27,45],instead:[1,2,9,45],instruct:45,instrument:5,integ:[1,7,10,15,41,45],integr:[1,2,3,12,14,42,45],intel:15,intens:[1,31,32],interest:31,interfac:[15,24],interleav:[0,6,7,8,9,10,12,13,14,15,42,45,46],interleaved_ptr:39,interleaved_ref:39,interleaved_view:[10,41,45],intermedi:7,intern:[14,24,31,46],internet:8,interpret:[3,10],interv:33,introduc:41,invari:31,invert:8,invert_pixel:17,invok:[2,6,7,8,10,12,14,15,45],involv:45,ios:41,ios_bas:41,iostream:20,is_1d_travers:[10,15],is_bit_align:44,is_homogen:44,is_iterator_adaptor:14,is_mut:[1,8,13,14,45],is_pixel:13,is_planar:[12,13],is_sam:[6,7,13],is_similar:44,ismut:12,isplanar:[9,12],isstep:12,isstepx:12,issu:[17,40,45,46],isxstep:12,isystep:12,iter:[1,2,5,7,8,9,10,11,13,17,39,42,46],iterator_adaptor_get_bas:14,iterator_adaptor_rebind:14,iterator_from_2d:[10,15],iterator_is_mut:14,iterator_t:41,iterator_trait:[13,17,45],iterator_typ:12,iterator_type_from_pixel:12,iteratoradaptorconcept:14,its:[1,3,6,7,9,12,13,14,15,19,24,40,44,45],itself:[7,13,19,27],jamfil:22,jiri:31,journal:31,jpeg:[8,45],jpeg_dynamic_io:6,jpeg_lib:41,jpeg_read_imag:[6,7,45],jpeg_tag:41,jpeg_wiki:41,jpeg_write_view:[6,7,45],jpg:[7,41,45],just:[7,8,9,12,13,15,41,44,45],kadir:31,keep:[0,14,27,45],kei:[19,20,24,27,29,31],kernel:[7,37],key_from_pixel:24,kind:41,know:41,known:[27,33],krystian:31,kth_element_const_reference_typ:2,kth_element_reference_typ:2,kth_element_typ:[2,13],kth_semantic_element_const_reference_typ:2,kth_semantic_element_reference_typ:2,kth_semantic_element_typ:[2,13],lab:44,lack:[41,45],laid:7,lambda:[7,46],larg:41,larger:7,largest:7,last:[10,13,41,45],lastli:17,later:[2,15,40],latest:40,latter:[7,13],layout:[2,5,11,12,13,14,39,42,45],layout_t:2,least:[6,45],leav:45,lectur:39,left:[7,10,14,15,34,41,45,46],let:[8,20,31,32,45,46],level:[1,6,41,45],lib:41,libjpeg:[40,41],libpng:[40,41],librari:[0,5,8,10,11,20,37,40,41,44,46],libraw:41,libtiff:41,lie:29,light:36,lightweight:[7,10,15,45],like:[0,6,7,8,12,13,14,22,31,32,33,34,40,41,45],limit:[5,6,25,27,39],line:45,linear:[1,6,33,36],linearli:[1,45],link:[40,41,47],list:[11,21,25,35,37,40,41],littl:[13,32],live:8,load:[6,45],loc2:15,loc:15,local:[34,41],locat:[5,8,9,10,11,12,13,14,16,34,39,42],locator_t:45,locator_typ:12,look:[8,31,32,36,41,45],loop:[10,15,45],lossi:[1,13],lot:[41,45],low:29,lower:41,lubomir:47,luc:31,lumin:32,luminos:[7,45,46],luminosity8bit_hist:46,luminosity_hist:46,luminosity_histogram:7,macro:[41,46],made:44,magnitud:45,mai:[0,1,3,4,6,7,8,10,13,14,15,45],main:[20,44],maintain:[44,45],make:[0,6,7,8,10,15,24,25,27,39,41,45],make_histogram:[18,22],make_integer_sequ:3,make_scanline_read:41,make_step_iter:14,mandel:45,mandel_grad:45,mandelbrot:[8,14,15,39,45],mandelbrot_fn:45,mani:[5,6,9,10,25,41,45],manipul:5,manual:41,map:[1,3,7,13,22,23],margin:7,mark:0,mask:[29,33,34],mata:31,match:[1,10,17,18,33,36,41,45],mathemat:33,matric:[31,32],matrix:[31,32],matter:31,max:1,max_el:2,max_valu:1,maximum:1,mayb:17,mean:[6,7,9,15,32,40,45],meant:41,measur:[6,15,45],mechan:[6,8,15,45],median:32,medic:36,member:[8,14,17,29,41],memmov:[7,10],memori:[0,2,3,7,13,14,15,45,46],memory_based_2d_loc:15,memory_based_step_iter:[14,15],memorybasediteratorconcept:[14,15],memunit:[14,15],memunit_adv:14,memunit_advanc:14,memunit_advanced_ref:14,memunit_dist:14,memunit_step:14,mention:41,meta:45,metafunct:[2,4,10,11,13,14,15,16,39,44,45],metaprogram:41,method:[7,8,10,14,15,18,45],might:[24,31,32,41,45],mike:31,mikolajczyk:31,mileston:41,min:1,min_el:2,min_valu:1,mind:[5,20],minimum:1,minisblack:41,minor:5,miss:45,mitig:45,mix:7,mode:[41,45],model:[0,4,5,6,7,8,12,17,45],modern:[41,45],modifi:[10,13,14,16,45],modul:[6,8],moment:31,monkei:7,monkey_transform:7,mono:41,moravec:31,more:[1,2,4,6,7,8,9,10,12,13,14,15,41,45],most:[2,4,8,9,10,13,15,16,24,40,41,45],motiv:1,move:[10,15,31,41,45],mp11:[3,12,13,14,45],mp_list:[3,45],mp_list_c:[3,13],mp_size:3,mp_true:[12,14],mpl:[3,12],much:45,multi:[33,34,41],multipl:[7,10,15,45],multipli:[1,14,45],must:[2,4,10,13,14,15,17,22,45],mutabl:[1,9,10,12,13,14,15,17,42,45],mutable_forwarditeratorconcept:14,mutablechannelconcept:1,mutablecolorbaseconcept:[2,13],mutablehomogeneouscolorbaseconcept:[2,13],mutablehomogeneouspixelconcept:[7,13],mutableimageviewconcept:[9,10,45],mutableiteratoradaptorconcept:14,mutablepixelconcept:[7,13,17],mutablepixeliteratorconcept:14,mutablepixellocatorconcept:[10,15],mutablerandomaccess2dimageviewconcept:10,mutablerandomaccess2dlocatorconcept:15,mutablerandomaccessiteratorconcept:14,mutablerandomaccessndimageviewconcept:[9,10],mutablerandomaccessndlocatorconcept:15,mutablestepiteratorconcept:[14,15],my_any_image_t:6,my_color_convert:8,my_color_converter_impl:8,my_img_typ:[41,45],my_reference_proxi:17,my_valu:17,my_view:7,my_virt_view_t:45,myimg:6,myit:17,n2081:4,name:[7,13,15,22,32,39,45,46],namespac:[2,6,17,20,41,44,45],nativ:[1,45],natur:15,navig:[10,14,15],necessari:[14,15,17,41,45],need:[1,4,7,8,10,12,13,14,15,19,20,24,27,41,44,45],neg:14,negat:10,neighbor:[15,45],neighborhood:15,neighbour:10,nest:[10,45],never:[6,7,45],new_dim:9,next:[8,10,41,45,46],nice:45,noisi:31,non:[7,10,12,13,15,17,33,36,41,42,45],none:[41,45],normal:[33,34,45],note:[0,1,2,6,7,9,10,13,24,31,41,45],noth:13,notic:[2,7,31,45],notion:[19,45],now:[20,31,41,45],nth_channel_deref_fn:14,nth_channel_view:[7,10,45,46],nth_channel_view_typ:10,nth_channel_x_gradi:45,num_channel:[6,10,12,13,45],num_dimens:[10,15,16],number:[2,6,7,10,13,14,15,27,31,33,34,45],numbit:1,numer:[10,31,39],numeric_limit:1,obj:6,object:[6,8,10,12,14,15,17,18,41,42,45,46],obtain:[15,45],occupi:13,off:45,offer:15,offset:[1,14,15,45],ofstream:41,often:[3,6,13,45],old:45,onc:[0,5,10,45],one:[2,4,6,7,8,10,12,13,14,15,29,32,33,41,45],ones:[6,8,13,31],onli:[1,2,6,7,8,10,13,14,15,17,24,31,33,39,40,41,44,45,46],onlin:41,open:6,oper:[1,2,4,6,8,9,10,13,14,15,16,17,20,24,39,41,42,45,46],oppos:[7,10,12,42,45],optim:[5,7,10,15,45],option:[0,8,22,24,31,39,41,45],order:[0,2,3,6,7,10,12,13,15,19,20,29,31,40,42,45,46],organ:[12,13,15,42],origin:[6,10,34,45,47],other:[2,4,8,13,14,15,20,22,27,31,32,41,42,45,46],otherwis:[8,13],our:[6,7,8,45],out:[27,29,33,34,41,45],out_buff:41,outdoor:31,output:[24,29,33,45],outsid:45,over:[1,9,10,13,14,18,19,20,24,29,31,33,34,42,45],overhead:[6,45],overlai:31,overload:[6,10,17,20,22,45],overrid:[7,8,15],overview:[21,25,35,37,39],own:[4,8,9,10,15,39,41,45],ownership:[9,45],pack:[9,13,14,45],packed_channel_refer:1,packed_channel_valu:1,packed_dynamic_channel_refer:1,packed_image1_typ:12,packed_image2_typ:12,packed_image3_typ:12,packed_image4_typ:12,packed_image5_typ:12,packed_image_typ:12,packed_pixel:[2,13,14,39],packed_pixel_typ:13,pad:[0,7,9,15],page:41,pair:[2,13,45],pairwis:[1,10,13],palett:41,paper:[4,31],paramet:[0,1,5,6,7,8,9,10,14,15,17,41,45],parent:[17,29],part:[36,41,46],partial:41,particular:[6,19,24,29,31,45],pass:[6,8,10,29,45],past:10,patch:31,path:[6,41],pattern:[1,7,12,45],peopl:44,per:[6,10,14,15,45],percent:41,perform:[6,8,10,14,15,39,45],permut:2,physic:[1,2,3,7,13],pick:41,pipe:45,pix_buff:13,pix_it:13,pixel1:13,pixel2:13,pixel:[0,1,2,3,4,5,6,8,9,11,16,17,24,32,33,34,39,42,46],pixel_2d_locator_bas:15,pixel_bit_s:44,pixel_refer:12,pixel_reference_typ:12,pixel_value_typ:12,pixelbasedconcept:[12,13,14,45],pixelconcept:[4,7,8,10,12,13,14,15],pixelconvertibleconcept:13,pixeldata:14,pixeldereferenceadaptorconcept:[8,10,14,15,45],pixeliteratorconcept:[10,12,14,15],pixellocatorconcept:[10,15],pixelrefer:12,pixelscompatibleconcept:[10,13],pixelvalueconcept:[8,9,10,13,14,15],place:[19,45],plain:14,plan:40,planar:[0,2,6,7,9,10,12,13,14,15,17,41,42,45,46],planar_pixel_iter:[14,15],planar_pixel_refer:[13,17],planar_rgb_view:[10,45],plane:[0,7,10,32,45],platform:[15,39],pleas:[31,41],plot:32,plu:15,png:[33,34],png_lib:41,png_tag:[33,34],png_test_fil:41,png_wiki:41,pnm_wiki:41,point2dconcept:[15,16],point:[0,1,6,10,11,12,13,15,31,39,41,42,45],point_t:[6,9,10,15,41,45],point_typ:10,pointer:[1,7,8,10,13,14,15,41,42,45],pointndconcept:[10,15,16],polici:[0,10,46],popular:40,posit:[14,15,45],position_iter:14,possibl:[6,10,13,41,45],potenti:[0,41],pow:45,power:[6,7,31,45],practic:[6,45],pre:45,precis:1,prefer:[18,22,41],prefix:2,presenc:0,present:[45,46,47],pretend:14,preval:36,previou:[0,6],previous:[10,45],price:12,primari:36,privat:[8,10,15,41,45],probabl:41,problem:[12,17,45],process:[0,10,25,35,36,38,39,45],processor:45,produc:32,product:[45,46],profil:8,program:[4,41,45,46],project:[0,38,40],propag:[10,45],proper:45,properli:[1,2,7,8,41,45],properti:[12,13,39,45],propos:4,provid:[0,1,2,3,5,6,8,9,10,12,13,14,15,16,17,20,22,29,32,41,44,45,46],provis:22,proxi:[1,2,13],ptr:7,ptrdiff_t:[6,10,14,15,45],pull:14,purpos:[13,20],put:[32,45],quadrant:46,qualifi:17,qualiti:[8,41],queri:45,r565:13,rais:45,random:[3,14,15,45],randomaccess2dimageconcept:9,randomaccess2dimageviewconcept:10,randomaccess2dlocatorconcept:15,randomaccessndimageconcept:9,randomaccessndimageviewconcept:10,randomaccessndlocatorconcept:[10,15],randomaccesstraversalconcept:[10,14,15],randomaccesstraversaliteratorconcept:14,rang:[1,2,9,10,29,33,45],rare:[9,45],rather:41,raw:[5,15,45],raw_wiki:41,rbegin:10,rbg323:41,rdbuf:41,read:[0,8,10,12,13,14,15,18,45],read_and_convert_imag:41,read_and_convert_view:41,read_imag:[33,34,41],read_image_info:41,read_view:41,read_xxx:41,reader:[41,45],reader_bas:41,reader_t:41,readm:40,real:[17,45],realiz:45,reason:33,rebind:14,recommend:[0,27,41],recreat:[6,7,9],rectangular:[10,45],recurs:[2,14,45],red:[0,1,2,7,13,14,17,24,29],red_in_cmyk16:13,red_in_rgb8:13,red_t:[2,3,13],redefin:8,ref2:7,ref:[7,13],ref_imag:34,ref_img:34,refer:[1,2,7,8,10,12,13,14,15,31,34,39,41,42,45],refin:16,regardless:45,region:[37,39,45],regist:45,regular:[1,2,4,9,10,13,15,16],rel:[15,45],relat:[4,12,45],releas:[27,38],relev:[29,41],remain:8,rememb:[15,17],remov:[41,45,46],remove_refer:14,rend:10,repeat:15,replac:[12,20],repositori:[27,40],repres:[0,15,17,41,45],represent:[0,5,39,45],reqd:24,request:41,requir:[1,2,4,6,8,9,10,13,14,15,24,39,40,41,45],resampl:10,rescal:39,research:36,resembl:[6,10],resid:45,resiz:[10,39],resolut:[5,6],respect:[7,13,45],respons:31,rest:[12,45],restrict:41,result:[0,2,5,6,7,8,10,12,13,14,15,31,40,41,45],result_typ:[4,6,8,10,14,45],result_view_t:6,reus:45,reverse_iter:10,review:[41,44],rewrit:45,rewritten:46,rgb16:41,rgb16_image_t:[10,45],rgb16c_planar_view_t:45,rgb222:45,rgb32f_planar_step_ptr_t:[12,42],rgb32f_planar_view_t:7,rgb32fc_view_t:45,rgb32s_pixel_t:45,rgb32s_view_t:45,rgb565:13,rgb565_channel0_t:13,rgb565_channel1_t:13,rgb565_channel2_t:13,rgb565_pixel_t:13,rgb64_image_t:8,rgb64_pixel:8,rgb64_pixel_ptr_t:8,rgb64_pixel_t:8,rgb8:[13,41],rgb8_image_t:[6,18,24,29,41,45],rgb8_pixel_t:[7,13,45],rgb8_planar_ptr_t:14,rgb8_planar_ref_t:[7,13],rgb8_planar_view_t:12,rgb8_ptr_t:10,rgb8_step_view_t:6,rgb8_view_t:[6,7],rgb8c_planar_ptr_t:[7,14],rgb8c_planar_ref_t:[7,13],rgb8c_ptr_t:10,rgb8c_view_t:[6,45],rgb:[0,1,2,7,8,10,12,13,14,24,29,33,34,41,42,45,46],rgb_channel_t:7,rgb_cs_t:7,rgb_full:13,rgb_layout_t:[7,8,13],rgb_planar_pixel_iter:17,rgb_t:[3,7,13,14],rgba16:41,rgba8:41,rgba8_image_t:41,rgba:[0,3,12,42,44],rgba_layout_t:[3,7],rgba_t:3,rgbpixel:7,rgbtograi:46,right:[7,10,14,15,34,45],rise:15,rotat:[6,10,45],rotated180_view:[6,7,10],rotated180_view_fn:6,rotated90ccw_view:[10,45],rotated90cw_view:[10,45],routin:[20,27],row:[0,7,9,10,13,14,15,41,45,46],row_begin:[10,45],row_end:10,rowsiz:10,rpv32:7,rule:40,run:[0,1,5,6,7,10,38,39],runtim:6,runtime_imag:[41,45],rview:10,said:6,sake:10,same:[1,2,3,6,7,8,10,13,15,16,31,32,34,41,45],sametyp:[1,2,4,10,13,14,16],sampl:[15,39,41,45,46],satisfi:[2,4,9,10,15,45],sav:6,save:[6,41,45],save_180rot:6,scale:45,scanlin:41,scanline_read:41,scanline_read_iter:41,scenario:[2,33,45],schaffalitzki:31,scharr:32,scharrx:32,schmid:31,scoped_channel_valu:1,sean:17,second:[0,1,7,13,15,17,31,41,45,46],second_argument_typ:10,section:[0,2,10,11,21,25,35,37,41,44],see:[2,4,8,10,14,15,40,41,45],seek:41,select:[6,40],semant:[2,3,13,45],semantic_at_c:[2,7,13],send:41,sensor:34,separ:[0,8,10,31,45],sequenc:[1,3],serv:41,servic:40,set:[0,1,3,4,6,7,8,9,10,13,14,15,41,45],set_step:14,sever:[5,14,41,45],shallow:[6,7,10,14,17,45],shape:32,share:[6,13,41],sharper:32,she:41,shift:1,ship:27,shortli:46,should:[6,15,18,19,22,31,33,40,41,45],show:[7,41,45],shown:[7,33,34,45],side:45,sigma:32,sign:[12,42,45],signific:[10,36],similar:[1,10,14,15,39,41,45],similarli:[9,14],simpl:[12,15,24,32,33,41,45,46],simpler:[31,41,46],simplest:[24,32,45],simpli:[7,8,15,31,32,45],simplic:45,simplifi:[7,31,45],simultan:45,sinc:[6,7,13,14,18,19,27,29,33,34,41,44,45,46],singl:[6,10,14,32,41,45],size1:12,size2:12,size3:12,size4:12,size5:12,size:[2,6,7,10,13,14,15,41,45],size_t:[2,6,9,10,13,15,16,20],size_typ:[6,10],sizeof:13,skeleton:41,skip:[10,14,45,46],slightli:[8,45],slow:45,slower:[15,45],small:[31,41,44],smaller:[7,19],sobel:32,softwar:46,solut:17,some:[0,4,6,7,8,10,12,13,14,15,17,36,41,45],sometim:[1,10,13,14,15,17,41,45],somewher:8,soon:41,sort:[19,32],sourc:[1,6,7,8,10,18,40,41,42,45,46,47],space:[0,2,5,6,7,10,11,13,14,33,34,39,41,44,45,46],special:[8,13,34,42,45],specif:[0,5,39,41,45],specifi:[0,1,3,5,6,8,9,12,14,33,34,39,41],speed:[0,5,6,10,45],spirit:15,spread:33,springer:31,sr8wjg0pcee:47,src1:10,src1_it:45,src2:10,src2_it:45,src:[1,2,6,7,8,10,41,45],src_b:45,src_g:45,src_it:45,src_loc:45,src_pix_ref:8,src_pixel:45,src_r:45,src_row_byt:45,srcchannel:1,srccolorspac:8,srcconstrefp:8,srcp:8,srcpixel:13,srcview:[7,8,10,45],srowbyt:46,stabl:31,stage:10,standalon:44,standard:[3,4,10,12,14,15,20,33,34],start:[10,13,15,41,45],state:10,statement:[6,45],static_:2,static_assert:[6,7,12,13],static_copi:2,static_equ:2,static_fil:[2,7,45],static_for_each:[2,45],static_gener:[2,45],static_max:2,static_min:2,static_transform:[2,14,45],std:[1,2,6,7,9,10,12,13,14,15,17,18,20,21,22,24,27,29,39,41,45,46],step1:7,step2:7,step3:7,step4:7,step5:7,step:[6,10,12,15,37,42,45],step_iterator_t:12,stepanov:17,stephen:31,stepiter:15,stepiteratorconcept:[14,15],still:45,stl:[2,5,6,9,15,17,25,27,39],stlab:10,store:[6,7,15,19,24,41,45],straightforward:[10,41],stream:41,strength:32,stretch:[32,36],string:[6,18,41],stringstream:41,strip:41,strongli:41,struct:[1,2,3,6,8,10,12,13,14,15,16,17,20,41,45],structur:[0,6,10,11,31,37,39,45],studio:45,sub:[1,17,20,25,27,39,41,44],sub_h:29,sub_histogram:29,subclass:[6,14,15],subimag:45,subimage_view:[7,10,41,45,46],subject:41,suboptim:45,subsampl:[10,14,45],subsampled_view:[7,10,45,46],subset:29,substitut:4,successfulli:40,succinct:10,suffici:[15,40],suffix:42,suggest:[17,44],suit:[36,41],suitabl:[27,45],sum:31,summer:38,suppli:[8,10,14,15,22,41],support:[0,1,6,7,8,10,12,14,22,27,39,40,45,46],supported_image_format:41,suppos:[6,7,8,45],sure:41,swap:[4,15,17],swappabl:[1,2,4],symmetr:13,synopsi:[10,15],syntact:4,syntax:[4,18,33,34],synthet:[8,39,45],system:[41,45],tabl:[11,21,25,35,37,41],tag:[41,42],tag_t:41,take:[2,6,7,8,9,10,14,15,17,19,41,45,46],taken:[33,34,45],targa_wiki:41,target:[5,41,45],task:[24,29,45],technic:[11,39],techniqu:[6,34,41],tell:40,templat:[1,2,3,4,6,7,8,9,10,12,13,14,15,16,17,41,45,46],temporari:[17,45],term:[16,31],test:[20,22,39,40,42],test_imag:41,text:41,than:[2,6,7,13,14,15,18,19,41,45],thank:[41,44],thei:[1,2,3,5,6,7,8,10,12,13,14,15,31,32,45],them:[1,4,6,9,10,12,13,41,45],therefor:1,thi:[0,1,2,4,6,7,8,10,12,13,14,15,17,18,24,31,32,34,36,41,42,44,45,46,47],thing:[7,32,41],think:45,third:41,thorough:41,those:[13,32],though:[6,7,32,45],three:[1,13,14,31,32,45],threshold:31,through:[7,15,41,45],thrown:45,thu:[1,2,3,8,15,33],tif:41,tiff_base_tag:41,tiff_extension_tag:41,tiff_graphicsmagick_test_fil:41,tiff_lib:41,tiff_lib_tiff_test_fil:41,tiff_t:41,tiff_tag:41,tiff_wiki:41,tile:41,time:[0,1,2,5,6,7,8,10,14,27,39],timor:31,tinn:31,tip:19,tmp:[14,17],todo:[18,26,28,30,43],togeth:[0,3,13,45],toll:[6,45],too:[36,44],toolbox:[39,41],top:[0,7,10,12,15,27,41,45,46],top_left:10,total:[10,15],trace:31,track:[10,14,45],transform:[1,2,6,8,10,31,33,34,39],transform_pixel:[10,45],transform_pixel_posit:[10,45],transpos:[10,15,45],transposed_typ:[10,15],transposed_view:10,travers:[9,10,14,15,41,42,45],treat:[6,45],tricki:17,trickier:45,trigger:[6,45],trivial:42,troubl:41,tupl:[24,29],turn:6,tutori:[8,10,15,39],tuytelaar:31,tweak:32,twice:45,two:[0,1,2,3,6,7,9,10,13,14,15,16,31,32,34,38,41,45],type1:18,type2:18,type3:18,type:[0,1,2,3,4,5,6,7,9,10,13,14,15,16,17,18,20,22,39,41,44,45,46],type_from_x_iter:12,typedef:[1,6,7,8,10,12,13,14,17,41,45],typen:18,typenam:[1,2,3,4,6,7,8,9,10,12,13,14,15,16,17,41,45,46],typic:[1,6,8,10],ud_fud:10,uint16_t:[1,13],uint8_t:[1,31,46],unari:[14,45],unary_compos:14,unary_funct:14,unaryfunctionconcept:[10,14],unchang:45,unclear:15,under:[31,34,41],underli:[6,10,14,41],understand:[1,31,32,41],unfamiliar:45,unfortun:45,uniform:34,uniformli:[6,33],uninitialized_copi:10,uninitialized_copy_pixel:10,uninitialized_fil:10,uninitialized_fill_pixel:10,uniqu:3,unit:[14,15,41],unless:[32,41],unlik:[9,13],unnam:3,unnecessari:[7,13,45],unordered_map:[22,23,27],unpack:13,unrel:46,unrol:45,unset:10,unsign:[6,7,9,10,12,13,14,42,45],unspecifi:4,until:31,unus:[13,45],unusu:45,upon:[6,8,10,12,14,15,17],upper:46,upsid:[6,10],usag:[20,21,32,33,34,41],use:[1,2,4,7,8,10,12,13,15,17,22,24,32,34,40,41,45],use_default:12,used:[2,3,4,5,6,7,9,13,14,15,16,20,25,31,32,35,41,42,45],useful:[8,9,14,15,45],user:[0,4,8,10,15,41,44,45],uses:[2,6,10,12,14,15,16,20,41,45],using:[1,2,3,6,7,8,9,10,12,13,15,20,24,29,39,41,45,46],using_io:41,usual:[14,31,32,41],util:[25,39],val:10,valid:[1,10,45],valu:[0,1,2,3,6,7,8,9,10,12,13,14,15,16,17,24,29,31,32,33,34,41,42,45],value_typ:[1,8,9,10,13,14,15,16,41,45],valueless:6,van:31,vari:[0,3,45],variabl:[0,45,46],variant2:[6,45],variant:[6,41,45],variat:[0,41],varieti:[39,45],variou:41,vector:[22,23,33,34,45],veri:[9,12,31,45,46],version:[10,14,15,19,40,41,46],vertic:[12,14,15,32,45],via:[6,10],video:[0,39,45],view1:10,view2:10,view:[5,9,11,13,14,15,18,23,24,29,33,34,39,41,42,46],view_is_mut:12,view_t:[6,7,9,10,12,41],view_typ:12,view_type_from_pixel:12,viewer:41,viewscompatibleconcept:[7,10],viewtyp:6,virtual:[5,8,12,14,15,41],virtual_2d_loc:[15,45],vision:[0,31],visit:[6,10,15,45],visual:[36,45],vol:31,wai:[2,13,17,18,32,41,42,45],walk:[41,45],want:[7,8,14,15,18,41,45],warn:45,watch:47,web:4,websit:41,weight:[31,37],well:[2,13,19,36,41,45],were:[38,45],what:[6,32,37,41,45],when:[2,7,8,9,10,14,15,17,18,31,32,34,41,45],where:[1,2,7,9,10,12,13,14,15,16,18,40,41,42,45],wherea:[0,2,6,32,41,45],whether:[1,10,12,14,15,45],which:[0,1,2,3,6,7,8,9,10,12,14,15,16,19,24,32,33,40,41,42,44,45],who:44,whose:[0,2,10,12,13,14,29,39,45],why:[33,45],width:[6,7,9,10,15,33,34,45,46],window:[31,41],within:10,without:31,word:[0,9,10,14,32,45],work:[0,5,6,7,8,10,13,17,31,39,45,46],workflow:22,worth:[7,41,45],would:[0,6,14,18,29,32,33,34,41,45],wrap:[6,10,14],wrapper:[14,15],write:[0,5,6,7,10,17,39,45],write_view:41,writer:41,written:[15,32,41,45,46],wstring:41,www:47,x_at:[10,15],x_coord_t:[6,9,10,15],x_diff:15,x_gradient:[39,45],x_gradient_obj:45,x_gradient_rgb_luminos:45,x_gradient_unguard:45,x_iter:[9,10,13,15,41,45],x_luminosity_gradi:45,x_min:45,xbm:41,xgradientgray16_gray32:45,xgradientplanarrgb8_rgb32:45,xgradientrgb8_bgr16:45,xiter:[12,15],xpm:41,xxx:41,xxx_all:41,xxx_and_convert_xxx:41,xxx_read:41,xxx_tag:41,xxx_write:41,xy_at:[10,15,45],xy_loc:[10,45],xy_locator_t:12,xyz:44,y_at:[10,15],y_coord_t:[6,9,10,15],y_distance_to:15,y_gradient:45,y_iter:[10,15,45],y_min:45,ycbcr:[33,34,41],ycck:41,yellow:31,yet:[0,27,41,45],you:[7,8,12,17,19,20,24,27,41,45],your:[8,17,20,39,40,41,45],your_imag:[33,34],your_ref_imag:34,yourself:41,youtub:47,zero:[13,31,45],zisserman:31,zlib:41},titles:["Basics","Channel","Color Base","Color Space and Layout","Concepts","Conclusions","Dynamic images and image views","Examples","Extending","Image","Image View","Design Guide","Metafunctions","Pixel","Pixel Iterator","Pixel Locator","Point","Technicalities","Create a histogram","Making a cumulative histogram","Extending the class","Extensions","Overview","STD extension","Fill histogram","Histogram","Limitations","Overview","STL compatibility","Making a sub-histogram","Utilities","Affine region detectors","Basics","Histogram Equalization","Histogram Matching","Contrast Enhancement","Overview","Image Processing","Overview","Boost Generic Image Library","Installation","IO extensions","Naming Conventions","Numeric extension","ToolBox extension","Tutorial: Image Gradient","Tutorial: Histogram","Tutorial: Video Lecture"],titleterms:{"class":20,"new":[8,41],Adding:22,And:41,Axes:20,Using:[7,41,45],acknowledg:44,adaptor:14,advanc:24,affin:31,algorithm:[1,2,10,13,31,33,34,45],align:12,avail:31,base:[2,12],basic:[0,24,32],being:31,bit:12,bmp:41,boost:39,buffer:41,canva:7,channel:[1,8],code:45,color:[2,3,8,45],compat:[5,28],compil:[40,41],compon:12,concept:4,conclus:[5,45],concret:42,contain:22,contrast:35,convent:42,convers:[8,45],convolut:32,core:39,creat:[10,17,18,45],cumul:19,curvatur:32,defin:[8,20],demo:[33,34],derefer:14,deriv:[12,32],descript:[22,27,33,34],design:11,detect:31,detector:31,document:39,dynam:6,enhanc:35,equal:33,equival:45,exampl:[7,39],exist:12,extend:[8,20,41],extens:[5,21,22,23,39,41,43,44],extern:22,fill:24,filter:32,first:45,flexibl:5,folder:44,format:41,from:10,fundament:14,gener:[5,39,41,45],gil:[41,45,46],glue:45,gradient:45,guid:11,harri:31,hessian:31,histogram:[7,18,19,24,25,29,33,34,46],homogen:12,imag:[6,7,8,9,10,12,15,37,39,41,45],implement:[45,46],instal:40,interfac:[41,45],iter:[12,14,15,45],jpeg:41,kernel:32,layout:3,lectur:47,level:7,librari:39,limit:26,locat:[15,45],make:[19,29],manipul:12,match:34,memori:[12,41],metafunct:12,model:[1,2,3,9,10,13,14,15,16],name:42,numer:43,oper:7,origin:46,other:10,over:15,overload:8,overview:[1,2,3,8,9,10,12,13,14,15,16,19,22,24,27,29,36,38,41,43,44],pack:12,perform:5,pixel:[7,10,12,13,14,15,45],platform:41,png:41,pnm:41,point:16,process:37,proxi:17,quickstart:39,raw:[10,41],read:41,refer:[17,44],region:31,resiz:7,result:[33,34],run:[41,45],space:[3,8],specifi:45,std:23,step:[14,31],stl:[10,28,45],structur:44,style:10,sub:29,support:[23,41],symbol:41,targa:41,technic:17,test:41,tiff:41,time:45,toolbox:44,trait:12,transform:45,tutori:[27,41,45,46,47],type:[8,12,23,42],usag:23,user:20,util:30,version:45,video:47,view:[6,7,8,10,12,45],virtual:45,weight:32,what:31,write:41}}) \ No newline at end of file +Search.setIndex({docnames:["design/basics","design/channel","design/color_base","design/color_space","design/concepts","design/conclusions","design/dynamic_image","design/examples","design/extending","design/image","design/image_view","design/index","design/metafunctions","design/pixel","design/pixel_iterator","design/pixel_locator","design/point","design/technicalities","histogram/create","histogram/cumulative","histogram/extend","histogram/extension/index","histogram/extension/overview","histogram/extension/std","histogram/fill","histogram/index","histogram/limitations","histogram/overview","histogram/stl_compatibility","histogram/subhistogram","histogram/utilities","image_processing/affine-region-detectors","image_processing/basics","image_processing/contrast_enhancement/histogram_equalization","image_processing/contrast_enhancement/histogram_matching","image_processing/contrast_enhancement/index","image_processing/contrast_enhancement/overview","image_processing/index","image_processing/overview","index","installation","io","naming","numeric","toolbox","tutorial/gradient","tutorial/histogram","tutorial/video"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["design/basics.rst","design/channel.rst","design/color_base.rst","design/color_space.rst","design/concepts.rst","design/conclusions.rst","design/dynamic_image.rst","design/examples.rst","design/extending.rst","design/image.rst","design/image_view.rst","design/index.rst","design/metafunctions.rst","design/pixel.rst","design/pixel_iterator.rst","design/pixel_locator.rst","design/point.rst","design/technicalities.rst","histogram/create.rst","histogram/cumulative.rst","histogram/extend.rst","histogram/extension/index.rst","histogram/extension/overview.rst","histogram/extension/std.rst","histogram/fill.rst","histogram/index.rst","histogram/limitations.rst","histogram/overview.rst","histogram/stl_compatibility.rst","histogram/subhistogram.rst","histogram/utilities.rst","image_processing/affine-region-detectors.rst","image_processing/basics.rst","image_processing/contrast_enhancement/histogram_equalization.rst","image_processing/contrast_enhancement/histogram_matching.rst","image_processing/contrast_enhancement/index.rst","image_processing/contrast_enhancement/overview.rst","image_processing/index.rst","image_processing/overview.rst","index.rst","installation.rst","io.rst","naming.rst","numeric.rst","toolbox.rst","tutorial/gradient.rst","tutorial/histogram.rst","tutorial/video.rst"],objects:{},objnames:{},objtypes:{},terms:{"0rrgggbb":13,"0x06":13,"0x0c":13,"0x11":13,"0x30":13,"0x60":13,"0x83":13,"0xc1":13,"1000s":31,"100s":31,"100x100":7,"200x200":45,"4x3":0,"50x50":10,"abstract":[0,5,10,39,45],"boolean":[12,45],"byte":[1,9,10,13,14,15,17,39,45],"case":[2,5,7,8,10,12,13,15,19,20,31,33,34,41,45],"char":[7,9,10,12,13,14,41,45],"class":[1,2,4,6,8,9,10,12,13,14,15,17,19,22,24,25,27,29,39,41,45],"const":[1,2,6,7,8,9,10,12,13,14,15,16,17,20,24,41,42,45,46],"default":[1,3,6,7,8,9,10,12,14,17,20,22,42,45],"final":[2,7,8,45],"float":[1,7,12,18,19,41,42,45],"function":[2,6,8,10,12,14,15,17,19,20,25,29,31,39,41,45,46],"import":[6,9,17,41],"int":[1,2,3,7,10,13,15,18,19,20,23,24,29,41,45,46],"long":[4,7,8,10,12,45],"new":[5,22,45,46],"public":[6,8,10,14,15,41],"return":[1,2,4,6,7,8,10,12,13,14,15,17,20,29,41,45],"short":[12,41,45,46],"static":[1,2,6,7,8,10,13,14,15,45],"switch":[6,45],"throw":6,"true":[1,2,12,13,14,15,33,34,45],"try":[7,27,33,34,41,45],"var":[7,46],"void":[2,4,6,7,8,9,10,13,14,17,41,45,46],"while":[0,1,3,13,15,36,45],And:18,But:41,For:[1,2,3,4,6,7,8,10,12,13,14,15,20,31,33,34,40,41,42,45,46],Its:[1,2,13,14,45],Not:7,One:[15,17,31,33,34,41,45],Such:[1,6,15,45],That:[6,45],The:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,17,19,21,22,25,27,31,32,33,34,35,37,38,39,40,41,42,44,45,46],Their:[6,15,45],Then:[15,33,34,45],There:[0,2,6,12,18,32,41,45],These:[2,12,13,22,36,45],Use:[17,24,41],Using:[10,12,15,18,39,46],_bmp_test_fil:41,_concept_:45,_dimens:10,_dst:45,_height:41,_imag:[12,42],_img_siz:45,_info:41,_io_dev:41,_is_:12,_loc:[12,42],_pixel:[10,12,42],_planar:[12,42],_png_test_fil:41,_ptr:[12,42],_ref:[12,42],_scanline_length:41,_step:[12,42],_tiff_graphicsmagick_test_fil:41,_tiff_lib_tiff_test_fil:41,_variants_:45,_view:[12,42],_width:[15,41],abbrevi:45,abgr_layout_t:3,abil:[19,41],abl:[14,41],about:[4,8,15,32,45,47],abov:[0,2,7,10,13,14,15,17,31,32,41,45,46],abraham:17,access:[1,2,3,6,7,8,13,15,41,45],accessor:[2,16],accordingli:8,account:7,achiev:[32,33],acknowledg:39,actual:[8,40,46],adapt:1,adaptor:[8,10,15],add:[6,8,15,22,24,41],add_deref:[8,10,15],add_ref_t:8,added:44,adding:[7,41],addit:[1,2,4,6,9,10,14,15,45],addition:45,address:[0,12,13],adjac:[10,14,45],adob:10,advanc:[10,14,15,41,45],advantag:[45,46],advis:41,affin:[37,39],after:[2,22,45],again:[15,31],against:[17,40],ahe:36,alex:17,algorithm:[0,4,5,6,7,8,9,14,15,17,25,27,35,36,37,38,39],align:[0,6,9,10,13,14,39,45,46],all:[0,1,2,3,4,6,7,8,10,13,14,15,17,19,31,41,44,45],alloc:[7,9,10,12,41,45,46],allocator_typ:9,allow:[0,1,2,5,6,8,9,10,12,13,14,15,17,39,41,45],alon:32,along:[10,12,14,15,16,45],alpha:[0,44],alpha_t:3,alreadi:[12,13,41,45],also:[0,1,2,3,7,10,12,13,14,15,16,18,22,24,33,36,41,45,46],altern:[18,45],although:33,alvei:31,alwai:[13,17,42,45],among:19,amount:[14,15],analog:13,analysi:[12,37],andrew:31,angl:29,ani:[0,2,5,6,7,8,10,12,14,15,27,29,31,32,40,45,46],anoth:[1,2,5,6,8,10,13,14,24,32,41,45],another_iter:14,any_imag:[6,41,45],any_image_view:[6,45],any_pixel:[6,45],any_pixel_iter:[6,45],anyth:[8,14,41],apart:22,api:39,append:12,appendix:45,appli:[0,1,14,32,33,34,39,41,45],applic:[36,41,45],appropri:[1,6,41],approxim:[13,14,45],arbitrari:[8,14,20,45],area:[7,10,41],aren:41,argb_layout_t:3,argument:[6,14,45],argument_typ:[8,10,45],aris:[17,24],arithmet:[1,32],around:[7,14,15,41],arrai:[0,14,15,22,23,32],ascii:41,assembl:45,assert:[1,7,13,45],assert_sam:6,assign:[1,2,4,6,9,13,17,24,45],assignableconcept:14,associ:[1,2,3,6,12,45],assum:[31,45],at_c:[2,13],atom:45,author:41,auto:[4,18,19,29,41],automat:41,avail:[6,10,15,22,24,37,41,45],averag:15,avoid:45,awai:[10,14],axes:[18,20,27,29],axi:[10,15,16,18,20,29,32,45],axis1:18,axis2:18,axis3:18,axis:32,axis_iter:[10,15],axis_valu:16,b16:7,back:[6,10,45],backend:41,backend_t:41,backward:42,bad_cast:6,base:[1,6,10,11,13,14,15,17,39,41,45,46],basic:[4,11,12,31,37,39,41],beauti:36,becam:41,becaus:[1,6,9,10,12,13,15,31,45],been:[5,34,41,45,46],befor:[19,20,24,33,34,41],begin:[7,10,41,45,46],behav:6,being:[12,37,41],belong:44,below:[11,14,15,21,25,31,33,34,35,37,41,45],berlin:31,besid:[3,41],beta:10,better:45,between:[1,6,8,10,13,14,29,33,34,45],bgr16_view_t:7,bgr16s_pixel_t:45,bgr16s_view_t:45,bgr232:13,bgr232_pixel_t:13,bgr232_ptr_t:13,bgr232_ref_t:13,bgr556:13,bgr556_pixel_t:13,bgr8:13,bgr8_image_t:[12,42],bgr8_pixel_t:[7,13],bgr8_view_t:6,bgr:[0,2,7,12,13,42,45,46],bgr_layout_t:[3,13],bgra_layout_t:3,big:[31,41],biggest:45,bilinear:39,bin:[7,19,24,27,29,33,34],binari:[41,45],binaryfunctionconcept:10,bit:[0,1,2,7,8,9,10,13,14,15,41,42,45,46],bit_align:13,bit_aligned_image1_typ:12,bit_aligned_image2_typ:12,bit_aligned_image3_typ:12,bit_aligned_image4_typ:12,bit_aligned_image5_typ:12,bit_aligned_image_typ:12,bit_aligned_pixel_iter:[13,14],bit_aligned_pixel_refer:13,bitdepth:[12,42],bitfield:12,bitmask:39,bits16:1,bits32f:1,bits8:[7,10,13,14,45],bitwis:10,block:[10,45],blue:[2,7,13,17,24,29],blue_t:[2,3,7,13],blur:[31,39],bmp_filenam:41,bmp_test_fil:41,bmp_wiki:41,bodi:45,bool:[1,2,4,6,8,9,10,12,13,14,15,20,33,34,45],boost:[3,6,7,10,12,14,20,22,38,40,41,44,45,46],boost_check_equ:41,boost_concept:14,boost_gil_extension_io_jpeg_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_png_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_tiff_c_lib_compiled_as_cplusplu:41,boost_gil_extension_io_zlib_c_lib_compiled_as_cplusplu:41,boost_gil_io_enable_gray_alpha:41,boost_gil_io_png_1_4_or_low:41,boost_gil_io_png_dithering_support:41,boost_gil_io_png_fixed_point_support:41,boost_gil_io_png_floating_point_support:41,boost_gil_io_test_allow_reading_imag:41,boost_gil_io_test_allow_writing_imag:41,boost_gil_io_use_bmp_test_suite_imag:41,boost_gil_io_use_boost_filesystem:41,boost_gil_io_use_png_test_suite_imag:41,boost_gil_io_use_pnm_test_suite_imag:41,boost_gil_io_use_tiff_graphicsmagick_test_suite_imag:41,boost_gil_io_use_tiff_libtiff_test_suite_imag:41,boost_gil_use_concept_check:[10,45],boost_mpl_assert:13,boostorg:40,border:7,both:[0,6,7,13,15,16,31,34,41,45,46],bottom:[0,10,15,45],bound:[6,13],boundari:45,bourdev:47,brace:24,bracket:29,branch:40,bring:[33,34],buffer:[7,13,45],build:[0,40,41],built:[1,7,12,13,14,27,40,45],byte_to_memunit:14,c_str:41,cach:[15,45],cache_loc:[15,45],cached_location_t:[15,45],calcul:[19,33,34,46],call:[6,7,8,10,13,17,19,31,41,45,46],can:[2,4,5,6,7,8,9,10,12,13,14,15,16,17,24,27,31,32,39,40,41,45,46],cannot:[7,10,32,45],canon:[13,45],capabl:41,captur:3,care:[8,33],carriag:[15,45],cast:45,cater:24,caus:[31,45],caution:6,cav:6,cb1:2,cb2:2,cb3:2,cc_t:41,ccv:10,ccv_imag:45,cell:24,center:[7,32],centerimg:7,central:45,certain:32,challeng:[0,45],chan16:1,chang:[6,8,10,12,14,22,31,41,45,46],channel16_0_5_reference_t:1,channel16_11_5_reference_t:1,channel16_5_6_reference_t:1,channel1:1,channel2:1,channel3:1,channel:[0,2,3,5,6,7,10,11,12,13,14,17,24,29,32,33,34,39,41,42,45,46],channel_6bit:1,channel_convert:[1,7,8,13,45],channel_convert_to_unsign:45,channel_invert:[1,8],channel_mapping_t:3,channel_mapping_typ:[12,13,45],channel_multipli:1,channel_t:45,channel_trait:[1,8],channel_typ:[7,12,13,44,45],channel_type_to_index:44,channelbitsizevector:12,channelconcept:[1,13],channelconvertibleconcept:1,channelmap:3,channelmappingconcept:[3,13],channelptr:14,channelrefer:13,channelrefvec:14,channelscompatibleconcept:[1,13],channelvalu:[12,13,14],channelvalueconcept:[1,12],check:[6,7,10,15,29,40,45],choic:[15,31],choos:15,chose:7,christoph:31,chunki:45,claim:41,classtyp:[12,42],clear:[24,32,41],client:40,clockwis:45,clone:27,close:41,closer:45,cmake:22,cmyk16_pixel_t:[12,13,42],cmyk16_planar_image_t:6,cmyk16_planar_step_view_t:6,cmyk16_planar_view_t:6,cmyk16c_planar_ref_t:42,cmyk16c_planar_view_t:6,cmyk16sc_planar_ref_t:12,cmyk8_image_t:41,cmyk:[0,12,42],cmyk_t:3,cmyka:44,code:[0,5,6,7,8,10,15,20,38,39,40,41,42,46],col:46,col_begin:10,col_end:10,collect:[6,44],color:[0,1,5,6,7,10,11,12,13,14,15,29,33,34,39,41,42,44,46],color_bas:2,color_const_reference_t:2,color_convert:[8,13,44],color_convert_deref_fn:[8,14],color_convert_view:8,color_converted_view:[7,8,10,45,46],color_converted_view_typ:[8,10],color_converter_typ:41,color_reference_t:2,color_spac:44,color_space_t:[2,3],color_space_typ:[7,8,12,13,45],colorbas:2,colorbaseconcept:[2,13],colorbasescompatibleconcept:[2,13],colorbasevalueconcept:2,colorconvert:10,colorspac:[3,12,13,14,42],colorspace1:3,colorspace2:3,colorspaceconcept:[3,13],colorspacescompatibleconcept:[2,3,45],column:[14,15,45,46],com:[10,40,47],combin:[6,14,15,31,45],come:[12,41],commerci:46,common:[0,2,4,6,41],commonli:13,commun:44,compact:1,compactli:[7,45],compar:[0,1,2,5,6,7,45],comparison:[1,6,15,31],compat:[1,2,3,6,7,10,13,25,27,39,41,45],compil:[1,2,5,6,7,10,13,14,17,27,45],complement:5,complet:[40,41,45],complex:[6,7,13,15,24,31,45],complic:[8,9,17],compon:[0,1,42],compos:[10,14],comprehend:45,comprehens:45,compris:3,comput:[7,15,31,32,45,46],computexgradientgray8:45,concentr:33,concept:[0,1,2,5,8,9,10,11,13,14,15,16,31,32,39,45],concept_check:[10,45],concept_map:4,conceptc:4,conceptu:13,conclus:[11,39],concret:[6,45],condit:[15,31],confer:31,config:22,configur:[18,40],consid:[1,3,6,13,19,20,32,46],consist:[2,15,40,45],const_iterator_typ:14,const_point:1,const_refer:[1,8,10,13,14,45],const_t:[6,8,9,10,14,15,45],const_view:[9,45],const_view_t:[6,9],constant:[2,10,12,13,17,31,45],constexpr:[8,45],construct:[1,4,5,6,7,8,9,10,12,13,14,17,24,27,45],constructor:[1,6,7,9,17,18,24,45],consult:41,contain:[1,2,3,6,7,9,13,14,19,21,41,45],content:[11,21,25,35,37,44],context:[32,41],contigu:2,contrast:[33,36,37,39],conveni:8,convent:[39,45],convers:[1,13,14,15,27,41],conversionpolici:41,convert:[1,2,7,8,10,12,13,14,19,33,34,41,44,45],convolut:[10,37,39],convolv:[7,32],coord:45,coord_t:[9,10,15],coordin:[15,16,41,45],copi:[1,2,6,7,8,9,10,13,15,17,19,24,41,45,46],copy_and_convert_pixel:[10,45],copy_pixel:[6,7,10,41,45],copyabl:10,copyconstruct:[2,4],copyconstructibleconcept:14,cordelia:31,corner:[7,10,31,45],correct:45,correctli:[4,17],correspond:[1,2,5,8,10,14,18,32,33,34,45],cost:5,could:[6,7,10,14,15,18,32,41,45],count:[7,19],counter:45,counterpart:41,coupl:41,cours:[15,41],cout:[20,24],cover:[31,33],cpp:39,creat:[1,3,6,7,8,12,13,14,15,19,25,27,39,41],create_with_margin:7,cstddef:20,cumul:[25,27,33,34,39],cumulative_histogram:[19,23],curli:24,current:[3,6,14,15,22,40,41,45],curvatur:[31,37],custom:[1,10,15],d_channel_t:45,dark:36,data:[1,5,8,9,10,41,42,45],dave:17,deal:45,dealloc:45,debug:45,decent:41,declar:45,decrement:15,dedic:[11,21,25,35,37],deep:[6,9,17,45],deeper:31,default_color_convert:10,default_color_converter_impl:8,defaultconstruct:4,defaultconstructibleconcept:14,defin:[0,1,2,3,4,6,10,12,13,14,15,16,17,39,41,45],definit:[3,44],degrad:45,degre:45,delai:15,deleg:10,delet:9,demand:41,demo:[23,29],demonstr:[10,24,41,45],denot:[14,17,45],depend:[32,40,41],depth:[0,6,7,10,12,14,42,45,46],deref:[10,15],deref_compos:14,deref_t:8,derefer:[8,45],dereferenc:[7,8,10,12,14,15,17],dereference_iterator_adaptor:14,deriv:[10,31,37],derived_image_typ:[12,45],derived_iterator_typ:[12,45],derived_pixel_reference_typ:[12,45],derived_view_typ:[12,45],describ:[0,2,4,11,15,16,21,25,35,37,41],descript:[41,42],design:[0,2,5,39,41,45],desir:[29,33,45],despit:6,destin:[1,6,7,8,41,45],destroi:6,destructor:[9,45],det:31,detail:[2,6,14,41],detect:[37,41,45],detector:[37,39],determin:[14,15,31],develop:[10,38,40],devic:41,devicen_t:3,diagram:15,diff:14,differ:[1,6,13,14,15,17,31,32,34,41,45],difference_typ:[10,15],difficult:[0,45],dim:[6,9,45],dimens:[6,9,10,15,16,24,29,31,33,34,41,45],dimension:[7,9,10,15,16,45],direct:[12,14,15,31,32,41,45],directli:[7,13,15,17,18,24,41,45,46],directori:44,disadvantag:45,discrimin:31,discuss:0,disk:[6,8,45],dispatch:8,displai:41,distanc:[14,45],distinct:[1,13,31,45],distribut:[13,33],dither:41,divis:14,do_swap:6,doc:22,document:[0,4,21,25,32,35,37,41,45],doe:[1,7,10,12,17,40,45],doesn:[41,45],doing:[6,8,13],don:[6,8,9,10,12,13,15,36,45],done:[7,15,18,32,41,45],doubl:[8,45],down:[6,7,10],download:[10,40],draw:32,drawback:45,drive:41,dst:[1,2,7,8,10,41,45],dst_channel_t:45,dst_img:[33,34],dst_it:45,dst_pixel:45,dst_row_byt:45,dst_view:41,dstchannel:1,dstcolorspac:8,dstimag:7,dstp:[8,10],dstpixel:13,dstview:45,due:[13,24],dummi:29,duplic:46,dure:[27,38,41],dxdx:31,dxdy:31,dydi:31,dynam:[11,12,14,15,39,41],dynamic_at_c:[2,13],dynamic_imag:[6,39,45],dynamic_image_al:[6,45],dynamic_x_step_typ:[6,10,14],dynamic_xy_step_transposed_typ:10,dynamic_xy_step_typ:[6,10],dynamic_y_step_typ:[10,15],each:[0,2,7,8,10,13,15,16,19,33,34,41,45],earli:[10,45],easi:[41,45],easier:[10,18,45],easili:45,edg:[31,45],effect:[32,45],effici:[0,7,10,14,15,45,46],either:[6,7,8,10,14,34,41,45],element:[2,3,10,11,13,14,32,45],element_const_reference_typ:[2,13],element_recurs:2,element_reference_typ:[2,13],element_typ:2,els:[8,15],elsewher:19,email:41,enabl:41,encod:41,end:[0,7,9,10,15,41,45,46],enhanc:[33,36,37,39],enough:31,ensur:[10,45],entir:[33,45],enumer:[41,45],epipolar:38,equal:[1,2,3,6,10,13,15,34,36,45],equal_pixel:10,equalitycompar:[1,2,4],equival:[2,6,10,14,15],error:[1,6,7,10,17,45],especi:6,essenti:0,establish:42,etc:[0,6,10,13,22,33,34,40,41,45],european:31,evalu:[12,14],even:[6,7,8,41,45,46],ever:7,everi:[5,6,10,14,15,42,45,46],everyth:8,exact:32,exactli:13,exampl:[1,2,3,4,6,8,10,11,12,13,14,15,17,18,19,20,32,41,42,45,46],except:[2,6,8,10,14,15,40,45],exclud:45,execut:[6,45],exercis:45,exist:[5,7,8,19,41,46],expect:[34,41],expens:45,explan:[10,31,33,34,41],explicit:[6,13,45],explicitli:45,extend:[5,11,25,27,39,45],extending_gil__io_with_new_format:41,extens:[6,8,10,25,40,45,46],extern:[21,41],extra:[7,10,13,45,46],extract:45,extrem:31,eyes:36,fact:[41,45],factori:[8,10,45],fail:45,fall:[7,10],fals:[8,12,15,23,24,29,45],familiar:45,famou:34,far:45,fast:[10,15,45],faster:[1,5,9,15,45],fastest:7,featr:46,featur:[31,34,37,38,41,46],fetch:45,few:[24,29,33,34,36,41],fewer:29,file:[6,8,20,22,40,41,45],file_nam:6,filenam:41,filesystem:41,fill:[2,7,10,13,15,19,23,25,27,29,39,41,45],fill_histogram:[22,23,24,29],fill_pixel:[7,10,41],fill_valu:9,filter:[15,37],find:[15,40],first:[0,1,2,3,6,7,8,10,13,15,19,33,38,41],first_argument_typ:10,firstbit:1,fit:13,five:[3,5,12],flat:[32,33],flatten:33,flavour:41,flexibl:[1,6,12,46],flip:[10,14,45],flipped_left_right_view:10,flipped_up_down_view:10,float_on:1,float_zero:1,flow:27,fly:14,focu:[36,45],focus:45,folder:[32,39,41],follow:[0,1,2,3,5,6,7,9,10,12,13,15,16,22,27,31,33,41,42,44,45,46],for_each:[2,7,10,45],for_each_pixel:[7,10,24,45,46],for_each_pixel_posit:[10,45],forc:41,form:[0,9,12,13,29,31,32,45],format:[13,24,40,45],format_tag:41,formattag:41,forward:14,forwardtraversalconcept:14,found:41,four:[15,45],fourth:7,frame:38,framework:41,frederik:31,free:[15,40,45],freeli:[7,10],frequenc:19,frequent:15,friendli:[15,45],from:[0,1,5,6,7,8,12,13,14,15,18,20,22,24,27,29,31,39,40,41,45,46],fulfil:4,full:[6,13],fulli:[8,41,45],fun:10,function_requir:13,fundament:[1,15,38],fundamental_step:14,further:17,furthermor:[41,45],futur:46,gap:10,gaussian:[31,32],gener:[0,2,4,6,7,9,10,11,14,16,20,31,32,42],generate_pixel:10,geometri:38,get:[1,6,8,10,12,14,19,20,27,29,31,32,45],get_color:[2,7,8,13],get_info:41,get_num_bit:44,get_num_it:45,get_pixel_typ:44,get_read_devic:41,get_reader_backend:41,gil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,29,35,36,37,39,40,42,44,47],gil_function_requir:[2,7,10,45],github:40,give:[7,15,41],given:[0,2,6,8,9,10,12,13,14,15,17,31,45],glimps:45,global:45,goal:[5,33],goe:45,going:15,good:[32,33,36,45],googl:38,gool:31,gradient:[31,32,39],grai:[7,8,31,44],graph:32,grate:17,gray16:41,gray16_image_t:[41,45],gray16_pixel_t:45,gray16_step_view_t:10,gray16c_view_t:45,gray1:[41,45],gray1_image_t:41,gray2:41,gray32s_pixel_t:45,gray32s_view_t:45,gray4:41,gray4_image_t:41,gray7:41,gray8:41,gray8_image_t:[6,18,23,24,33,34,41,45],gray8_pixel_t:[7,8,24,45,46],gray8_view_t:7,gray8c_loc_t:45,gray8c_view_t:45,gray8s_image_t:45,gray8s_pixel_t:45,gray8s_view_t:45,gray_alpha:41,gray_alpha_16:41,gray_alpha_8:41,gray_channel_t:7,gray_color_t:[7,8],gray_cs_t:7,gray_image_t:45,gray_layout_t:45,gray_pixel_t:45,gray_t:[3,7,8,12],gray_to_rgb:7,grayimage_histogram:[7,46],graypixel:7,grayscal:[7,8,10,12,14,15,33,45],grayview:[7,46],green:[7,10,13,17,24,29,46],green_t:[2,3,7,13],grid:45,group:[0,3],guarante:4,guid:[10,39,45],guidelin:41,gv8:7,half:45,half_x_differ:45,halfdiff_cast_channel:45,hand:[0,5,31,39,45,46],handl:45,happen:[6,31,45],hard:[12,41],hardli:45,harrismatrix:31,has:[2,5,6,7,9,10,12,14,15,19,41,45],hasdynamicxsteptypeconcept:[14,15],hasdynamicysteptypeconcept:15,hash:20,hash_combin:20,hash_valu:20,hasher:20,hassl:45,hastransposedtypeconcept:15,have:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,31,33,34,36,41,44,45,46],hcb:2,header:[39,40,41,44],heidelberg:31,height:[6,7,9,10,33,34,45,46],help:32,helper:12,henc:[33,34,36],here:[0,1,2,3,4,6,7,8,10,12,13,14,15,32,41,45],hessianmatrix:31,heterogen:[12,13,45],high:29,higher:8,hill:[31,32],his:41,hist:[7,46],histogram:[20,21,22,27,36,39],histogram_equ:33,histogram_match:34,homogen:[2,13,14,45],homogeneous_color_bas:[2,14],homogeneouscolorbaseconcept:[2,13,14],homogeneouscolorbasevalueconcept:2,homogeneouspixel:13,homogeneouspixelbasedconcept:[12,13],homogeneouspixelconcept:13,homogeneouspixelvalueconcept:13,hopefulli:[41,44],horizont:[7,12,14,15,32,45],how:[1,3,6,7,8,10,12,13,14,31,41,45],howev:[2,10,45],hpp:[6,8,20,39,40,41,44,45],hsl:44,hsv:[33,34,44],html:10,http:[10,40,47],human:36,idea:33,ideal:33,ident:[7,8],identifi:20,ifstream:41,ignor:[13,45],illumin:34,illustr:[6,7,45],imag:[0,5,11,13,14,16,18,21,23,24,25,27,31,32,33,34,35,36,38,40,42,44,46],image_read_info:41,image_read_set:41,image_t:[6,41],image_typ:[8,12,44,45],image_view:[6,9,10,45],image_write_info:41,imageconcept:[6,7,9,12],imagemagick:41,imagetyp:6,imageviewconcept:[6,7,9,10,12,45],imageviewtyp:6,imagin:32,img:[6,7,9,10,15,23,24,29,41,45,46],img_view:8,immut:[6,9,10,12,14,15,42,45],impact:[10,45],implement:[1,2,6,8,10,13,14,15,17,31,40,41],impos:1,improv:[44,45],in1:45,in2:45,in_buff:41,inaccuraci:41,inc:[14,40],includ:[4,6,20,36,40,41,44,45],incompat:[1,6,7,41,45],incomplet:41,incorrect:45,incorrectli:17,increas:10,increment:[14,15,45],independ:[15,33,34,41,45],index:[2,10,13,15,41,45,46],indexed_imag:44,indic:[1,12,15,24,32,42,45],indica:42,ineffici:6,info:41,inform:[1,15,41],inher:14,inherit:13,initi:[7,13,38,45],inlin:[6,8,45],inner:45,inp_img:[33,34],input:[10,24,32,33,34,45],insid:[6,7,8,10,15,16,45],inspect:40,instal:[39,41],instanc:[6,8,14,24,29,41,45],instanti:[6,10,15,27,45],instead:[1,2,9,45],instruct:45,instrument:5,integ:[1,7,10,15,41,45],integr:[1,2,3,12,14,42,45],intel:15,intens:[1,31,32],interest:31,interfac:[15,24],interleav:[0,6,7,8,9,10,12,13,14,15,42,45,46],interleaved_ptr:39,interleaved_ref:39,interleaved_view:[10,41,45],intermedi:7,intern:[14,24,31,46],internet:8,interpret:[3,10],interv:33,introduc:41,invari:31,invert:8,invert_pixel:17,invok:[2,6,7,8,10,12,14,15,45],involv:45,ios:41,ios_bas:41,iostream:20,is_1d_travers:[10,15],is_bit_align:44,is_homogen:44,is_iterator_adaptor:14,is_mut:[1,8,13,14,45],is_pixel:13,is_planar:[12,13],is_sam:[6,7,13],is_similar:44,ismut:12,isplanar:[9,12],isstep:12,isstepx:12,issu:[17,45,46],isxstep:12,isystep:12,iter:[1,2,5,7,8,9,10,11,13,17,39,42,46],iterator_adaptor_get_bas:14,iterator_adaptor_rebind:14,iterator_from_2d:[10,15],iterator_is_mut:14,iterator_t:41,iterator_trait:[13,17,45],iterator_typ:12,iterator_type_from_pixel:12,iteratoradaptorconcept:14,its:[1,3,6,7,9,12,13,14,15,19,24,44,45],itself:[7,13,19,27],jamfil:22,jiri:31,journal:31,jpeg:[8,45],jpeg_dynamic_io:6,jpeg_lib:41,jpeg_read_imag:[6,7,45],jpeg_tag:41,jpeg_wiki:41,jpeg_write_view:[6,7,45],jpg:[7,41,45],just:[7,8,9,12,13,15,41,44,45],kadir:31,keep:[0,14,27,45],kei:[19,20,24,27,29,31],kernel:[7,37],key_from_pixel:24,kind:41,know:41,known:[27,33],krystian:31,kth_element_const_reference_typ:2,kth_element_reference_typ:2,kth_element_typ:[2,13],kth_semantic_element_const_reference_typ:2,kth_semantic_element_reference_typ:2,kth_semantic_element_typ:[2,13],lab:44,lack:[41,45],laid:7,lambda:[7,46],larg:41,larger:7,largest:7,last:[10,13,41,45],lastli:17,later:[2,15],latest:40,latter:[7,13],layout:[2,5,11,12,13,14,39,42,45],layout_t:2,least:[6,45],leav:45,lectur:39,left:[7,10,14,15,34,41,45,46],let:[8,20,31,32,45,46],level:[1,6,41,45],lib:41,libjpeg:[40,41],libpng:[40,41],librari:[0,5,8,10,11,20,37,40,41,44,46],libraw:41,libtiff:41,lie:29,light:36,lightweight:[7,10,15,45],like:[0,6,7,8,12,13,14,22,31,32,33,34,40,41,45],limit:[5,6,25,27,39],line:45,linear:[1,6,33,36],linearli:[1,45],link:[40,41,47],list:[11,21,25,35,37,40,41],littl:[13,32],live:8,load:[6,45],loc2:15,loc:15,local:[34,41],locat:[5,8,9,10,11,12,13,14,16,34,39,42],locator_t:45,locator_typ:12,look:[8,31,32,36,41,45],loop:[10,15,45],lossi:[1,13],lot:[41,45],low:29,lower:41,lubomir:47,luc:31,lumin:32,luminos:[7,45,46],luminosity8bit_hist:46,luminosity_hist:46,luminosity_histogram:7,macro:[41,46],made:44,magnitud:45,mai:[0,1,3,4,6,7,8,10,13,14,15,45],main:[20,44],maintain:[44,45],make:[0,6,7,8,10,15,24,25,27,39,41,45],make_histogram:[18,22],make_integer_sequ:3,make_scanline_read:41,make_step_iter:14,mandel:45,mandel_grad:45,mandelbrot:[8,14,15,39,45],mandelbrot_fn:45,mani:[5,6,9,10,25,41,45],manipul:5,manual:41,map:[1,3,7,13,22,23],margin:7,mark:0,mask:[29,33,34],mata:31,match:[1,10,17,18,33,36,41,45],mathemat:33,matric:[31,32],matrix:[31,32],matter:31,max:1,max_el:2,max_valu:1,maximum:1,mayb:17,mean:[6,7,9,15,32,40,45],meant:41,measur:[6,15,45],mechan:[6,8,15,45],median:32,medic:36,member:[8,14,17,29,41],memmov:[7,10],memori:[0,2,3,7,13,14,15,45,46],memory_based_2d_loc:15,memory_based_step_iter:[14,15],memorybasediteratorconcept:[14,15],memunit:[14,15],memunit_adv:14,memunit_advanc:14,memunit_advanced_ref:14,memunit_dist:14,memunit_step:14,mention:41,meta:45,metafunct:[2,4,10,11,13,14,15,16,39,44,45],metaprogram:41,method:[7,8,10,14,15,18,45],might:[24,31,32,41,45],mike:31,mikolajczyk:31,mileston:41,min:1,min_el:2,min_valu:1,mind:[5,20],minimum:1,minisblack:41,minor:5,miss:45,mitig:45,mix:7,mode:[41,45],model:[0,4,5,6,7,8,12,17,45],modern:[41,45],modifi:[10,13,14,16,45],modul:[6,8],moment:31,monkei:7,monkey_transform:7,mono:41,moravec:31,more:[1,2,4,6,7,8,9,10,12,13,14,15,41,45],most:[2,4,8,9,10,13,15,16,24,40,41,45],motiv:1,move:[10,15,31,41,45],mp11:[3,12,13,14,45],mp_list:[3,45],mp_list_c:[3,13],mp_size:3,mp_true:[12,14],mpl:[3,12],much:45,multi:[33,34,41],multipl:[7,10,15,45],multipli:[1,14,45],must:[2,4,10,13,14,15,17,22,45],mutabl:[1,9,10,12,13,14,15,17,42,45],mutable_forwarditeratorconcept:14,mutablechannelconcept:1,mutablecolorbaseconcept:[2,13],mutablehomogeneouscolorbaseconcept:[2,13],mutablehomogeneouspixelconcept:[7,13],mutableimageviewconcept:[9,10,45],mutableiteratoradaptorconcept:14,mutablepixelconcept:[7,13,17],mutablepixeliteratorconcept:14,mutablepixellocatorconcept:[10,15],mutablerandomaccess2dimageviewconcept:10,mutablerandomaccess2dlocatorconcept:15,mutablerandomaccessiteratorconcept:14,mutablerandomaccessndimageviewconcept:[9,10],mutablerandomaccessndlocatorconcept:15,mutablestepiteratorconcept:[14,15],my_any_image_t:6,my_color_convert:8,my_color_converter_impl:8,my_img_typ:[41,45],my_reference_proxi:17,my_valu:17,my_view:7,my_virt_view_t:45,myimg:6,myit:17,n2081:4,name:[7,13,15,22,32,39,45,46],namespac:[2,6,17,20,41,44,45],nativ:[1,45],natur:15,navig:[10,14,15],necessari:[14,15,17,41,45],need:[1,4,7,8,10,12,13,14,15,19,20,24,27,41,44,45],neg:14,negat:10,neighbor:[15,45],neighborhood:15,neighbour:10,nest:[10,45],never:[6,7,45],new_dim:9,next:[8,10,41,45,46],nice:45,noisi:31,non:[7,10,12,13,15,17,33,36,41,42,45],none:[41,45],normal:[33,34,45],note:[0,1,2,6,7,9,10,13,24,31,41,45],noth:13,notic:[2,7,31,45],notion:[19,45],now:[20,31,41,45],nth_channel_deref_fn:14,nth_channel_view:[7,10,45,46],nth_channel_view_typ:10,nth_channel_x_gradi:45,num_channel:[6,10,12,13,45],num_dimens:[10,15,16],number:[2,6,7,10,13,14,15,27,31,33,34,45],numbit:1,numer:[10,31,39],numeric_limit:1,obj:6,object:[6,8,10,12,14,15,17,18,41,42,45,46],obtain:[15,45],occupi:13,off:45,offer:15,offset:[1,14,15,45],ofstream:41,often:[3,6,13,45],old:45,onc:[0,5,10,45],one:[2,4,6,7,8,10,12,13,14,15,29,32,33,41,45],ones:[6,8,13,31],onli:[1,2,6,7,8,10,13,14,15,17,24,31,33,39,40,41,44,45,46],onlin:41,open:6,oper:[1,2,4,6,8,9,10,13,14,15,16,17,20,24,39,41,42,45,46],oppos:[7,10,12,42,45],optim:[5,7,10,15,45],option:[0,8,22,24,31,39,41,45],order:[0,2,3,6,7,10,12,13,15,19,20,29,31,40,42,45,46],organ:[12,13,15,42],origin:[6,10,34,45,47],other:[2,4,8,13,14,15,20,22,27,31,32,41,42,45,46],otherwis:[8,13],our:[6,7,8,45],out:[27,29,33,34,41,45],out_buff:41,outdoor:31,output:[24,29,33,45],outsid:45,over:[1,9,10,13,14,18,19,20,24,29,31,33,34,42,45],overhead:[6,45],overlai:31,overload:[6,10,17,20,22,45],overrid:[7,8,15],overview:[21,25,35,37,39],own:[4,8,9,10,15,39,41,45],ownership:[9,45],pack:[9,13,14,45],packed_channel_refer:1,packed_channel_valu:1,packed_dynamic_channel_refer:1,packed_image1_typ:12,packed_image2_typ:12,packed_image3_typ:12,packed_image4_typ:12,packed_image5_typ:12,packed_image_typ:12,packed_pixel:[2,13,14,39],packed_pixel_typ:13,pad:[0,7,9,15],page:41,pair:[2,13,45],pairwis:[1,10,13],palett:41,paper:[4,31],paramet:[0,1,5,6,7,8,9,10,14,15,17,41,45],parent:[17,29],part:[36,41,46],partial:41,particular:[6,19,24,29,31,45],pass:[6,8,10,29,45],past:10,patch:31,path:[6,41],pattern:[1,7,12,45],peopl:44,per:[6,10,14,15,45],percent:41,perform:[6,8,10,14,15,39,45],permut:2,physic:[1,2,3,7,13],pick:41,pipe:45,pix_buff:13,pix_it:13,pixel1:13,pixel2:13,pixel:[0,1,2,3,4,5,6,8,9,11,16,17,24,32,33,34,39,42,46],pixel_2d_locator_bas:15,pixel_bit_s:44,pixel_refer:12,pixel_reference_typ:12,pixel_value_typ:12,pixelbasedconcept:[12,13,14,45],pixelconcept:[4,7,8,10,12,13,14,15],pixelconvertibleconcept:13,pixeldata:14,pixeldereferenceadaptorconcept:[8,10,14,15,45],pixeliteratorconcept:[10,12,14,15],pixellocatorconcept:[10,15],pixelrefer:12,pixelscompatibleconcept:[10,13],pixelvalueconcept:[8,9,10,13,14,15],place:[19,45],plain:14,planar:[0,2,6,7,9,10,12,13,14,15,17,41,42,45,46],planar_pixel_iter:[14,15],planar_pixel_refer:[13,17],planar_rgb_view:[10,45],plane:[0,7,10,32,45],platform:[15,39],pleas:[31,41],plot:32,plu:15,png:[33,34],png_lib:41,png_tag:[33,34],png_test_fil:41,png_wiki:41,pnm_wiki:41,point2dconcept:[15,16],point:[0,1,6,10,11,12,13,15,31,39,41,42,45],point_t:[6,9,10,15,41,45],point_typ:10,pointer:[1,7,8,10,13,14,15,41,42,45],pointndconcept:[10,15,16],polici:[0,10,46],popular:40,posit:[14,15,45],position_iter:14,possibl:[6,10,13,41,45],potenti:[0,41],pow:45,power:[6,7,31,45],practic:[6,45],pre:45,precis:1,prefer:[18,22,41],prefix:2,presenc:0,present:[45,46,47],pretend:14,preval:36,previou:[0,6],previous:[10,45],price:12,primari:36,privat:[8,10,15,41,45],probabl:41,problem:[12,17,45],process:[0,10,25,35,36,38,39,45],processor:45,produc:32,product:[45,46],profil:8,program:[4,41,45,46],project:[0,38,40],propag:[10,45],proper:45,properli:[1,2,7,8,41,45],properti:[12,13,39,45],propos:4,provid:[0,1,2,3,5,6,8,9,10,12,13,14,15,16,17,20,22,29,32,41,44,45,46],provis:22,proxi:[1,2,13],ptr:7,ptrdiff_t:[6,10,14,15,45],pull:14,purpos:[13,20],put:[32,45],quadrant:46,qualifi:17,qualiti:[8,41],queri:45,r565:13,rais:45,random:[3,14,15,45],randomaccess2dimageconcept:9,randomaccess2dimageviewconcept:10,randomaccess2dlocatorconcept:15,randomaccessndimageconcept:9,randomaccessndimageviewconcept:10,randomaccessndlocatorconcept:[10,15],randomaccesstraversalconcept:[10,14,15],randomaccesstraversaliteratorconcept:14,rang:[1,2,9,10,29,33,45],rare:[9,45],rather:41,raw:[5,15,45],raw_wiki:41,rbegin:10,rbg323:41,rdbuf:41,read:[0,8,10,12,13,14,15,18,45],read_and_convert_imag:41,read_and_convert_view:41,read_imag:[33,34,41],read_image_info:41,read_view:41,read_xxx:41,reader:[41,45],reader_bas:41,reader_t:41,readm:40,real:[17,45],realiz:45,reason:33,rebind:14,recommend:[0,27,41],recreat:[6,7,9],rectangular:[10,45],recurs:[2,14,45],red:[0,1,2,7,13,14,17,24,29],red_in_cmyk16:13,red_in_rgb8:13,red_t:[2,3,13],redefin:8,ref2:7,ref:[7,13],ref_imag:34,ref_img:34,refer:[1,2,7,8,10,12,13,14,15,31,34,39,41,42,45],refin:16,regardless:45,region:[37,39,45],regist:45,regular:[1,2,4,9,10,13,15,16],rel:[15,45],relat:[4,12,45],releas:[27,38],relev:[29,41],remain:8,rememb:[15,17],remov:[41,45,46],remove_refer:14,rend:10,repeat:15,replac:[12,20],repositori:[27,40],repres:[0,15,17,41,45],represent:[0,5,39,45],reqd:24,request:41,requir:[1,2,4,6,8,9,10,13,14,15,24,39,40,41,45],resampl:10,rescal:39,research:36,resembl:[6,10],resid:45,resiz:[10,39],resolut:[5,6],respect:[7,13,45],respons:31,rest:[12,45],restrict:41,result:[0,2,5,6,7,8,10,12,13,14,15,31,40,41,45],result_typ:[4,6,8,10,14,45],result_view_t:6,reus:45,reverse_iter:10,review:[41,44],rewrit:45,rewritten:46,rgb16:41,rgb16_image_t:[10,45],rgb16c_planar_view_t:45,rgb222:45,rgb32f_planar_step_ptr_t:[12,42],rgb32f_planar_view_t:7,rgb32fc_view_t:45,rgb32s_pixel_t:45,rgb32s_view_t:45,rgb565:13,rgb565_channel0_t:13,rgb565_channel1_t:13,rgb565_channel2_t:13,rgb565_pixel_t:13,rgb64_image_t:8,rgb64_pixel:8,rgb64_pixel_ptr_t:8,rgb64_pixel_t:8,rgb8:[13,41],rgb8_image_t:[6,18,24,29,41,45],rgb8_pixel_t:[7,13,45],rgb8_planar_ptr_t:14,rgb8_planar_ref_t:[7,13],rgb8_planar_view_t:12,rgb8_ptr_t:10,rgb8_step_view_t:6,rgb8_view_t:[6,7],rgb8c_planar_ptr_t:[7,14],rgb8c_planar_ref_t:[7,13],rgb8c_ptr_t:10,rgb8c_view_t:[6,45],rgb:[0,1,2,7,8,10,12,13,14,24,29,33,34,41,42,45,46],rgb_channel_t:7,rgb_cs_t:7,rgb_full:13,rgb_layout_t:[7,8,13],rgb_planar_pixel_iter:17,rgb_t:[3,7,13,14],rgba16:41,rgba8:41,rgba8_image_t:41,rgba:[0,3,12,42,44],rgba_layout_t:[3,7],rgba_t:3,rgbpixel:7,rgbtograi:46,right:[7,10,14,15,34,45],rise:15,rotat:[6,10,45],rotated180_view:[6,7,10],rotated180_view_fn:6,rotated90ccw_view:[10,45],rotated90cw_view:[10,45],routin:[20,27],row:[0,7,9,10,13,14,15,41,45,46],row_begin:[10,45],row_end:10,rowsiz:10,rpv32:7,rule:40,run:[0,1,5,6,7,10,38,39],runtim:6,runtime_imag:[41,45],rview:10,said:6,sake:10,same:[1,2,3,6,7,8,10,13,15,16,31,32,34,41,45],sametyp:[1,2,4,10,13,14,16],sampl:[15,39,41,45,46],satisfi:[2,4,9,10,15,45],sav:6,save:[6,41,45],save_180rot:6,scale:45,scanlin:41,scanline_read:41,scanline_read_iter:41,scenario:[2,33,45],schaffalitzki:31,scharr:32,scharrx:32,schmid:31,scoped_channel_valu:1,sean:17,second:[0,1,7,13,15,17,31,41,45,46],second_argument_typ:10,section:[0,2,10,11,21,25,35,37,41,44],see:[2,4,8,10,14,15,41,45],seek:41,select:6,semant:[2,3,13,45],semantic_at_c:[2,7,13],send:41,sensor:34,separ:[0,8,10,31,45],sequenc:[1,3],serv:41,servic:40,set:[0,1,3,4,6,7,8,9,10,13,14,15,41,45],set_step:14,sever:[5,14,41,45],shallow:[6,7,10,14,17,45],shape:32,share:[6,13,41],sharper:32,she:41,shift:1,ship:27,shortli:46,should:[6,15,18,19,22,31,33,40,41,45],show:[7,41,45],shown:[7,33,34,45],side:45,sigma:32,sign:[12,42,45],signific:[10,36],similar:[1,10,14,15,39,41,45],similarli:[9,14],simpl:[12,15,24,32,33,41,45,46],simpler:[31,41,46],simplest:[24,32,45],simpli:[7,8,15,31,32,45],simplic:45,simplifi:[7,31,45],simultan:45,sinc:[6,7,13,14,18,19,27,29,33,34,40,41,44,45,46],singl:[6,10,14,32,41,45],size1:12,size2:12,size3:12,size4:12,size5:12,size:[2,6,7,10,13,14,15,41,45],size_t:[2,6,9,10,13,15,16,20],size_typ:[6,10],sizeof:13,skeleton:41,skip:[10,14,45,46],slightli:[8,45],slow:45,slower:[15,45],small:[31,41,44],smaller:[7,19],sobel:32,softwar:46,solut:17,some:[0,4,6,7,8,10,12,13,14,15,17,36,41,45],sometim:[1,10,13,14,15,17,41,45],somewher:8,soon:41,sort:[19,32],sourc:[1,6,7,8,10,18,40,41,42,45,46,47],space:[0,2,5,6,7,10,11,13,14,33,34,39,41,44,45,46],special:[8,13,34,42,45],specif:[0,5,39,41,45],specifi:[0,1,3,5,6,8,9,12,14,33,34,39,41],speed:[0,5,6,10,45],spirit:15,spread:33,springer:31,sr8wjg0pcee:47,src1:10,src1_it:45,src2:10,src2_it:45,src:[1,2,6,7,8,10,41,45],src_b:45,src_g:45,src_it:45,src_loc:45,src_pix_ref:8,src_pixel:45,src_r:45,src_row_byt:45,srcchannel:1,srccolorspac:8,srcconstrefp:8,srcp:8,srcpixel:13,srcview:[7,8,10,45],srowbyt:46,stabl:31,stage:10,standalon:44,standard:[3,4,10,12,14,15,20,33,34],start:[10,13,15,41,45],state:10,statement:[6,45],static_:2,static_assert:[6,7,12,13],static_copi:2,static_equ:2,static_fil:[2,7,45],static_for_each:[2,45],static_gener:[2,45],static_max:2,static_min:2,static_transform:[2,14,45],std:[1,2,6,7,9,10,12,13,14,15,17,18,20,21,22,24,27,29,39,41,45,46],step1:7,step2:7,step3:7,step4:7,step5:7,step:[6,10,12,15,37,42,45],step_iterator_t:12,stepanov:17,stephen:31,stepiter:15,stepiteratorconcept:[14,15],still:45,stl:[2,5,6,9,15,17,25,27,39],stlab:10,store:[6,7,15,19,24,41,45],straightforward:[10,41],stream:41,strength:32,stretch:[32,36],string:[6,18,41],stringstream:41,strip:41,strongli:41,struct:[1,2,3,6,8,10,12,13,14,15,16,17,20,41,45],structur:[0,6,10,11,31,37,39,45],studio:45,sub:[1,17,20,25,27,39,41,44],sub_h:29,sub_histogram:29,subclass:[6,14,15],subimag:45,subimage_view:[7,10,41,45,46],subject:41,suboptim:45,subsampl:[10,14,45],subsampled_view:[7,10,45,46],subset:29,substitut:4,successfulli:40,succinct:10,suffici:[15,40],suffix:42,suggest:[17,44],suit:[36,41],suitabl:[27,45],sum:31,summer:38,suppli:[8,10,14,15,22,41],support:[0,1,6,7,8,10,12,14,22,27,39,40,45,46],supported_image_format:41,suppos:[6,7,8,45],sure:41,swap:[4,15,17],swappabl:[1,2,4],symmetr:13,synopsi:[10,15],syntact:4,syntax:[4,18,33,34],synthet:[8,39,45],system:[41,45],tabl:[11,21,25,35,37,41],tag:[41,42],tag_t:41,take:[2,6,7,8,9,10,14,15,17,19,41,45,46],taken:[33,34,45],targa_wiki:41,target:[5,41,45],task:[24,29,45],technic:[11,39],techniqu:[6,34,41],tell:40,templat:[1,2,3,4,6,7,8,9,10,12,13,14,15,16,17,41,45,46],temporari:[17,45],term:[16,31],test:[20,22,39,40,42],test_imag:41,text:41,than:[2,6,7,13,14,15,18,19,41,45],thank:[41,44],thei:[1,2,3,5,6,7,8,10,12,13,14,15,31,32,45],them:[1,4,6,9,10,12,13,41,45],therefor:1,thi:[0,1,2,4,6,7,8,10,12,13,14,15,17,18,24,31,32,34,36,41,42,44,45,46,47],thing:[7,32,41],think:45,third:41,thorough:41,those:[13,32],though:[6,7,32,45],three:[1,13,14,31,32,45],threshold:31,through:[7,15,41,45],thrown:45,thu:[1,2,3,8,15,33],tif:41,tiff_base_tag:41,tiff_extension_tag:41,tiff_graphicsmagick_test_fil:41,tiff_lib:41,tiff_lib_tiff_test_fil:41,tiff_t:41,tiff_tag:41,tiff_wiki:41,tile:41,time:[0,1,2,5,6,7,8,10,14,27,39],timor:31,tinn:31,tip:19,tmp:[14,17],todo:[18,26,28,30,43],togeth:[0,3,13,45],toll:[6,45],too:[36,44],toolbox:[39,41],top:[0,7,10,12,15,27,41,45,46],top_left:10,total:[10,15],trace:31,track:[10,14,45],transform:[1,2,6,8,10,31,33,34,39],transform_pixel:[10,45],transform_pixel_posit:[10,45],transpos:[10,15,45],transposed_typ:[10,15],transposed_view:10,travers:[9,10,14,15,41,42,45],treat:[6,45],tricki:17,trickier:45,trigger:[6,45],trivial:42,troubl:41,tupl:[24,29],turn:6,tutori:[8,10,15,39],tuytelaar:31,tweak:32,twice:45,two:[0,1,2,3,6,7,9,10,13,14,15,16,31,32,34,38,41,45],type1:18,type2:18,type3:18,type:[0,1,2,3,4,5,6,7,9,10,13,14,15,16,17,18,20,22,39,41,44,45,46],type_from_x_iter:12,typedef:[1,6,7,8,10,12,13,14,17,41,45],typen:18,typenam:[1,2,3,4,6,7,8,9,10,12,13,14,15,16,17,41,45,46],typic:[1,6,8,10],ud_fud:10,uint16_t:[1,13],uint8_t:[1,31,46],unari:[14,45],unary_compos:14,unary_funct:14,unaryfunctionconcept:[10,14],unchang:45,unclear:15,under:[31,34,41],underli:[6,10,14,41],understand:[1,31,32,41],unfamiliar:45,unfortun:45,uniform:34,uniformli:[6,33],uninitialized_copi:10,uninitialized_copy_pixel:10,uninitialized_fil:10,uninitialized_fill_pixel:10,uniqu:3,unit:[14,15,41],unless:[32,41],unlik:[9,13],unnam:3,unnecessari:[7,13,45],unordered_map:[22,23,27],unpack:13,unrel:46,unrol:45,unset:10,unsign:[6,7,9,10,12,13,14,42,45],unspecifi:4,until:31,unus:[13,45],unusu:45,upon:[6,8,10,12,14,15,17],upper:46,upsid:[6,10],usag:[20,21,32,33,34,41],use:[1,2,4,7,8,10,12,13,15,17,22,24,32,34,40,41,45],use_default:12,used:[2,3,4,5,6,7,9,13,14,15,16,20,25,31,32,35,41,42,45],useful:[8,9,14,15,45],user:[0,4,8,10,15,41,44,45],uses:[2,6,10,12,14,15,16,20,41,45],using:[1,2,3,6,7,8,9,10,12,13,15,20,24,29,39,41,45,46],using_io:41,usual:[14,31,32,41],util:[25,39],val:10,valid:[1,10,45],valu:[0,1,2,3,6,7,8,9,10,12,13,14,15,16,17,24,29,31,32,33,34,41,42,45],value_typ:[1,8,9,10,13,14,15,16,41,45],valueless:6,van:31,vari:[0,3,45],variabl:[0,45,46],variant2:[6,45],variant:[6,41,45],variat:[0,41],varieti:[39,45],variou:41,vector:[22,23,33,34,45],veri:[9,12,31,45,46],version:[10,14,15,19,40,41,46],vertic:[12,14,15,32,45],via:[6,10],video:[0,39,45],view1:10,view2:10,view:[5,9,11,13,14,15,18,23,24,29,33,34,39,41,42,46],view_is_mut:12,view_t:[6,7,9,10,12,41],view_typ:12,view_type_from_pixel:12,viewer:41,viewscompatibleconcept:[7,10],viewtyp:6,virtual:[5,8,12,14,15,41],virtual_2d_loc:[15,45],vision:[0,31],visit:[6,10,15,45],visual:[36,45],vol:31,wai:[2,13,17,18,32,41,42,45],walk:[41,45],want:[7,8,14,15,18,41,45],warn:45,watch:47,web:4,websit:41,weight:[31,37],well:[2,13,19,36,41,45],were:[38,45],what:[6,32,37,41,45],when:[2,7,8,9,10,14,15,17,18,31,32,34,41,45],where:[1,2,7,9,10,12,13,14,15,16,18,40,41,42,45],wherea:[0,2,6,32,41,45],whether:[1,10,12,14,15,45],which:[0,1,2,3,6,7,8,9,10,12,14,15,16,19,24,32,33,40,41,42,44,45],who:44,whose:[0,2,10,12,13,14,29,39,45],why:[33,45],width:[6,7,9,10,15,33,34,45,46],window:[31,41],within:10,without:31,word:[0,9,10,14,32,45],work:[0,5,6,7,8,10,13,17,31,39,45,46],workflow:22,worth:[7,41,45],would:[0,6,14,18,29,32,33,34,41,45],wrap:[6,10,14],wrapper:[14,15],write:[0,5,6,7,10,17,39,45],write_view:41,writer:41,written:[15,32,41,45,46],wstring:41,www:47,x_at:[10,15],x_coord_t:[6,9,10,15],x_diff:15,x_gradient:[39,45],x_gradient_obj:45,x_gradient_rgb_luminos:45,x_gradient_unguard:45,x_iter:[9,10,13,15,41,45],x_luminosity_gradi:45,x_min:45,xbm:41,xgradientgray16_gray32:45,xgradientplanarrgb8_rgb32:45,xgradientrgb8_bgr16:45,xiter:[12,15],xpm:41,xxx:41,xxx_all:41,xxx_and_convert_xxx:41,xxx_read:41,xxx_tag:41,xxx_write:41,xy_at:[10,15,45],xy_loc:[10,45],xy_locator_t:12,xyz:44,y_at:[10,15],y_coord_t:[6,9,10,15],y_distance_to:15,y_gradient:45,y_iter:[10,15,45],y_min:45,ycbcr:[33,34,41],ycck:41,yellow:31,yet:[0,27,41,45],you:[7,8,12,17,19,20,24,27,41,45],your:[8,17,20,39,40,41,45],your_imag:[33,34],your_ref_imag:34,yourself:41,youtub:47,zero:[13,31,45],zisserman:31,zlib:41},titles:["Basics","Channel","Color Base","Color Space and Layout","Concepts","Conclusions","Dynamic images and image views","Examples","Extending","Image","Image View","Design Guide","Metafunctions","Pixel","Pixel Iterator","Pixel Locator","Point","Technicalities","Create a histogram","Making a cumulative histogram","Extending the class","Extensions","Overview","STD extension","Fill histogram","Histogram","Limitations","Overview","STL compatibility","Making a sub-histogram","Utilities","Affine region detectors","Basics","Histogram Equalization","Histogram Matching","Contrast Enhancement","Overview","Image Processing","Overview","Boost Generic Image Library","Installation","IO extensions","Naming Conventions","Numeric extension","ToolBox extension","Tutorial: Image Gradient","Tutorial: Histogram","Tutorial: Video Lecture"],titleterms:{"class":20,"new":[8,41],Adding:22,And:41,Axes:20,Using:[7,41,45],acknowledg:44,adaptor:14,advanc:24,affin:31,algorithm:[1,2,10,13,31,33,34,45],align:12,avail:31,base:[2,12],basic:[0,24,32],being:31,bit:12,bmp:41,boost:39,buffer:41,canva:7,channel:[1,8],code:45,color:[2,3,8,45],compat:[5,28],compil:[40,41],compon:12,concept:4,conclus:[5,45],concret:42,contain:22,contrast:35,convent:42,convers:[8,45],convolut:32,core:39,creat:[10,17,18,45],cumul:19,curvatur:32,defin:[8,20],demo:[33,34],derefer:14,deriv:[12,32],descript:[22,27,33,34],design:11,detect:31,detector:31,document:39,dynam:6,enhanc:35,equal:33,equival:45,exampl:[7,39],exist:12,extend:[8,20,41],extens:[5,21,22,23,39,41,43,44],extern:22,fill:24,filter:32,first:45,flexibl:5,folder:44,format:41,from:10,fundament:14,gener:[5,39,41,45],gil:[41,45,46],glue:45,gradient:45,guid:11,harri:31,hessian:31,histogram:[7,18,19,24,25,29,33,34,46],homogen:12,imag:[6,7,8,9,10,12,15,37,39,41,45],implement:[45,46],instal:40,interfac:[41,45],iter:[12,14,15,45],jpeg:41,kernel:32,layout:3,lectur:47,level:7,librari:39,limit:26,locat:[15,45],make:[19,29],manipul:12,match:34,memori:[12,41],metafunct:12,model:[1,2,3,9,10,13,14,15,16],name:42,numer:43,oper:7,origin:46,other:10,over:15,overload:8,overview:[1,2,3,8,9,10,12,13,14,15,16,19,22,24,27,29,36,38,41,43,44],pack:12,perform:5,pixel:[7,10,12,13,14,15,45],platform:41,png:41,pnm:41,point:16,process:37,proxi:17,quickstart:39,raw:[10,41],read:41,refer:[17,44],region:31,resiz:7,result:[33,34],run:[41,45],space:[3,8],specifi:45,std:23,step:[14,31],stl:[10,28,45],structur:44,style:10,sub:29,support:[23,41],symbol:41,targa:41,technic:17,test:41,tiff:41,time:45,toolbox:44,trait:12,transform:45,tutori:[27,41,45,46,47],type:[8,12,23,42],usag:23,user:20,util:30,version:45,video:47,view:[6,7,8,10,12,45],virtual:45,weight:32,what:31,write:41}}) \ No newline at end of file diff --git a/html/toolbox.html b/html/toolbox.html index afc6c1d88..4350da5c6 100644 --- a/html/toolbox.html +++ b/html/toolbox.html @@ -126,7 +126,7 @@ made suggestions for improvements.

    diff --git a/html/tutorial/gradient.html b/html/tutorial/gradient.html index 13cd6fdc6..fb4ca12cb 100644 --- a/html/tutorial/gradient.html +++ b/html/tutorial/gradient.html @@ -953,7 +953,7 @@ code with different compilers.

    diff --git a/html/tutorial/histogram.html b/html/tutorial/histogram.html index 9272f9d29..eaafe652f 100644 --- a/html/tutorial/histogram.html +++ b/html/tutorial/histogram.html @@ -171,7 +171,7 @@ memory is allocated and no images are copied.

    diff --git a/html/tutorial/video.html b/html/tutorial/video.html index f154e0d90..054a52813 100644 --- a/html/tutorial/video.html +++ b/html/tutorial/video.html @@ -82,7 +82,7 @@

    Friends

    - + - +
    reference operator[] auto operator[] ( difference_type  d) const const -> reference +