8#ifndef BOOST_GIL_IO_BIT_OPERATIONS_HPP
9#define BOOST_GIL_IO_BIT_OPERATIONS_HPP
11#include <boost/gil/io/typedefs.hpp>
17namespace boost {
namespace gil {
namespace detail {
20template <
typename Buffer,
typename IsBitAligned>
25 void operator()(Buffer&) {}
26 void operator()(byte_t*, std::size_t){}
31template <
typename Buffer>
32struct mirror_bits<Buffer, std::true_type>
42 lookup_[i] = mirror(i);
48 void operator()(Buffer& buffer)
51 for_each(buffer.begin(), buffer.end(), [
this](byte_t& c) { lookup(c); });
54 void operator()(byte_t *dst, std::size_t size)
56 for (std::size_t i = 0; i < size; ++i)
65 void lookup(byte_t& c)
70 static byte_t mirror(byte_t c)
73 for (
int i = 0; i < 8; ++i)
83 std::array<byte_t, 256> lookup_;
84 bool apply_operation_;
89template <
typename Buffer,
typename IsBitAligned>
92 void operator()(Buffer&) {};
95template <
typename Buffer>
96struct negate_bits<Buffer, std::true_type>
98 void operator()(Buffer& buffer)
100 for_each(buffer.begin(), buffer.end(),
101 negate_bits<Buffer, std::true_type>::negate);
104 void operator()(byte_t* dst, std::size_t size)
106 for (std::size_t i = 0; i < size; ++i)
115 static void negate(byte_t& b)
122template <
typename Buffer,
typename IsBitAligned>
123struct swap_half_bytes
125 void operator()(Buffer&) {};
128template <
typename Buffer>
129struct swap_half_bytes<Buffer, std::true_type>
131 void operator()(Buffer& buffer)
133 for_each(buffer.begin(), buffer.end(),
134 swap_half_bytes<Buffer, std::true_type>::swap);
137 void operator()(byte_t* dst, std::size_t size)
139 for (std::size_t i = 0; i < size; ++i)
148 static void swap(byte_t& c)
150 c = ((c << 4) & 0xF0) | ((c >> 4) & 0x0F);
154template <
typename Buffer>
157 do_nothing() =
default;
159 void operator()(Buffer&) {}
164inline unsigned int trailing_zeros(T x)
noexcept
181unsigned int count_ones(T x)
noexcept
BOOST_FORCEINLINE auto apply_operation(Variant1 &&arg1, Visitor &&op)
Applies the visitor op to the variants.
Definition apply_operation.hpp:20
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition algorithm.hpp:36