roll_value.c 1.5 KB

12345678910111213141516171819202122232425262728
  1. #include "roll_value.h"
  2. #define TOTP_ROLL_VALUE_FN(type, step_type) \
  3. TOTP_ROLL_VALUE_FN_HEADER(type, step_type) { \
  4. type v = *value; \
  5. if(step > 0 && v > max - step) { \
  6. if(overflow_behavior == RollOverflowBehaviorRoll) { \
  7. v = min; \
  8. } else if(overflow_behavior == RollOverflowBehaviorStop) { \
  9. v = max; \
  10. } \
  11. } else if(step < 0 && v < min - step) { \
  12. if(overflow_behavior == RollOverflowBehaviorRoll) { \
  13. v = max; \
  14. } else if(overflow_behavior == RollOverflowBehaviorStop) { \
  15. v = min; \
  16. } \
  17. } else { \
  18. v += step; \
  19. } \
  20. *value = v; \
  21. }
  22. TOTP_ROLL_VALUE_FN(int8_t, int8_t)
  23. TOTP_ROLL_VALUE_FN(uint8_t, int8_t)
  24. TOTP_ROLL_VALUE_FN(size_t, int16_t);