| /* |
| * Integer Rounding Functions |
| * (C) 1999-2007 Jack Lloyd |
| * |
| * Botan is released under the Simplified BSD License (see license.txt) |
| */ |
| |
| #ifndef BOTAN_ROUNDING_H__ |
| #define BOTAN_ROUNDING_H__ |
| |
| #include <botan/version.h> |
| #if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(2,0,0) |
| // ECB cipher mode was dropped in Botan 2.0.0 |
| // so including this code in SoftHSM for continued support |
| // for e.g. CKA_VALUE_CHECK |
| |
| #include <botan/types.h> |
| #include <botan/assert.h> |
| |
| namespace Botan { |
| |
| /** |
| * Round up |
| * @param n a non-negative integer |
| * @param align_to the alignment boundary |
| * @return n rounded up to a multiple of align_to |
| */ |
| inline size_t round_up(size_t n, size_t align_to) |
| { |
| BOTAN_ASSERT(align_to != 0, "align_to must not be 0"); |
| |
| if(n % align_to) |
| n += align_to - (n % align_to); |
| return n; |
| } |
| |
| /** |
| * Round down |
| * @param n an integer |
| * @param align_to the alignment boundary |
| * @return n rounded down to a multiple of align_to |
| */ |
| template<typename T> |
| inline T round_down(T n, T align_to) |
| { |
| if(align_to == 0) |
| return n; |
| |
| return (n - (n % align_to)); |
| } |
| |
| /** |
| * Clamp |
| */ |
| inline size_t clamp(size_t n, size_t lower_bound, size_t upper_bound) |
| { |
| if(n < lower_bound) |
| return lower_bound; |
| if(n > upper_bound) |
| return upper_bound; |
| return n; |
| } |
| |
| } |
| |
| #endif |
| |
| #endif |