25#ifndef JAU_INT_TYPES_HPP_
26#define JAU_INT_TYPES_HPP_
72 #if defined(__SIZEOF_INT128__)
73 template <>
struct uint_bytes<16>{
using type = uint128_t; };
79 #if defined(__SIZEOF_INT128__)
80 template <>
struct sint_bytes<16>{
using type = int128_t; };
98 constexpr uint128dp_t(
const uint8_t v[16]) noexcept : data{0} { *
this = pointer_cast<packed_t<uint128dp_t>*>( v )->store; }
99 constexpr uint128dp_t(
const uint128dp_t &o)
noexcept =
default;
100 uint128dp_t(uint128dp_t &&o)
noexcept =
default;
101 constexpr uint128dp_t& operator=(
const uint128dp_t &o)
noexcept =
default;
102 uint128dp_t& operator=(uint128dp_t &&o)
noexcept =
default;
104 void clear() noexcept { ::bzero(data,
sizeof(data)); }
106 constexpr bool operator==(uint128dp_t
const &o)
const noexcept {
110 return !std::memcmp(data, o.data,
sizeof(data));
112 constexpr bool operator!=(uint128dp_t
const &o)
const noexcept
113 {
return !(*
this == o); }
120 constexpr uint192dp_t(
const uint8_t v[24]) noexcept : data{0} { *
this = pointer_cast<packed_t<uint192dp_t>*>( v )->store; }
121 constexpr uint192dp_t(
const uint192dp_t &o)
noexcept =
default;
122 uint192dp_t(uint192dp_t &&o)
noexcept =
default;
123 constexpr uint192dp_t& operator=(
const uint192dp_t &o)
noexcept =
default;
124 uint192dp_t& operator=(uint192dp_t &&o)
noexcept =
default;
126 void clear() noexcept { ::bzero(data,
sizeof(data)); }
128 constexpr bool operator==(uint192dp_t
const &o)
const noexcept {
132 return !std::memcmp(data, o.data,
sizeof(data));
134 constexpr bool operator!=(uint192dp_t
const &o)
const noexcept
135 {
return !(*
this == o); }
142 constexpr uint256dp_t(
const uint8_t v[32]) noexcept : data{0} { *
this = pointer_cast<packed_t<uint256dp_t>*>( v )->store; }
143 constexpr uint256dp_t(
const uint256dp_t &o)
noexcept =
default;
144 uint256dp_t(uint256dp_t &&o)
noexcept =
default;
145 constexpr uint256dp_t& operator=(
const uint256dp_t &o)
noexcept =
default;
146 uint256dp_t& operator=(uint256dp_t &&o)
noexcept =
default;
148 void clear() noexcept { ::bzero(data,
sizeof(data)); }
150 constexpr bool operator==(uint256dp_t
const &o)
const noexcept {
154 return !std::memcmp(data, o.data,
sizeof(data));
156 constexpr bool operator!=(uint256dp_t
const &o)
const noexcept
157 {
return !(*
this == o); }
160 namespace int_literals {
162 constexpr int8_t
operator ""_i8(
unsigned long long int __v) {
return (int8_t)__v; }
165 constexpr uint8_t
operator ""_u8(
unsigned long long int __v) {
return (uint8_t)__v; }
168 constexpr int16_t
operator ""_i16(
unsigned long long int __v) {
return (int16_t)__v; }
171 constexpr uint16_t
operator ""_u16(
unsigned long long int __v) {
return (uint16_t)__v; }
174 constexpr int32_t
operator ""_i32(
unsigned long long int __v) {
return (int32_t)__v; }
177 constexpr uint32_t
operator ""_u32(
unsigned long long int __v) {
return (uint32_t)__v; }
180 constexpr int64_t
operator ""_i64(
unsigned long long int __v) {
return (int64_t)__v; }
183 constexpr uint64_t
operator ""_u64(
unsigned long long int __v) {
return (uint64_t)__v; }
186 constexpr ssize_t
operator ""_iz(
unsigned long long int __v) {
return (ssize_t)__v; }
189 constexpr size_t operator ""_uz(
unsigned long long int __v) {
return (
size_t)__v; }
void clear() noexcept
Clears internal list.
uint_fast32_t nsize_t
Natural 'size_t' alternative using uint_fast32_t as its natural sized type.
int_fast32_t snsize_t
Natural 'ssize_t' alternative using int_fast32_t as its natural sized type.
__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.
bool operator==(const callocator< T1 > &lhs, const callocator< T2 > &rhs) noexcept
bool operator!=(const callocator< T1 > &lhs, const callocator< T2 > &rhs) noexcept
A 128-bit packed uint8_t data array.
A 196-bit packed uint8_t data array.
A 256-bit packed uint8_t data array.