39 lines
711 B
C
39 lines
711 B
C
|
|
#include <blue/core/misc.h>
|
||
|
|
|
||
|
|
#define LENGTH_RET(v, boundary, len) \
|
||
|
|
if ((v) < (boundary)) \
|
||
|
|
return (len);
|
||
|
|
|
||
|
|
size_t b_int_length(intptr_t v)
|
||
|
|
{
|
||
|
|
size_t len = 0;
|
||
|
|
if (v < 0) {
|
||
|
|
v *= -1;
|
||
|
|
len++;
|
||
|
|
}
|
||
|
|
|
||
|
|
return len + b_uint_length(v);
|
||
|
|
}
|
||
|
|
|
||
|
|
size_t b_uint_length(uintptr_t v)
|
||
|
|
{
|
||
|
|
LENGTH_RET(v, 10, 1);
|
||
|
|
LENGTH_RET(v, 100, 2);
|
||
|
|
LENGTH_RET(v, 1000, 3);
|
||
|
|
LENGTH_RET(v, 10000, 4);
|
||
|
|
LENGTH_RET(v, 100000, 5);
|
||
|
|
LENGTH_RET(v, 1000000, 6);
|
||
|
|
LENGTH_RET(v, 10000000, 7);
|
||
|
|
LENGTH_RET(v, 100000000, 8);
|
||
|
|
LENGTH_RET(v, 1000000000, 9);
|
||
|
|
LENGTH_RET(v, 10000000000, 10);
|
||
|
|
|
||
|
|
size_t len = 0;
|
||
|
|
while (v > 0) {
|
||
|
|
v /= 10;
|
||
|
|
len++;
|
||
|
|
}
|
||
|
|
|
||
|
|
return len;
|
||
|
|
}
|