123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //
- // Copyright (c) 2019-2023 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- //
- #ifndef BHO_MYSQL_IMPL_INTERNAL_PROTOCOL_NULL_BITMAP_TRAITS_HPP
- #define BHO_MYSQL_IMPL_INTERNAL_PROTOCOL_NULL_BITMAP_TRAITS_HPP
- #include <asio2/bho/assert.hpp>
- #include <cstddef>
- #include <cstdint>
- namespace bho {
- namespace mysql {
- namespace detail {
- class null_bitmap_traits
- {
- std::size_t offset_;
- std::size_t num_fields_;
- constexpr std::size_t byte_pos(std::size_t field_pos) const noexcept { return (field_pos + offset_) / 8; }
- constexpr std::size_t bit_pos(std::size_t field_pos) const noexcept { return (field_pos + offset_) % 8; }
- public:
- constexpr null_bitmap_traits(std::size_t offset, std::size_t num_fields) noexcept
- : offset_(offset), num_fields_{num_fields} {};
- constexpr std::size_t offset() const noexcept { return offset_; }
- constexpr std::size_t num_fields() const noexcept { return num_fields_; }
- constexpr std::size_t byte_count() const noexcept { return (num_fields_ + 7 + offset_) / 8; }
- bool is_null(const std::uint8_t* null_bitmap_begin, std::size_t field_pos) const noexcept
- {
- BHO_ASSERT(field_pos < num_fields_);
- return null_bitmap_begin[byte_pos(field_pos)] & (1 << bit_pos(field_pos));
- }
- void set_null(std::uint8_t* null_bitmap_begin, std::size_t field_pos) const noexcept
- {
- BHO_ASSERT(field_pos < num_fields_);
- null_bitmap_begin[byte_pos(field_pos)] |= (1 << bit_pos(field_pos));
- }
- };
- constexpr std::size_t stmt_execute_null_bitmap_offset = 0;
- constexpr std::size_t binary_row_null_bitmap_offset = 2;
- } // namespace detail
- } // namespace mysql
- } // namespace bho
- #endif /* INCLUDE_NULL_BITMAP_HPP_ */
|