AsmGrader 0.0.0
Loading...
Searching...
No Matches
integer.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <boost/mp11/algorithm.hpp>
6#include <boost/mp11/detail/mp_list.hpp>
7#include <boost/mp11/integral.hpp>
8
9#include <bit>
10#include <concepts>
11#include <cstddef>
12#include <limits>
13#include <type_traits>
14
15namespace asmgrader {
16
17namespace detail {
18namespace mp = boost::mp11;
19
20using sized_uint_map = mp::mp_list<u8, u16, u32, u64>;
21using sized_int_map = mp::mp_list<i8, i16, i32, i64>;
22
23template <int I>
24using sized_int_impl = mp::mp_at<sized_int_map, mp::mp_int<I>>;
25
26template <int I>
27using sized_uint_impl = mp::mp_at<sized_uint_map, mp::mp_int<I>>;
28} // namespace detail
29
30template <std::size_t NumBits>
31using sized_int_t = detail::sized_int_impl<std::bit_width(NumBits) - 1>;
32
33template <std::size_t NumBits>
34using sized_uint_t = detail::sized_uint_impl<std::bit_width(NumBits) - 1>;
35
47template <typename IntType>
48 requires std::integral<std::decay_t<IntType>>
49constexpr std::size_t digits10_max_count = std::numeric_limits<std::decay_t<IntType>>::digits10 + 1;
50
51static_assert(digits10_max_count<i8> == 3);
52static_assert(digits10_max_count<u8> == 3);
53static_assert(digits10_max_count<i16> == 5);
54static_assert(digits10_max_count<u16> == 5);
55static_assert(digits10_max_count<i32> == 10);
56static_assert(digits10_max_count<u32> == 10);
57static_assert(digits10_max_count<i64> == 19);
58static_assert(digits10_max_count<u64> == 20);
59
60} // namespace asmgrader
mp::mp_at< sized_int_map, mp::mp_int< I > > sized_int_impl
Definition integer.hpp:24
mp::mp_list< u8, u16, u32, u64 > sized_uint_map
Definition integer.hpp:20
mp::mp_at< sized_uint_map, mp::mp_int< I > > sized_uint_impl
Definition integer.hpp:27
mp::mp_list< i8, i16, i32, i64 > sized_int_map
Definition integer.hpp:21
Definition asm_buffer.hpp:20
detail::sized_uint_impl< std::bit_width(NumBits) - 1 > sized_uint_t
Definition integer.hpp:34
detail::sized_int_impl< std::bit_width(NumBits) - 1 > sized_int_t
Definition integer.hpp:31
constexpr std::size_t digits10_max_count
This was a little confusing (to me at least) digits10 => maximum number of base-10 digits that can be...
Definition integer.hpp:49