diff options
Diffstat (limited to 'src/zstr_length.c')
| -rw-r--r-- | src/zstr_length.c | 28 |
1 files changed, 28 insertions, 0 deletions
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; +} |
