Blame


1 b3f61791 2004-03-21 devnull #include "os.h"
2 b3f61791 2004-03-21 devnull #include <mp.h>
3 b3f61791 2004-03-21 devnull #include "dat.h"
4 b3f61791 2004-03-21 devnull
5 b3f61791 2004-03-21 devnull #define VLDIGITS (sizeof(vlong)/sizeof(mpdigit))
6 b3f61791 2004-03-21 devnull
7 b3f61791 2004-03-21 devnull /*
8 b3f61791 2004-03-21 devnull * this code assumes that a vlong is an integral number of
9 b3f61791 2004-03-21 devnull * mpdigits long.
10 b3f61791 2004-03-21 devnull */
11 b3f61791 2004-03-21 devnull mpint*
12 b3f61791 2004-03-21 devnull uvtomp(uvlong v, mpint *b)
13 b3f61791 2004-03-21 devnull {
14 b3f61791 2004-03-21 devnull int s;
15 b3f61791 2004-03-21 devnull
16 b3f61791 2004-03-21 devnull if(b == nil)
17 b3f61791 2004-03-21 devnull b = mpnew(VLDIGITS*sizeof(mpdigit));
18 b3f61791 2004-03-21 devnull else
19 b3f61791 2004-03-21 devnull mpbits(b, VLDIGITS*sizeof(mpdigit));
20 b3f61791 2004-03-21 devnull mpassign(mpzero, b);
21 b3f61791 2004-03-21 devnull if(v == 0)
22 b3f61791 2004-03-21 devnull return b;
23 b3f61791 2004-03-21 devnull for(s = 0; s < VLDIGITS && v != 0; s++){
24 b3f61791 2004-03-21 devnull b->p[s] = v;
25 b3f61791 2004-03-21 devnull v >>= sizeof(mpdigit)*8;
26 b3f61791 2004-03-21 devnull }
27 b3f61791 2004-03-21 devnull b->top = s;
28 b3f61791 2004-03-21 devnull return b;
29 b3f61791 2004-03-21 devnull }
30 b3f61791 2004-03-21 devnull
31 b3f61791 2004-03-21 devnull uvlong
32 b3f61791 2004-03-21 devnull mptouv(mpint *b)
33 b3f61791 2004-03-21 devnull {
34 b3f61791 2004-03-21 devnull uvlong v;
35 b3f61791 2004-03-21 devnull int s;
36 b3f61791 2004-03-21 devnull
37 b3f61791 2004-03-21 devnull if(b->top == 0)
38 b3f61791 2004-03-21 devnull return 0LL;
39 b3f61791 2004-03-21 devnull
40 b3f61791 2004-03-21 devnull mpnorm(b);
41 b3f61791 2004-03-21 devnull if(b->top > VLDIGITS)
42 b3f61791 2004-03-21 devnull return MAXVLONG;
43 b3f61791 2004-03-21 devnull
44 b3f61791 2004-03-21 devnull v = 0ULL;
45 b3f61791 2004-03-21 devnull for(s = 0; s < b->top; s++)
46 b3f61791 2004-03-21 devnull v |= b->p[s]<<(s*sizeof(mpdigit)*8);
47 b3f61791 2004-03-21 devnull
48 b3f61791 2004-03-21 devnull return v;
49 b3f61791 2004-03-21 devnull }