die.h 803 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // die.hpp
  3. // dice-roll
  4. //
  5. // Created by Sam Jaffe on 12/1/18.
  6. // Copyright © 2018 Sam Jaffe. All rights reserved.
  7. //
  8. #pragma once
  9. #include <iosfwd>
  10. #include <memory>
  11. #include <vector>
  12. namespace dice {
  13. enum sign {
  14. PLUS = 1, MINUS = -1, ZERO = 0
  15. };
  16. template <typename T> static sign sgn(T val) {
  17. return sign((T(0) < val) - (val < T(0)));
  18. }
  19. int sgn(sign);
  20. std::string str(sign);
  21. struct die {
  22. sign sgn;
  23. int num, sides;
  24. };
  25. struct mod {
  26. operator int() const;
  27. sign sign;
  28. int value;
  29. };
  30. // Default value: 1{+0}
  31. struct dice {
  32. int num{1};
  33. std::vector<die> of{};
  34. std::vector<mod> modifier{+0};
  35. };
  36. std::ostream & operator<<(std::ostream & out, dice const & d);
  37. std::istream & operator>>(std::istream & out, dice & d);
  38. }