1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #pragma once
- namespace Framework
- {
- template< class A, class B >
- class Pair
- {
- private:
- A *va;
- B *vb;
- int ref;
- public:
- Pair()
- {
- ref = 1;
- va = 0;
- vb = 0;
- }
- Pair( A *a, B *b )
- {
- ref = 1;
- va = a;
- vb = b;
- }
- ~Pair()
- {
- if( va )
- va->release();
- if( vb )
- vb->release();
- }
- A *getFirst()
- {
- return va ? va->getThis() : 0;
- }
- A *zFirst()
- {
- return va;
- }
- B *getSecond()
- {
- return vb ? vb->getThis() : 0;
- }
- B *zSecond()
- {
- return vb;
- }
- void setFirst( A *a )
- {
- if( va )
- va->release();
- va = a;
- }
- void setSecond( B *b )
- {
- if( vb )
- vb->release();
- vb = b;
- }
- Pair *getThis()
- {
- ref++;
- return this;
- }
- Pair *release()
- {
- if( !--ref )
- delete this;
- return 0;
- }
- };
- }
|