1#ifndef BYTEME_CHECK_BUFFER_SIZE_HPP
2#define BYTEME_CHECK_BUFFER_SIZE_HPP
19template<
typename Type_>
20constexpr typename std::make_unsigned<Type_>::type unsigned_max() {
21 return std::numeric_limits<Type_>::max();
24template<
typename Cap_>
25bool exceeds_cap(std::size_t buffer_size) {
26 constexpr auto cap = unsigned_max<Cap_>();
27 if constexpr(std::numeric_limits<std::size_t>::max() >
cap) {
28 return buffer_size >
cap;
34template<
typename Cap_>
35std::size_t check_buffer_size(std::size_t buffer_size) {
36 if (exceeds_cap<Cap_>(buffer_size)) {
37 return unsigned_max<Cap_>();
43inline std::size_t check_buffer_size(std::size_t buffer_size) {
46 return check_buffer_size<typename std::vector<unsigned char>::size_type>(buffer_size);
49template<
typename Cap_,
bool non_zero_,
typename Buffer_,
typename BufSize_,
class Func_>
50void safe_write(
const Buffer_* buffer, BufSize_ n, Func_ fun) {
51 constexpr auto total = unsigned_max<Cap_>();
58 if constexpr(non_zero_) {
81template<
typename Output_,
typename Size_>
82constexpr Output_
cap(Size_ size) {
83 constexpr auto cap = std::numeric_limits<Output_>::max();
84 if (
static_cast<typename std::make_unsigned<Size_>::type
>(size) >
cap) {
Simple byte readers and writers.
constexpr Output_ cap(Size_ size)
Definition check_buffer_size.hpp:82