From ea2d6c93d28a9c5af94035057c52c36f0618ba2c Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 2 Mar 2016 09:11:48 +0100 Subject: zstr_length_positive is safe for non-positive, hence rename to zstr_length; and add zstr_length MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/zstr_length.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/zstr_length.c (limited to 'src/zstr_length.c') diff --git a/src/zstr_length.c b/src/zstr_length.c new file mode 100644 index 0000000..4edabb0 --- /dev/null +++ b/src/zstr_length.c @@ -0,0 +1,28 @@ +/* See LICENSE file for copyright and license details. */ +#include "internals" + +#define num libzahl_tmp_str_num +#define mag libzahl_tmp_str_mag +#define div libzahl_tmp_str_div + + +size_t +zstr_length(z_t a, unsigned long long int radix) +{ + size_t size_total = 1, size_temp; + zset(num, a); + while (!zzero(num)) { + zsetu(mag, radix); + zset(div, mag); + size_temp = 1; + while (zcmpmag(mag, num) <= 0) { + zset(div, mag); + zsqr(mag, mag); + size_temp <<= 1; + } + size_temp >>= 1; + size_total += size_temp; + zdiv(num, num, div); + } + return size_total; +} -- cgit v1.2.3-70-g09d2