/usr/include/boost/gil
NameSizeModeActions
concepts/-0755rm
detail/-0755rm
extension/-0755rm
image_processing/-0755rm
io/-0755rm
algorithm.hpp413330644editdlrm
bit_aligned_pixel_iterator.hpp92000644editdlrm
bit_aligned_pixel_reference.hpp140960644editdlrm
channel.hpp299130644editdlrm
channel_algorithm.hpp230810644editdlrm
cmyk.hpp12960644editdlrm
color_base.hpp220100644editdlrm
color_base_algorithm.hpp298890644editdlrm
color_convert.hpp138510644editdlrm
concepts.hpp8970644editdlrm
deprecated.hpp24770644editdlrm
device_n.hpp35910644editdlrm
dynamic_step.hpp8930644editdlrm
gray.hpp6190644editdlrm
image.hpp204520644editdlrm
image_view.hpp140460644editdlrm
image_view_factory.hpp246250644editdlrm
iterator_from_2d.hpp66480644editdlrm
locator.hpp187860644editdlrm
metafunctions.hpp311860644editdlrm
packed_pixel.hpp92140644editdlrm
pixel.hpp98660644editdlrm
pixel_iterator.hpp53070644editdlrm
pixel_iterator_adaptor.hpp90710644editdlrm
planar_pixel_iterator.hpp100590644editdlrm
planar_pixel_reference.hpp99160644editdlrm
point.hpp68990644editdlrm
position_iterator.hpp50050644editdlrm
premultiply.hpp35210644editdlrm
promote_integral.hpp61850644editdlrm
rgb.hpp14580644editdlrm
rgba.hpp16740644editdlrm
step_iterator.hpp142260644editdlrm
typedefs.hpp134150644editdlrm
utilities.hpp81610644editdlrm
virtual_locator.hpp62880644editdlrm
Edit: /usr/include/boost/gil/promote_integral.hpp (6185B)
// Boost.GIL (Generic Image Library) // // Copyright (c) 2015, Oracle and/or its affiliates. // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // // Copyright (c) 2020, Debabrata Mandal // // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html // // Source: Boost.Geometry (aka GGL, Generic Geometry Library) // Modifications: adapted for Boost.GIL // - Rename namespace boost::geometry to boost::gil // - Rename include guards // - Remove support for boost::multiprecision types // - Remove support for 128-bit integer types // - Replace mpl meta functions with mp11 equivalents // #ifndef BOOST_GIL_PROMOTE_INTEGRAL_HPP #define BOOST_GIL_PROMOTE_INTEGRAL_HPP #include #include #include #include namespace boost { namespace gil { namespace detail { namespace promote_integral { // meta-function that returns the bit size of a type template < typename T, bool IsFundamental = std::is_fundamental::value > struct bit_size {}; // for fundamental types, just return CHAR_BIT * sizeof(T) template struct bit_size : std::integral_constant {}; template < typename T, typename IntegralTypes, std::size_t MinSize > struct promote_to_larger { using current_type = boost::mp11::mp_first; using list_after_front = boost::mp11::mp_rest; using type = typename std::conditional < (bit_size::value >= MinSize), current_type, typename promote_to_larger < T, list_after_front, MinSize >::type >::type; }; // The following specialization is required to finish the loop over // all list elements template struct promote_to_larger, MinSize> { // if promotion fails, keep the number T // (and cross fingers that overflow will not occur) using type = T; }; }} // namespace detail::promote_integral /*! \brief Meta-function to define an integral type with size than is (roughly) twice the bit size of T \ingroup utility \details This meta-function tries to promote the fundamental integral type T to a another integral type with size (roughly) twice the bit size of T. To do this, two times the bit size of T is tested against the bit sizes of: short, int, long, boost::long_long_type, boost::int128_t and the one that first matches is chosen. For unsigned types the bit size of T is tested against the bit sizes of the types above, if T is promoted to a signed type, or the bit sizes of unsigned short, unsigned int, unsigned long, std::size_t, boost::ulong_long_type, boost::uint128_t if T is promoted to an unsigned type. By default an unsigned type is promoted to a signed type. This behavior is controlled by the PromoteUnsignedToUnsigned boolean template parameter, whose default value is "false". To promote an unsigned type to an unsigned type set the value of this template parameter to "true". Finally, if the passed type is either a floating-point type or a user-defined type it is returned as is. \note boost::long_long_type and boost::ulong_long_type are considered only if the macro BOOST_HAS_LONG_LONG is defined */ template < typename T, bool PromoteUnsignedToUnsigned = false, bool UseCheckedInteger = false, bool IsIntegral = std::is_integral::value > class promote_integral { private: static bool const is_unsigned = std::is_unsigned::value; using bit_size_type = detail::promote_integral::bit_size; // Define the minimum size (in bits) needed for the promoted type // If T is the input type and P the promoted type, then the // minimum number of bits for P are (below b stands for the number // of bits of T): // * if T is unsigned and P is unsigned: 2 * b // * if T is signed and P is signed: 2 * b - 1 // * if T is unsigned and P is signed: 2 * b + 1 using min_bit_size_type = typename std::conditional < (PromoteUnsignedToUnsigned && is_unsigned), std::integral_constant, typename std::conditional < is_unsigned, std::integral_constant, std::integral_constant >::type >::type; // Define the list of signed integral types we are going to use // for promotion using signed_integral_types = boost::mp11::mp_list < short, int, long #if defined(BOOST_HAS_LONG_LONG) , boost::long_long_type #endif >; // Define the list of unsigned integral types we are going to use // for promotion using unsigned_integral_types = boost::mp11::mp_list < unsigned short, unsigned int, unsigned long, std::size_t #if defined(BOOST_HAS_LONG_LONG) , boost::ulong_long_type #endif >; // Define the list of integral types that will be used for // promotion (depending in whether we was to promote unsigned to // unsigned or not) using integral_types = typename std::conditional < (is_unsigned && PromoteUnsignedToUnsigned), unsigned_integral_types, signed_integral_types >::type; public: using type = typename detail::promote_integral::promote_to_larger < T, integral_types, min_bit_size_type::value >::type; }; template class promote_integral < T, PromoteUnsignedToUnsigned, UseCheckedInteger, false > { public: using type = T; }; }} // namespace boost::gil #endif // BOOST_GIL_PROMOTE_INTEGRAL_HPP