enums.c 683 B

1234567891011121314151617181920212223242526272829303132
  1. #include <math.h>
  2. #include <stdio.h>
  3. void bmx_enum_next_power(int t, long long * val, unsigned long long * ret) {
  4. unsigned long long result = pow(2.0, ceil(log(*val)/log(2))) + 0.5;
  5. switch (t) {
  6. case 'b':
  7. *ret = result < 0xffLLU ? result : 0;
  8. break;
  9. case 's':
  10. *ret = result < 0xffffLLU ? result : 0;
  11. break;
  12. case 'i':
  13. case 'u':
  14. *ret = result < 0xffffffffLLU ? result : 0;
  15. break;
  16. case 'l':
  17. case 'y':
  18. *ret = result < 0xffffffffffffffffLLU ? result : 0;
  19. break;
  20. case 'z':
  21. if (sizeof(size_t) == 8) {
  22. *ret = result < 0xffffffffLLU ? result : 0;
  23. } else {
  24. *ret = result < 0xffffffffffffffffLLU ? result : 0;
  25. }
  26. break;
  27. }
  28. }