diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 21:50:23 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 21:50:23 -0800 |
commit | 28ecc68841b233188754dd2603566ddf04c288c3 (patch) | |
tree | e6107bbcdc36815d362b029f2e84de93ad172547 /util.cpp | |
parent | 7c7aba1202a2c205facd64ab728dcb9472a0b6e1 (diff) |
Migrated some more data structures to the STL. Removed some ad-hoc data structure implementations.
Diffstat (limited to 'util.cpp')
-rw-r--r-- | util.cpp | 189 |
1 files changed, 0 insertions, 189 deletions
@@ -101,88 +101,6 @@ int maxi( int a, } -/* Queue functions */ - - -void q_init( dyn_queue_t *q ) -{ - q->start = (void **)malloc( sizeof(void*)*1 ); - if( !q->start ) - { - oom_handler( q ); - return; - } - q->stop = &q->start[1]; - q->put_pos = q->get_pos = q->start; -} - -void q_destroy( dyn_queue_t *q ) -{ - free( q->start ); -} - -/** - Reallocate the queue_t -*/ -static int q_realloc( dyn_queue_t *q ) -{ - void **old_start = q->start; - void **old_stop = q->stop; - ptrdiff_t diff; - int new_size; - - new_size = 2*(q->stop-q->start); - - q->start=(void**)realloc( q->start, sizeof(void*)*new_size ); - if( !q->start ) - { - q->start = old_start; - oom_handler( q ); - return 0; - } - - diff = q->start - old_start; - q->get_pos += diff; - q->stop = &q->start[new_size]; - memcpy( old_stop + diff, q->start, sizeof(void*)*(q->get_pos-q->start)); - q->put_pos = old_stop + diff + (q->get_pos-q->start); - - return 1; -} - -int q_put( dyn_queue_t *q, void *e ) -{ - *q->put_pos = e; - -// fprintf( stderr, "Put element %d to queue %d\n", e, q ); - - if( ++q->put_pos == q->stop ) - q->put_pos = q->start; - if( q->put_pos == q->get_pos ) - return q_realloc( q ); - return 1; -} - -void *q_get( dyn_queue_t *q) -{ - void *e = *q->get_pos; - if( ++q->get_pos == q->stop ) - q->get_pos = q->start; - return e; -} - -void *q_peek( dyn_queue_t *q ) -{ - return *q->get_pos; -} - -int q_empty( dyn_queue_t *q ) -{ -// fprintf( stderr, "Queue %d is %s\n", q, (q->put_pos == q->get_pos)?"empty":"non-empty" ); - return q->put_pos == q->get_pos; -} - - /* Hash table functions */ void hash_init2( hash_table_t *h, @@ -664,113 +582,6 @@ int hash_ptr_cmp( void *a, return a == b; } -void pq_init( priority_queue_t *q, - int (*compare)(void *e1, void *e2) ) -{ - q->arr=0; - q->size=0; - q->count=0; - q->compare = compare; -} - - -int pq_put( priority_queue_t *q, - void *e ) -{ - int i; - - if( q->size == q->count ) - { - void **old_arr = q->arr; - int old_size = q->size; - q->size = maxi( 4, 2*q->size ); - q->arr = (void **)realloc( q->arr, sizeof(void*)*q->size ); - if( q->arr == 0 ) - { - oom_handler( q ); - q->arr = old_arr; - q->size = old_size; - return 0; - } - } - - i = q->count; - while( (i>0) && (q->compare( q->arr[(i-1)/2], e )<0 ) ) - { - q->arr[i] = q->arr[(i-1)/2]; - i = (i-1)/2; - } - q->arr[i]=e; - - q->count++; - - return 1; - -} - -/** - Make a valid head -*/ -static void pq_heapify( priority_queue_t *q, int i ) -{ - int l, r, largest; - l = 2*(i)+1; - r = 2*(i)+2; - if( (l < q->count) && (q->compare(q->arr[l],q->arr[i])>0) ) - { - largest = l; - } - else - { - largest = i; - } - if( (r < q->count) && (q->compare( q->arr[r],q->arr[largest])>0) ) - { - largest = r; - } - - if( largest != i ) - { - void *tmp = q->arr[largest]; - q->arr[largest]=q->arr[i]; - q->arr[i]=tmp; - pq_heapify( q, largest ); - } -} - -void *pq_get( priority_queue_t *q ) -{ - void *result = q->arr[0]; - q->arr[0] = q->arr[--q->count]; - pq_heapify( q, 0 ); - -/* pq_check(q, 0 ); */ -/* pq_print( q ); */ - - return result; -} - -void *pq_peek( priority_queue_t *q ) -{ - return q->arr[0]; -} - -int pq_empty( priority_queue_t *q ) -{ - return q->count == 0; -} - -int pq_get_count( priority_queue_t *q ) -{ - return q->count; -} - -void pq_destroy( priority_queue_t *q ) -{ - free( q->arr ); -} - - array_list_t *al_new() { array_list_t *res = (array_list_t *)malloc( sizeof( array_list_t ) ); |