IdentifierBase.h 997 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * IdentifierBase.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. class IdentifierBase
  12. {
  13. protected:
  14. constexpr IdentifierBase():
  15. num(-1)
  16. {}
  17. explicit constexpr IdentifierBase(int32_t value):
  18. num(value)
  19. {}
  20. ~IdentifierBase() = default;
  21. public:
  22. int32_t num;
  23. constexpr int32_t getNum() const
  24. {
  25. return num;
  26. }
  27. constexpr void setNum(int32_t value)
  28. {
  29. num = value;
  30. }
  31. struct hash
  32. {
  33. size_t operator()(const IdentifierBase & id) const
  34. {
  35. return std::hash<int>()(id.num);
  36. }
  37. };
  38. template <typename Handler> void serialize(Handler &h, const int version)
  39. {
  40. h & num;
  41. }
  42. constexpr void advance(int change)
  43. {
  44. num += change;
  45. }
  46. constexpr operator int32_t () const
  47. {
  48. return num;
  49. }
  50. friend std::ostream& operator<<(std::ostream& os, const IdentifierBase& dt)
  51. {
  52. return os << dt.num;
  53. }
  54. };