00001
00039 #ifndef ABA_CUTBUFFER_H
00040 #define ABA_CUTBUFFER_H
00041
00042 #include "abacus/array.h"
00043
00044 class ABA_MASTER;
00045 template<class BaseType, class CoType> class ABA_POOLSLOT;
00046 template<class BaseType, class CoType> class ABA_POOLSLOTREF;
00047
00048 template<class BaseType, class CoType>
00049 class ABA_CUTBUFFER : public ABA_ABACUSROOT {
00050 friend class ABA_SUB;
00051 public:
00052
00059 ABA_CUTBUFFER(ABA_MASTER *master, int size);
00060
00069 ~ABA_CUTBUFFER();
00070
00073 int size() const;
00074
00077 int number() const;
00078
00079
00082 int space() const;
00083
00102 int insert(ABA_POOLSLOT<BaseType, CoType> *slot, bool keepInPool);
00103
00114 int insert(ABA_POOLSLOT<BaseType, CoType> *slot, bool keepInPool,
00115 double rank);
00116
00121 void remove(ABA_BUFFER<int> &index);
00122
00125 ABA_POOLSLOT<BaseType, CoType> *slot(int i);
00126
00127 private:
00128
00138 void extract(int max, ABA_BUFFER<ABA_POOLSLOT<BaseType, CoType>*> &newSlots);
00139
00145 void sort(int threshold);
00146
00147
00150 ABA_MASTER *master_;
00151
00154 int n_;
00155
00158 ABA_ARRAY<ABA_POOLSLOTREF<BaseType, CoType>*> psRef_;
00159
00164 ABA_ARRAY<bool> keepInPool_;
00165
00168 ABA_ARRAY<double> rank_;
00169
00173 bool ranking_;
00174 ABA_CUTBUFFER(const ABA_CUTBUFFER<BaseType, CoType> &rhs);
00175 const ABA_CUTBUFFER<BaseType, CoType>
00176 &operator=(const ABA_CUTBUFFER<BaseType, CoType> &rhs);
00177 };
00178
00179 #include "abacus/cutbuffer.inc"
00180
00181 #endif // !ABA_CUTBUFFER_H
00182