Pair.h 1.2 KB

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