queues.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   Code for generell handling of priority Queues.
  15.   Implemention of queues from "Algoritms in C" by Robert Sedgewick.
  16.   Copyright Monty Program KB.
  17.   By monty.
  18. */
  19. #ifndef _queues_h
  20. #define _queues_h
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. typedef struct st_queue {
  25.   byte **root;
  26.   void *first_cmp_arg;
  27.   uint elements;
  28.   uint max_elements;
  29.   uint offset_to_key; /* compare is done on element+offset */
  30.   int max_at_top; /* Set if queue_top gives max */
  31.   int  (*compare)(void *, byte *,byte *);
  32. } QUEUE;
  33. #define queue_top(queue) ((queue)->root[1])
  34. #define queue_element(queue,index) ((queue)->root[index+1])
  35. #define queue_end(queue) ((queue)->root[(queue)->elements])
  36. #define queue_replaced(queue) _downheap(queue,1)
  37. typedef int (*queue_compare)(void *,byte *, byte *);
  38. int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key,
  39.        pbool max_at_top, queue_compare compare,
  40.        void *first_cmp_arg);
  41. int reinit_queue(QUEUE *queue,uint max_elements,uint offset_to_key,
  42.                  pbool max_at_top, queue_compare compare,
  43.                  void *first_cmp_arg);
  44. int resize_queue(QUEUE *queue, uint max_elements);
  45. void delete_queue(QUEUE *queue);
  46. void queue_insert(QUEUE *queue,byte *element);
  47. byte *queue_remove(QUEUE *queue,uint idx);
  48. void _downheap(QUEUE *queue,uint idx);
  49. void queue_fix(QUEUE *queue);
  50. #define is_queue_inited(queue) ((queue)->root != 0)
  51. #ifdef __cplusplus
  52. }
  53. #endif
  54. #endif