 |
NEURON
|
Go to the documentation of this file. 16 #define declarePool(Pool,T) \ 19 Pool(long count, int mkmut = 0); \ 23 int maxget() { return maxget_;} \ 41 #define implementPool(Pool,T) \ 42 Pool::Pool(long count, int mkmut) { \ 44 pool_ = new T[count_]; \ 46 items_ = new T*[count_]; \ 47 {for (long i = 0; i < count_; ++i) items_[i] = pool_ + i;} \ 57 assert(get_ == put_); \ 58 Pool* p = new Pool(count_); \ 61 long newcnt = 2*count_; \ 62 T** itms = new T*[newcnt]; \ 65 {for (i = 0; i < get_; ++i) { \ 66 itms[i] = items_[i]; \ 68 {for (i = get_, j = 0; j < count_; ++i, ++j) { \ 69 itms[i] = p->items_[j]; \ 71 {for (i = put_, j = get_; j < count_; ++i, ++j) { \ 72 itms[i] = items_[j]; \ 75 delete [] p->items_; \ 94 {if (nget_ >= count_) { grow(); }} \ 95 T* item = items_[get_]; \ 96 get_ = (get_+1)%count_; \ 98 {if (nget_ > maxget_) { maxget_ = nget_; }} \ 103 void Pool::hpfree(T* item) { \ 106 items_[put_] = item; \ 107 put_ = (put_ + 1)%count_; \ 112 void Pool::free_all() { \ 119 {for(pp = this; pp; pp = pp->chain_) { \ 120 for (i=0; i < pp->pool_size_; ++i) { \ 121 items_[put_++] = pp->pool_ + i; \ 122 pp->pool_[i].clear(); \ 125 assert(put_ == count_); \