00001 00035 #ifndef ABA_POOLSLOTREF_H 00036 #define ABA_POOLSLOTREF_H 00037 00038 #include "abacus/abacusroot.h" 00039 00040 #include <iostream> 00041 class ABA_MASTER; 00042 template<class BaseType, class CoType> 00043 class ABA_POOLSLOT; 00044 00045 #ifdef ABACUS_NEW_TEMPLATE_SYNTAX 00046 template<class BaseType, class CoType> 00047 class ABA_POOLSLOTREF; 00048 00049 template<class BaseType, class CoType> 00050 ostream &operator<< (ostream &out, const ABA_POOLSLOTREF<BaseType, CoType> &rhs); 00051 #endif 00052 00053 template<class BaseType, class CoType> 00054 class ABA_POOLSLOTREF : public ABA_ABACUSROOT { 00055 public: 00056 00061 ABA_POOLSLOTREF(ABA_MASTER *master); 00062 00070 ABA_POOLSLOTREF(ABA_POOLSLOT<BaseType, CoType> *slot); 00071 00080 ABA_POOLSLOTREF(const ABA_POOLSLOTREF<BaseType, CoType> &rhs); 00081 00091 ~ABA_POOLSLOTREF(); 00092 #ifdef ABACUS_NEW_TEMPLATE_SYNTAX 00093 00103 friend ostream &operator<< <> (ostream &, const ABA_POOLSLOTREF &); 00104 #else 00105 00115 friend ostream &operator<< (ostream &out, const ABA_POOLSLOTREF &rhs); 00116 #endif 00117 00123 BaseType *conVar() const; 00124 00129 unsigned long version() const; 00130 00133 ABA_POOLSLOT<BaseType, CoType> *slot() const; 00134 00145 void slot(ABA_POOLSLOT<BaseType, CoType> *s); 00146 00147 private: 00148 00151 ABA_MASTER *master_; 00152 00155 ABA_POOLSLOT<BaseType, CoType> *slot_; 00156 00160 unsigned long version_; 00161 void printDifferentVersionError() const; 00162 const ABA_POOLSLOTREF<BaseType, CoType> 00163 &operator=(const ABA_POOLSLOTREF<BaseType, CoType> &rhs); 00164 }; 00165 00166 #include "abacus/poolslotref.inc" 00167 00168 #endif // ABA_POOLSLOTREF_H 00169