]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmp/port/mptoi.c
merge
[plan9front.git] / sys / src / libmp / port / mptoi.c
1 #include "os.h"
2 #include <mp.h>
3 #include "dat.h"
4
5 /*
6  *  this code assumes that mpdigit is at least as
7  *  big as an int.
8  */
9
10 mpint*
11 itomp(int i, mpint *b)
12 {
13         if(b == nil){
14                 b = mpnew(0);
15                 setmalloctag(b, getcallerpc(&i));
16         }
17         b->sign = (i >> (sizeof(i)*8 - 1)) | 1;
18         i *= b->sign;
19         *b->p = i;
20         b->top = 1;
21         return mpnorm(b);
22 }
23
24 int
25 mptoi(mpint *b)
26 {
27         uint x;
28
29         if(b->top==0)
30                 return 0;
31         x = *b->p;
32         if(b->sign > 0){
33                 if(b->top > 1 || (x > MAXINT))
34                         x = (int)MAXINT;
35                 else
36                         x = (int)x;
37         } else {
38                 if(b->top > 1 || x > MAXINT+1)
39                         x = (int)MININT;
40                 else
41                         x = -(int)x;
42         }
43         return x;
44 }