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