mptoi.c 580 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "os.h"
  2. #include <mp.h>
  3. #include "dat.h"
  4. /*
  5. * this code assumes that mpdigit is at least as
  6. * big as an int.
  7. */
  8. mpint*
  9. itomp(int i, mpint *b)
  10. {
  11. if(b == nil)
  12. b = mpnew(0);
  13. mpassign(mpzero, b);
  14. if(i != 0)
  15. b->top = 1;
  16. if(i < 0){
  17. b->sign = -1;
  18. *b->p = -i;
  19. } else
  20. *b->p = i;
  21. return b;
  22. }
  23. int
  24. mptoi(mpint *b)
  25. {
  26. uint x;
  27. if(b->top==0)
  28. return 0;
  29. x = *b->p;
  30. if(b->sign > 0){
  31. if(b->top > 1 || (x > MAXINT))
  32. x = (int)MAXINT;
  33. else
  34. x = (int)x;
  35. } else {
  36. if(b->top > 1 || x > MAXINT+1)
  37. x = (int)MININT;
  38. else
  39. x = -(int)x;
  40. }
  41. return x;
  42. }