diff options
author | unknown <andrey@lmy004.> | 2005-12-12 21:19:19 +0100 |
---|---|---|
committer | unknown <andrey@lmy004.> | 2005-12-12 21:19:19 +0100 |
commit | 81eadfcac18f3adc29c55d440e62823855f5b070 (patch) | |
tree | bb204756d7ec8bb96576f0bacb52879ab6ddddbf /include/queues.h | |
parent | 1c5573a47c4ef43558770c1c4e536ba39114dcbb (diff) | |
download | mariadb-git-81eadfcac18f3adc29c55d440e62823855f5b070.tar.gz |
WL#1034 update
QUEUE implementation working now. this should be ready more or less
for testing once the debug output is being cleaned and some things
around DYNAMIC_ARRAY are cleaned
- fix handling in case of errors that lead to crashes, now no more crashes
in case of table corruption and such.
include/queues.h:
introduce a safe version of queue_insert that will extend the queue if
necessary. the auto_extent is passed to the _ex version of init_queue()
mysys/queues.c:
add init_queue_ex() implementation
add queue_insert_safe() implementation
sql/event.cc:
- move mysql_priv.h inclusion to event_priv.h
- use a priority queue instead of DYNAMIC_ARRAY which is sorted
sql/event.h:
reorder
sql/event_executor.cc:
reorder
sql/event_priv.h:
- reorder a bit
- add macroses and functions for queue manipulation which stay on top
of QUEUE (partly implemented for DYNAMIC_ARRAY but will be cleared to be
only for QUEUE).
sql/event_timed.cc:
allocate one more byte and zeroterminate, really
Diffstat (limited to 'include/queues.h')
-rw-r--r-- | include/queues.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/queues.h b/include/queues.h index a8b676b763c..8cb053831f2 100644 --- a/include/queues.h +++ b/include/queues.h @@ -35,6 +35,7 @@ typedef struct st_queue { uint offset_to_key; /* compare is done on element+offset */ int max_at_top; /* Set if queue_top gives max */ int (*compare)(void *, byte *,byte *); + uint auto_extent; } QUEUE; #define queue_top(queue) ((queue)->root[1]) @@ -49,14 +50,19 @@ typedef int (*queue_compare)(void *,byte *, byte *); int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key, pbool max_at_top, queue_compare compare, void *first_cmp_arg); +int init_queue_ex(QUEUE *queue,uint max_elements,uint offset_to_key, + pbool max_at_top, queue_compare compare, + void *first_cmp_arg, uint auto_extent); int reinit_queue(QUEUE *queue,uint max_elements,uint offset_to_key, pbool max_at_top, queue_compare compare, void *first_cmp_arg); int resize_queue(QUEUE *queue, uint max_elements); void delete_queue(QUEUE *queue); void queue_insert(QUEUE *queue,byte *element); +int queue_insert_safe(QUEUE *queue, byte *element); byte *queue_remove(QUEUE *queue,uint idx); #define queue_remove_all(queue) { (queue)->elements= 0; } +#define queue_is_full(queue) (queue->elements == queue->max_elements) void _downheap(QUEUE *queue,uint idx); void queue_fix(QUEUE *queue); #define is_queue_inited(queue) ((queue)->root != 0) |