00001 00049 #ifndef ABA_POOL_H 00050 #define ABA_POOL_H 00051 00052 #include "abacus/array.h" 00053 00054 class ABA_MASTER; 00055 class ABA_SUB; 00056 template<class BaseType, class CoType> class ABA_ACTIVE; 00057 template<class BaseType, class CoType> class ABA_CUTBUFFER; 00058 template<class BaseType, class CoType> class ABA_POOLSLOT; 00059 00060 #ifdef ABACUS_PARALLEL 00061 template <class Type> class ABA_IDMAP; 00062 #endif 00063 00064 template<class BaseType, class CoType> 00065 class ABA_POOL : public ABA_ABACUSROOT { 00066 public: 00067 enum RANKING {NO_RANK, RANK, ABS_RANK}; 00068 00069 00074 ABA_POOL(ABA_MASTER *master); 00075 00077 virtual ~ABA_POOL(); 00078 virtual ABA_POOLSLOT<BaseType, CoType> *insert(BaseType *cv) = 0; 00079 00085 void removeConVar(ABA_POOLSLOT<BaseType, CoType> *slot); 00086 00089 int number() const; 00090 virtual int separate(double *z, 00091 ABA_ACTIVE<CoType, BaseType> *active, 00092 ABA_SUB *sub, 00093 ABA_CUTBUFFER<BaseType, CoType> *cutBuffer, 00094 double minAbsViolation = 0.001, 00095 int ranking = 0) = 0; 00096 #ifdef ABACUS_PARALLEL 00097 00103 ABA_POOLSLOT<BaseType, CoType> *findSlot(const ABA_ID &id) const; 00104 00107 ABA_IDMAP<ABA_POOLSLOT<BaseType, CoType> > *identificationMap() const; 00108 #endif 00109 00110 protected: 00111 00125 virtual int softDeleteConVar(ABA_POOLSLOT<BaseType, CoType> *slot); 00126 00133 virtual void hardDeleteConVar(ABA_POOLSLOT<BaseType, CoType> *slot); 00134 virtual ABA_POOLSLOT<BaseType, CoType> *getSlot() = 0; 00135 virtual void putSlot(ABA_POOLSLOT<BaseType, CoType> *slot) = 0; 00136 ABA_MASTER *master_; 00137 int number_; 00138 #ifdef ABACUS_PARALLEL 00139 ABA_IDMAP<ABA_POOLSLOT<BaseType, CoType> > *identificationMap_; 00140 int index_; 00141 #endif 00142 }; 00143 00144 #include "abacus/pool.inc" 00145 00146 #endif // ABA_POOL_H 00147