SafeSize.h 525 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. class SafeSize
  3. {
  4. public:
  5. SafeSize()
  6. {
  7. value = 0;
  8. overflow = false;
  9. }
  10. void Add(size_t add)
  11. {
  12. if (!overflow)
  13. {
  14. value += add;
  15. if (value < add)
  16. overflow=true;
  17. }
  18. }
  19. void AddN(size_t size, size_t count)
  20. {
  21. if (!overflow)
  22. {
  23. size_t total = size * count;
  24. if (total < size)
  25. {
  26. overflow = true;
  27. }
  28. else
  29. {
  30. Add(total);
  31. }
  32. }
  33. }
  34. bool Overflowed() const
  35. {
  36. return overflow;
  37. }
  38. operator size_t ()
  39. {
  40. return value;
  41. }
  42. private:
  43. size_t value;
  44. bool overflow;
  45. };