HIBF 1.0.0-rc.1
All Classes Namespaces Files Functions Variables Typedefs Friends Macros Modules Pages Concepts
divide_and_ceil.hpp
1// SPDX-FileCopyrightText: 2006-2025, Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2025, Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
5#pragma once
6
7#include <cassert> // for assert
8#include <concepts> // for unsigned_integral
9#include <cstddef> // for size_t
10#include <limits> // for numeric_limits
11
12#include <hibf/platform.hpp>
13
14namespace seqan::hibf
15{
16
20template <std::unsigned_integral t1, std::unsigned_integral t2>
21[[nodiscard]] inline constexpr size_t divide_and_ceil(t1 const dividend, t2 const divisor) noexcept
22{
23 assert(divisor > 0u);
24 assert(std::numeric_limits<size_t>::max() - divisor + 1u >= dividend); // Overflow detection
25 return (static_cast<size_t>(dividend) + (divisor - 1u)) / divisor;
26}
27
28} // namespace seqan::hibf
constexpr size_t divide_and_ceil(t1 const dividend, t2 const divisor) noexcept
Returns, for unsigned integral operands, dividend / divisor ceiled to the next integer value.
Definition divide_and_ceil.hpp:21
Provides platform and dependency checks.