worldkey.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef __WORLD_KEY_H
  2. #define __WORLD_KEY_H
  3. namespace worldkey {
  4. struct key_t {
  5. int worldx;
  6. int worldy;
  7. int worldz;
  8. key_t(int x = 0, int y = 0, int z = 0) : worldx(x), worldy(y), worldz(z)
  9. {}
  10. template <typename PLAYER>
  11. key_t(const PLAYER& p) :
  12. worldx(p.worldx), worldy(p.worldy), worldz(p.worldz)
  13. {}
  14. bool operator<(const key_t& a) const {
  15. if (worldz < a.worldz) return true;
  16. if (worldz == a.worldz && worldx < a.worldx) return true;
  17. if (worldz == a.worldz && worldx == a.worldx && worldy < a.worldy) return true;
  18. return false;
  19. }
  20. bool operator==(const key_t& a) const {
  21. return (worldx == a.worldx && worldy == a.worldy && worldz == a.worldz);
  22. }
  23. };
  24. }
  25. namespace serialize {
  26. template <>
  27. struct reader<worldkey::key_t> {
  28. void read(Source& s, worldkey::key_t& t) {
  29. serialize::read(s, t.worldx);
  30. serialize::read(s, t.worldy);
  31. serialize::read(s, t.worldz);
  32. }
  33. };
  34. template <>
  35. struct writer<worldkey::key_t> {
  36. void write(Sink& s, const worldkey::key_t& t) {
  37. serialize::write(s, t.worldx);
  38. serialize::write(s, t.worldy);
  39. serialize::write(s, t.worldz);
  40. }
  41. };
  42. }
  43. namespace std {
  44. template <>
  45. struct hash<worldkey::key_t> {
  46. size_t operator()(const worldkey::key_t& k) const {
  47. return hash<int>()(k.worldx) + hash<int>()(k.worldy) + hash<int>()(k.worldz);
  48. }
  49. };
  50. }
  51. #endif