From: David Flynn <[email protected]>
Signed-off-by: David Flynn <[email protected]> --- schroedinger/schrodecoder.c | 73 ++++++++++++++++++++++++++++++++++++------- schroedinger/schrodecoder.h | 10 +++++- schroedinger/schroencoder.c | 31 ++++++++---------- schroedinger/schroengine.c | 30 +++++++++--------- schroedinger/schroqueue.c | 69 +++++------------------------------------ schroedinger/schroqueue.h | 16 ++-------- 6 files changed, 109 insertions(+), 120 deletions(-) diff --git a/schroedinger/schrodecoder.c b/schroedinger/schrodecoder.c index e0b9134..e3e7efd 100644 --- a/schroedinger/schrodecoder.c +++ b/schroedinger/schrodecoder.c @@ -392,7 +392,7 @@ schro_decoder_get_picture_number (SchroDecoder *decoder) void schro_decoder_add_output_picture (SchroDecoder *decoder, SchroFrame *frame) { - schro_queue_add (decoder->output_queue, frame, 0); + schro_queue_add (decoder->output_queue, frame); } /** @@ -473,7 +473,7 @@ schro_decoder_pull_is_ready_locked (SchroDecoder *decoder) if (decoder->coded_order) { picture = schro_queue_peek (decoder->picture_queue); } else { - picture = schro_queue_find (decoder->picture_queue, + picture = schro_picturequeue_find (decoder->picture_queue, decoder->next_frame_number); } if (!picture && !decoder->flushing && @@ -523,11 +523,11 @@ schro_decoder_pull (SchroDecoder *decoder) if (decoder->coded_order) { picture = schro_queue_peek (decoder->picture_queue); } else { - picture = schro_queue_find (decoder->picture_queue, decoder->next_frame_number); + picture = schro_picturequeue_find (decoder->picture_queue, decoder->next_frame_number); } if (picture) { if (picture->stages[SCHRO_DECODER_STAGE_DONE].is_done) { - schro_queue_remove (decoder->picture_queue, picture->picture_number); + schro_picturequeue_remove (decoder->picture_queue, picture->picture_number); } else { picture = NULL; } @@ -601,7 +601,7 @@ schro_decoder_get_status_locked (SchroDecoder *decoder) if (decoder->coded_order) { next_picture = schro_queue_peek (decoder->picture_queue); } else { - next_picture = schro_queue_find (decoder->picture_queue, decoder->next_frame_number); + next_picture = schro_picturequeue_find (decoder->picture_queue, decoder->next_frame_number); } if (decoder->flushing && next_picture == NULL) { if (decoder->end_of_stream) { @@ -635,7 +635,7 @@ schro_decoder_dump (SchroDecoder *decoder) SCHRO_ERROR("index, picture_number, busy, state, needed_state, working"); for(i=0;i<decoder->picture_queue->n;i++){ - SchroPicture *picture = decoder->picture_queue->elements[i].data; + SchroPicture *picture = decoder->picture_queue->elements[i]; SCHRO_ERROR("%d: %d %d %04x %04x %04x", i, picture->picture_number, @@ -866,7 +866,7 @@ schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer) schro_async_lock (decoder->async); SCHRO_DEBUG("adding %d to queue", picture->picture_number); - schro_queue_add (decoder->picture_queue, picture, picture->picture_number); + schro_queue_add (decoder->picture_queue, picture); schro_async_signal_scheduler (decoder->async); schro_async_unlock (decoder->async); @@ -994,7 +994,7 @@ schro_decoder_async_schedule (SchroDecoder *decoder, } for(i=0;i<decoder->picture_queue->n;i++){ - SchroPicture *picture = decoder->picture_queue->elements[i].data; + SchroPicture *picture = decoder->picture_queue->elements[i]; void *func = NULL; int stage = 0; @@ -2724,8 +2724,7 @@ schro_decoder_reference_add (SchroDecoder *decoder, SchroPicture *picture) SCHRO_ERROR("auto-retiring reference picture"); schro_queue_pop (decoder->reference_queue); } - schro_queue_add (decoder->reference_queue, schro_picture_ref(picture), - picture->picture_number); + schro_queue_add (decoder->reference_queue, schro_picture_ref(picture)); } static SchroPicture * @@ -2733,7 +2732,7 @@ schro_decoder_reference_get (SchroDecoder *decoder, SchroPictureNumber picture_number) { SCHRO_DEBUG("getting %d", picture_number); - return schro_queue_find (decoder->reference_queue, picture_number); + return schro_picturequeue_find (decoder->reference_queue, picture_number); } static void @@ -2741,7 +2740,7 @@ schro_decoder_reference_retire (SchroDecoder *decoder, SchroPictureNumber picture_number) { SCHRO_DEBUG("retiring %d", picture_number); - schro_queue_delete (decoder->reference_queue, picture_number); + schro_picturequeue_delete (decoder->reference_queue, picture_number); } static void @@ -2754,3 +2753,53 @@ schro_decoder_error (SchroDecoder *decoder, const char *s) } } +SchroPicture * +schro_picturequeue_find (SchroPictureQueue *queue, SchroPictureNumber picture_number) +{ + int i; + + for(i=0;i<queue->n;i++){ + if (((SchroPicture*)queue->elements[i])->picture_number == picture_number) { + return queue->elements[i]; + } + } + + return NULL; +} + +void +schro_picturequeue_delete (SchroQueue *queue, SchroPictureNumber picture_number) +{ + int i; + + for(i=0;i<queue->n;i++){ + if (((SchroPicture*)queue->elements[i])->picture_number == picture_number) { + if (queue->free) { + queue->free(queue->elements[i]); + } + memmove (queue->elements + i, queue->elements + i + 1, + sizeof(SchroQueueElement)*(queue->n - i - 1)); + queue->n--; + return; + } + } +} + +SchroPicture * +schro_picturequeue_remove (SchroQueue *queue, SchroPictureNumber picture_number) +{ + int i; + void *ret; + + for(i=0;i<queue->n;i++){ + if (((SchroPicture*)queue->elements[i])->picture_number == picture_number) { + ret = queue->elements[i]; + memmove (queue->elements + i, queue->elements + i + 1, + sizeof(SchroQueueElement)*(queue->n - i - 1)); + queue->n--; + return ret; + } + } + + return NULL; +} diff --git a/schroedinger/schrodecoder.h b/schroedinger/schrodecoder.h index c37de5e..d138f65 100644 --- a/schroedinger/schrodecoder.h +++ b/schroedinger/schrodecoder.h @@ -16,6 +16,7 @@ SCHRO_BEGIN_DECLS typedef struct _SchroDecoder SchroDecoder; typedef struct _SchroPicture SchroPicture; +typedef SchroQueue SchroPictureQueue; #ifdef SCHRO_ENABLE_UNSTABLE_API @@ -51,8 +52,8 @@ struct _SchroDecoder { int level; SchroVideoFormat video_format; - SchroQueue *frame_queue; - SchroQueue *picture_queue; + SchroPictureQueue *frame_queue; + SchroPictureQueue *picture_queue; int queue_depth; int end_of_stream; @@ -173,6 +174,11 @@ SchroPicture * schro_picture_new (SchroDecoder *decoder); SchroPicture * schro_picture_ref (SchroPicture *picture); void schro_picture_unref (SchroPicture *picture); +/* Picture queue search functions */ +SchroPicture *schro_picturequeue_find (SchroPictureQueue *queue, SchroPictureNumber picture_number); +void schro_picturequeue_delete (SchroPictureQueue *queue, SchroPictureNumber picture_number); +SchroPicture *schro_picturequeue_remove (SchroPictureQueue *queue, SchroPictureNumber picture_number); + int schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer); void schro_decoder_parse_picture (SchroPicture *picture); void schro_decoder_parse_picture_header (SchroPicture *picture); diff --git a/schroedinger/schroencoder.c b/schroedinger/schroencoder.c index 493c5c6..35d0ce7 100644 --- a/schroedinger/schroencoder.c +++ b/schroedinger/schroencoder.c @@ -536,8 +536,7 @@ schro_encoder_push_frame_full (SchroEncoder *encoder, SchroFrame *frame, void *p SCHRO_ERROR("push when queue full"); SCHRO_ASSERT(0); } - schro_queue_add (encoder->frame_queue, encoder_frame, - encoder_frame->frame_number); + schro_queue_add (encoder->frame_queue, encoder_frame); schro_async_signal_scheduler (encoder->async); schro_async_unlock (encoder->async); } else { @@ -579,10 +578,8 @@ schro_encoder_push_frame_full (SchroEncoder *encoder, SchroFrame *frame, void *p SCHRO_ERROR("push when queue full"); SCHRO_ASSERT(0); } - schro_queue_add (encoder->frame_queue, encoder_frame1, - encoder_frame1->frame_number); - schro_queue_add (encoder->frame_queue, encoder_frame2, - encoder_frame2->frame_number); + schro_queue_add (encoder->frame_queue, encoder_frame1); + schro_queue_add (encoder->frame_queue, encoder_frame2); schro_async_signal_scheduler (encoder->async); schro_async_unlock (encoder->async); } @@ -595,7 +592,7 @@ schro_encoder_pull_is_ready_locked (SchroEncoder *encoder) for(i=0;i<encoder->frame_queue->n;i++){ SchroEncoderFrame *frame; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->slot == encoder->output_slot && (frame->stages[SCHRO_ENCODER_FRAME_STAGE_DONE].is_done)) { return TRUE; @@ -616,7 +613,7 @@ schro_encoder_shift_frame_queue (SchroEncoder *encoder) SchroEncoderFrame *frame; while (!schro_queue_is_empty(encoder->frame_queue)) { - frame = encoder->frame_queue->elements[0].data; + frame = encoder->frame_queue->elements[0]; if (!(frame->stages[SCHRO_ENCODER_FRAME_STAGE_FREE].is_done)) { break; } @@ -729,7 +726,7 @@ schro_encoder_pull_full (SchroEncoder *encoder, int *presentation_frame, schro_async_lock (encoder->async); for(i=0;i<encoder->frame_queue->n;i++){ SchroEncoderFrame *frame; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->slot == encoder->output_slot && (frame->stages[SCHRO_ENCODER_FRAME_STAGE_DONE].is_done)) { int is_picture = FALSE; @@ -885,7 +882,7 @@ schro_encoder_end_of_stream (SchroEncoder *encoder) if (encoder->frame_queue->n > 0) { SchroEncoderFrame *encoder_frame; - encoder_frame = encoder->frame_queue->elements[encoder->frame_queue->n-1].data; + encoder_frame = encoder->frame_queue->elements[encoder->frame_queue->n-1]; encoder_frame->last_frame = TRUE; } schro_async_unlock (encoder->async); @@ -1151,7 +1148,7 @@ schro_encoder_wait (SchroEncoder *encoder) SCHRO_WARNING ("deadlock? kicking scheduler"); for(i=0;i<encoder->frame_queue->n;i++){ - SchroEncoderFrame *frame = encoder->frame_queue->elements[i].data; + SchroEncoderFrame *frame = encoder->frame_queue->elements[i]; SCHRO_WARNING("%d: %d %d %d %d %04x", i, frame->frame_number, frame->picture_number_ref[0], frame->picture_number_ref[1], frame->busy, 0 /*frame->state*/); @@ -1300,7 +1297,7 @@ schro_encoder_async_schedule (SchroEncoder *encoder, SchroExecDomain exec_domain SCHRO_INFO("iterate %d", encoder->completed_eos); for(i=0;i<encoder->frame_queue->n;i++) { - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; SCHRO_DEBUG("analyse i=%d picture=%d state=%d busy=%d", i, frame->frame_number, 0 /*frame->state*/, frame->busy); @@ -1316,7 +1313,7 @@ schro_encoder_async_schedule (SchroEncoder *encoder, SchroExecDomain exec_domain } for(i=0;i<encoder->frame_queue->n;i++) { - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->frame_number == encoder->gop_picture) { encoder->handle_gop (encoder, i); break; @@ -1327,7 +1324,7 @@ schro_encoder_async_schedule (SchroEncoder *encoder, SchroExecDomain exec_domain * first for reference pictures, then for non-ref. */ for(ref = 1; ref >= 0; ref--){ for(i=0;i<encoder->frame_queue->n;i++) { - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; SCHRO_DEBUG("backref i=%d picture=%d state=%d busy=%d", i, frame->frame_number, 0 /*frame->state*/, frame->busy); @@ -1373,7 +1370,7 @@ schro_encoder_async_schedule (SchroEncoder *encoder, SchroExecDomain exec_domain } for(i=0;i<encoder->frame_queue->n;i++) { - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->slot == encoder->quant_slot) { int ret; ret = encoder->handle_quants (encoder, i); @@ -1383,7 +1380,7 @@ schro_encoder_async_schedule (SchroEncoder *encoder, SchroExecDomain exec_domain for(ref = 1; ref >= 0; ref--){ for(i=0;i<encoder->frame_queue->n;i++) { - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; SCHRO_DEBUG("backref i=%d picture=%d state=%d busy=%d", i, frame->frame_number, 0/*frame->state*/, frame->busy); @@ -3064,7 +3061,7 @@ schro_encoder_reference_add (SchroEncoder *encoder, SchroEncoderFrame *frame) SCHRO_DEBUG("adding reference %p %d", frame, frame->frame_number); schro_encoder_frame_ref (frame); - schro_queue_add (encoder->reference_queue, frame, frame->frame_number); + schro_queue_add (encoder->reference_queue, frame); } #endif diff --git a/schroedinger/schroengine.c b/schroedinger/schroengine.c index 959e79c..07e98c1 100644 --- a/schroedinger/schroengine.c +++ b/schroedinger/schroengine.c @@ -225,12 +225,12 @@ schro_engine_code_BBBP (SchroEncoder *encoder, int i, int gop_length) SchroPictureNumber ref1; SchroPictureNumber retire; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; /* BBBP */ frame->gop_length = gop_length; - f = encoder->frame_queue->elements[i+gop_length-1].data; + f = encoder->frame_queue->elements[i+gop_length-1]; if (f->start_sequence_header) { schro_encoder_pick_retire (f, &retire); @@ -249,7 +249,7 @@ schro_engine_code_BBBP (SchroEncoder *encoder, int i, int gop_length) } for (j = 0; j < gop_length - 1; j++) { - f = encoder->frame_queue->elements[i+j].data; + f = encoder->frame_queue->elements[i+j]; schro_encoder_pick_refs (f, &ref0, &ref1); schro_engine_code_picture (f, FALSE, -1, 2, ref0, ref1); @@ -260,7 +260,7 @@ schro_engine_code_BBBP (SchroEncoder *encoder, int i, int gop_length) f->picture_weight = encoder->magic_inter_b_weight; } - f = encoder->frame_queue->elements[i+gop_length-1].data; + f = encoder->frame_queue->elements[i+gop_length-1]; if (f->start_sequence_header) { schro_encoder_expire_refs_before (encoder, f->frame_number); } @@ -280,7 +280,7 @@ schro_engine_get_scene_change_score (SchroEncoder *encoder, int i) SchroEncoderFrame *frame2; double luma; - frame1 = encoder->frame_queue->elements[i].data; + frame1 = encoder->frame_queue->elements[i]; if (frame1->have_scene_change_score) return TRUE; frame2 = frame1->previous_frame; @@ -575,7 +575,7 @@ schro_encoder_handle_gop_tworef (SchroEncoder *encoder, int i) int gop_length; double scs_sum; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; SCHRO_ASSERT(frame->stages[SCHRO_ENCODER_FRAME_STAGE_HAVE_GOP].is_done == FALSE); @@ -600,7 +600,7 @@ schro_encoder_handle_gop_tworef (SchroEncoder *encoder, int i) return; } - f = encoder->frame_queue->elements[i+j].data; + f = encoder->frame_queue->elements[i+j]; SCHRO_ASSERT(f->stages[SCHRO_ENCODER_FRAME_STAGE_HAVE_GOP].is_done == FALSE); @@ -656,7 +656,7 @@ schro_encoder_handle_gop_tworef (SchroEncoder *encoder, int i) SCHRO_DEBUG("gop length %d", gop_length); for(j=0;j<gop_length-1;j++){ - f = encoder->frame_queue->elements[i+j].data; + f = encoder->frame_queue->elements[i+j]; SCHRO_ASSERT(f->start_sequence_header == FALSE); } @@ -666,7 +666,7 @@ schro_encoder_handle_gop_tworef (SchroEncoder *encoder, int i) schro_engine_code_BBBP (encoder, i, gop_length); } - f = encoder->frame_queue->elements[i+gop_length-1].data; + f = encoder->frame_queue->elements[i+gop_length-1]; if (f->start_sequence_header) { encoder->au_frame = f->frame_number; } @@ -696,7 +696,7 @@ schro_encoder_handle_quants (SchroEncoder *encoder, int i) { SchroEncoderFrame *frame; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->busy || !frame->stages[SCHRO_ENCODER_FRAME_STAGE_MODE_DECISION].is_done) return FALSE; @@ -728,7 +728,7 @@ schro_encoder_handle_gop_backref (SchroEncoder *encoder, int i) int j; int gop_length; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->busy || !frame->stages[SCHRO_ENCODER_FRAME_STAGE_ANALYSE].is_done) return; @@ -749,7 +749,7 @@ schro_encoder_handle_gop_backref (SchroEncoder *encoder, int i) } for (j = 0; j < gop_length; j++) { - f = encoder->frame_queue->elements[i+j].data; + f = encoder->frame_queue->elements[i+j]; if (f->busy || !f->stages[SCHRO_ENCODER_FRAME_STAGE_ANALYSE].is_done) { SCHRO_DEBUG("picture %d not ready", i + j); @@ -776,7 +776,7 @@ schro_encoder_handle_gop_backref (SchroEncoder *encoder, int i) encoder->last_ref = frame->frame_number; for (j = 1; j < gop_length; j++) { - f = encoder->frame_queue->elements[i+j].data; + f = encoder->frame_queue->elements[i+j]; schro_engine_code_picture (f, FALSE, -1, 1, frame->frame_number, -1); f->presentation_frame = f->frame_number; f->picture_weight = encoder->magic_inter_b_weight; @@ -814,7 +814,7 @@ schro_encoder_handle_gop_intra_only (SchroEncoder *encoder, int i) { SchroEncoderFrame *frame; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->busy || !frame->stages[SCHRO_ENCODER_FRAME_STAGE_ANALYSE].is_done) return; @@ -910,7 +910,7 @@ schro_encoder_handle_gop_lowdelay (SchroEncoder *encoder, int i) { SchroEncoderFrame *frame; - frame = encoder->frame_queue->elements[i].data; + frame = encoder->frame_queue->elements[i]; if (frame->busy || !frame->stages[SCHRO_ENCODER_FRAME_STAGE_ANALYSE].is_done) return; diff --git a/schroedinger/schroqueue.c b/schroedinger/schroqueue.c index 3c200ec..08b1731 100644 --- a/schroedinger/schroqueue.c +++ b/schroedinger/schroqueue.c @@ -19,7 +19,7 @@ schro_queue_new (int size, SchroQueueFreeFunc free_func) queue->size = size; queue->free = free_func; - queue->elements = schro_malloc0 (size * sizeof(SchroQueueElement)); + queue->elements = schro_malloc0 (size * sizeof(void *)); return queue; } @@ -32,7 +32,7 @@ schro_queue_free (SchroQueue *queue) if(queue->free) { for(i=0;i<queue->n;i++){ - queue->free (queue->elements[i].data, queue->elements[i].picture_number); + queue->free (queue->elements[i]); } } @@ -40,67 +40,14 @@ schro_queue_free (SchroQueue *queue) schro_free(queue); } -void schro_queue_add (SchroQueue *queue, void *data, - SchroPictureNumber picture_number) +void schro_queue_add (SchroQueue *queue, void *data) { SCHRO_ASSERT (queue->n < queue->size); - queue->elements[queue->n].data = data; - queue->elements[queue->n].picture_number = picture_number; + queue->elements[queue->n] = data; queue->n++; } -void * -schro_queue_find (SchroQueue *queue, SchroPictureNumber picture_number) -{ - int i; - - for(i=0;i<queue->n;i++){ - if (queue->elements[i].picture_number == picture_number) { - return queue->elements[i].data; - } - } - - return NULL; -} - -void -schro_queue_delete (SchroQueue *queue, SchroPictureNumber picture_number) -{ - int i; - - for(i=0;i<queue->n;i++){ - if (queue->elements[i].picture_number == picture_number) { - if (queue->free) { - queue->free(queue->elements[i].data, queue->elements[i].picture_number); - } - memmove (queue->elements + i, queue->elements + i + 1, - sizeof(SchroQueueElement)*(queue->n - i - 1)); - queue->n--; - return; - } - } -} - -void * -schro_queue_remove (SchroQueue *queue, SchroPictureNumber picture_number) -{ - int i; - void *ret; - - for(i=0;i<queue->n;i++){ - if (queue->elements[i].picture_number == picture_number) { - ret = queue->elements[i].data; - memmove (queue->elements + i, queue->elements + i + 1, - sizeof(SchroQueueElement)*(queue->n - i - 1)); - queue->n--; - return ret; - } - } - - return NULL; -} - void schro_queue_clear (SchroQueue *queue) { @@ -108,7 +55,7 @@ schro_queue_clear (SchroQueue *queue) for(i=0;i<queue->n;i++){ if (queue->free) { - queue->free (queue->elements[i].data, queue->elements[i].picture_number); + queue->free (queue->elements[i]); } } queue->n = 0; @@ -120,7 +67,7 @@ schro_queue_pop (SchroQueue *queue) if (queue->n == 0) return; if (queue->free) { - queue->free(queue->elements[0].data, queue->elements[0].picture_number); + queue->free(queue->elements[0]); } memmove (queue->elements, queue->elements + 1, sizeof(SchroQueueElement)*(queue->n - 1)); @@ -132,7 +79,7 @@ schro_queue_peek (SchroQueue *queue) { if (queue->n == 0) return NULL; - return queue->elements[0].data; + return queue->elements[0]; } void * @@ -142,7 +89,7 @@ schro_queue_pull (SchroQueue *queue) if (queue->n == 0) return NULL; - ret = queue->elements[0].data; + ret = queue->elements[0]; memmove (queue->elements, queue->elements + 1, sizeof(SchroQueueElement)*(queue->n - 1)); queue->n--; diff --git a/schroedinger/schroqueue.h b/schroedinger/schroqueue.h index d5479c6..dfba0d3 100644 --- a/schroedinger/schroqueue.h +++ b/schroedinger/schroqueue.h @@ -7,14 +7,9 @@ SCHRO_BEGIN_DECLS typedef struct _SchroQueue SchroQueue; -typedef struct _SchroQueueElement SchroQueueElement; +typedef void * SchroQueueElement; -typedef void (*SchroQueueFreeFunc)(void *data, SchroPictureNumber number); - -struct _SchroQueueElement { - void *data; - SchroPictureNumber picture_number; -}; +typedef void (*SchroQueueFreeFunc)(void *data); struct _SchroQueue { int size; @@ -28,12 +23,7 @@ struct _SchroQueue { SchroQueue *schro_queue_new (int size, SchroQueueFreeFunc func); void schro_queue_free (SchroQueue *queue); - -void schro_queue_add (SchroQueue *queue, void *element, - SchroPictureNumber picture_number); -void *schro_queue_find (SchroQueue *queue, SchroPictureNumber picture_number); -void schro_queue_delete (SchroQueue *queue, SchroPictureNumber picture_number); -void *schro_queue_remove (SchroQueue *queue, SchroPictureNumber picture_number); +void schro_queue_add (SchroQueue *queue, void *element); void schro_queue_clear (SchroQueue *queue); void schro_queue_pop (SchroQueue *queue); void * schro_queue_pull (SchroQueue *queue); -- 1.5.6.5 ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword _______________________________________________ Schrodinger-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/schrodinger-devel
