ivate: void percolate_down( int hole ) { heap_timer* temp = array[hole]; int child = 0; for ( ; ((hole*2+1) <= (cur_size-1)); hole=child ) { child = hole*2+1; if ( (child < (cur_size-1)) && timercmp( &(array[child+1]->expire), &(array[child]->expire), < ) ) { ++child; } if ( timercmp( &(array[child]->expire), &(temp->expire), < ) ) { array[hole] = array[child]; } else { break; } } array[hole] = temp; } void resize() throw ( std::exception ) { heap_timer** temp = new heap_timer* [2*capacity]; for( int i = 0; i < 2*capacity; ++i ) { temp[i] = NULL; } if ( ! temp ) { throw std::exception(); } capacity = 2*capacity; for ( int i = 0; i < cur_size; ++i ) { temp[i] = array[i]; } delete [] array; array = temp; }
private: heap_timer** array; int capacity; int cur_size; };
|