zstr_length.c - libzahl - big integer library
 (HTM) git clone git://git.suckless.org/libzahl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       zstr_length.c (645B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include "internals.h"
            3 
            4 #define num  libzahl_tmp_str_num
            5 #define mag  libzahl_tmp_str_mag
            6 #define div  libzahl_tmp_str_div
            7 
            8 
            9 size_t
           10 zstr_length(z_t a, unsigned long long int radix)
           11 {
           12         size_t size_total = 1, size_temp;
           13         if (check(radix < 2))
           14                 libzahl_failure(-ZERROR_INVALID_RADIX);
           15         zset(num, a);
           16         while (!zzero(num)) {
           17                 zsetu(mag, radix);
           18                 zset(div, mag);
           19                 size_temp = 1;
           20                 while (zcmpmag(mag, num) <= 0) {
           21                         zset(div, mag);
           22                         zsqr(mag, mag);
           23                         size_temp <<= 1;
           24                 }
           25                 size_temp >>= 1;
           26                 size_total += size_temp;
           27                 zdiv(num, num, div);
           28         }
           29         return size_total + (zsignum(a) < 0);
           30 }