Pair.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #pragma once
  2. #include "ReferenceCounter.h"
  3. namespace Framework
  4. {
  5. template<class A, class B> class Pair : public virtual ReferenceCounter
  6. {
  7. private:
  8. A* va;
  9. B* vb;
  10. public:
  11. Pair()
  12. : ReferenceCounter()
  13. {
  14. va = 0;
  15. vb = 0;
  16. }
  17. Pair(A* a, B* b)
  18. : ReferenceCounter()
  19. {
  20. va = a;
  21. vb = b;
  22. }
  23. ~Pair()
  24. {
  25. if (va) va->release();
  26. if (vb) vb->release();
  27. }
  28. A* getFirst()
  29. {
  30. return va ? dynamic_cast<A*>(va->getThis()) : 0;
  31. }
  32. A* zFirst()
  33. {
  34. return va;
  35. }
  36. B* getSecond()
  37. {
  38. return vb ? dynamic_cast<B*>(vb->getThis()) : 0;
  39. }
  40. B* zSecond()
  41. {
  42. return vb;
  43. }
  44. void setFirst(A* a)
  45. {
  46. if (va) va->release();
  47. va = a;
  48. }
  49. void setSecond(B* b)
  50. {
  51. if (vb) vb->release();
  52. vb = b;
  53. }
  54. };
  55. } // namespace Framework