Pair.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. namespace Framework
  3. {
  4. template< class A, class B >
  5. class Pair
  6. {
  7. private:
  8. A *va;
  9. B *vb;
  10. int ref;
  11. public:
  12. Pair()
  13. {
  14. ref = 1;
  15. va = 0;
  16. vb = 0;
  17. }
  18. Pair( A *a, B *b )
  19. {
  20. ref = 1;
  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 ? va->getThis() : 0;
  34. }
  35. A *zFirst()
  36. {
  37. return va;
  38. }
  39. B *getSecond()
  40. {
  41. return vb ? 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. Pair *getThis()
  60. {
  61. ref++;
  62. return this;
  63. }
  64. Pair *release()
  65. {
  66. if( !--ref )
  67. delete this;
  68. return 0;
  69. }
  70. };
  71. }