plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

mptoi.c (580B)


      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 	mpassign(mpzero, b);
     16 	if(i != 0)
     17 		b->top = 1;
     18 	if(i < 0){
     19 		b->sign = -1;
     20 		*b->p = -i;
     21 	} else
     22 		*b->p = i;
     23 	return b;
     24 }
     25 
     26 int
     27 mptoi(mpint *b)
     28 {
     29 	uint x;
     30 
     31 	if(b->top==0)
     32 		return 0;
     33 	x = *b->p;
     34 	if(b->sign > 0){
     35 		if(b->top > 1 || (x > MAXINT))
     36 			x = (int)MAXINT;
     37 		else
     38 			x = (int)x;
     39 	} else {
     40 		if(b->top > 1 || x > MAXINT+1)
     41 			x = (int)MININT;
     42 		else
     43 			x = -(int)x;
     44 	}
     45 	return x;
     46 }