Botan 3.0.0-alpha0
Crypto and TLS for C&
rounding.h
Go to the documentation of this file.
1/*
2* Integer Rounding Functions
3* (C) 1999-2007 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#ifndef BOTAN_ROUNDING_H_
9#define BOTAN_ROUNDING_H_
10
11#include <botan/types.h>
12
13namespace Botan {
14
15/**
16* Round up
17* @param n a non-negative integer
18* @param align_to the alignment boundary
19* @return n rounded up to a multiple of align_to
20*/
21inline size_t round_up(size_t n, size_t align_to)
22 {
23 BOTAN_ARG_CHECK(align_to != 0, "align_to must not be 0");
24
25 if(n % align_to)
26 n += align_to - (n % align_to);
27 return n;
28 }
29
30/**
31* Round down
32* @param n an integer
33* @param align_to the alignment boundary
34* @return n rounded down to a multiple of align_to
35*/
36template<typename T>
37inline constexpr T round_down(T n, T align_to)
38 {
39 return (align_to == 0) ? n : (n - (n % align_to));
40 }
41
42}
43
44#endif
#define BOTAN_ARG_CHECK(expr, msg)
Definition: assert.h:36
fe T
Definition: ge.cpp:36
Definition: alg_id.cpp:13
constexpr T round_down(T n, T align_to)
Definition: rounding.h:37
size_t round_up(size_t n, size_t align_to)
Definition: rounding.h:21