Files
core/include/o3tl/numeric.hxx
Caolán McNamara 8f758e7a25 use a different memory allocation strategy for caches
redirect cache related allocations to the same place to attempt to put
them in separate pages from other allocations to release that cache
memory back to OS.

Change-Id: I384658a3d652e668095b69e5a62eae5b972b5857
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187282
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-07-10 19:05:48 +02:00

53 lines
1.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <bit>
#include <stdexcept>
#include <o3tl/concepts.hxx>
namespace o3tl
{
struct divide_by_zero final : public std::runtime_error
{
explicit divide_by_zero()
: std::runtime_error("divide by zero")
{
}
};
template <o3tl::integral T, o3tl::integral U>
constexpr T convertToHex(U aChar)
{
if (aChar >= '0' && aChar <= '9')
return T(aChar - '0');
else if (aChar >= 'a' && aChar <= 'f')
return T(aChar - 'a' + 10);
else if (aChar >= 'A' && aChar <= 'F')
return T(aChar - 'A' + 10);
return T(-1);
}
template <o3tl::integral T, o3tl::integral U>
constexpr T convertToHex(U cHigh, U cLow)
{
return (o3tl::convertToHex<T>(cHigh) << 4) | o3tl::convertToHex<T>(cLow);
}
template <o3tl::integral T>
constexpr unsigned int number_of_bits(T x)
{
return sizeof(T) * 8 - std::countl_zero(x);
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */