mptoui.c 438 B

123456789101112131415161718192021222324252627282930313233
  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. uitomp(uint 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. *b->p = i;
  17. return b;
  18. }
  19. uint
  20. mptoui(mpint *b)
  21. {
  22. uint x;
  23. x = *b->p;
  24. if(b->sign < 0)
  25. x = 0;
  26. else if(b->top > 1 || (sizeof(mpdigit) > sizeof(uint) && x > MAXUINT))
  27. x = MAXUINT;
  28. return x;
  29. }