![]() |
Leptonica 1.85.0
Image processing and image analysis suite
|
#include <string.h>#include "allheaders.h"Go to the source code of this file.
Functions | |
| static l_int32 | lqueueExtendArray (L_QUEUE *lq) |
| L_QUEUE * | lqueueCreate (l_int32 nalloc) |
| void | lqueueDestroy (L_QUEUE **plq, l_int32 freeflag) |
| l_ok | lqueueAdd (L_QUEUE *lq, void *item) |
| void * | lqueueRemove (L_QUEUE *lq) |
| l_int32 | lqueueGetCount (L_QUEUE *lq) |
| l_ok | lqueuePrint (FILE *fp, L_QUEUE *lq) |
Variables | |
| static const l_int32 | MIN_BUFFER_SIZE = 20 |
| static const l_int32 | INITIAL_BUFFER_ARRAYSIZE = 1024 |
Create/Destroy L_Queue
L_QUEUE *lqueueCreate()
void *lqueueDestroy()
Operations to add/remove to/from a L_Queue
l_int32 lqueueAdd()
static l_int32 lqueueExtendArray()
void *lqueueRemove()
Accessors
l_int32 lqueueGetCount()
Debug output
l_int32 lqueuePrint()
The lqueue is a fifo that implements a queue of void* pointers.
It can be used to hold a queue of any type of struct.
Internally, it maintains two counters:
nhead: location of head (in ptrs) from the beginning
of the buffer
nelem: number of ptr elements stored in the queue
As items are added to the queue, nelem increases.
As items are removed, nhead increases and nelem decreases.
Any time the tail reaches the end of the allocated buffer,
all the pointers are shifted to the left, so that the head
is at the beginning of the array.
If the buffer becomes more than 3/4 full, it doubles in size.
[A circular queue would allow us to skip the shifting and
to resize only when the buffer is full. For most applications,
the extra work we do for a linear queue is not significant.]
Definition in file queue.c.
| l_ok lqueueAdd | ( | L_QUEUE * | lq, |
| void * | item ) |
| [in] | lq | lqueue |
| [in] | item | to be added to the tail of the queue |
Notes:
(1) The algorithm is as follows. If the queue is populated
to the end of the allocated array, shift all ptrs toward
the beginning of the array, so that the head of the queue
is at the beginning of the array. Then, if the array is
more than 0.75 full, realloc with double the array size.
Finally, add the item to the tail of the queue.
Definition at line 184 of file queue.c.
References L_Queue::array, lqueueExtendArray(), L_Queue::nalloc, L_Queue::nelem, and L_Queue::nhead.
| L_QUEUE * lqueueCreate | ( | l_int32 | nalloc | ) |
| [in] | nalloc | size of ptr array to be alloc'd; 0 for default |
Notes:
(1) Allocates a ptr array of given size, and initializes counters.
Definition at line 93 of file queue.c.
References L_Queue::array, lqueueDestroy(), L_Queue::nalloc, L_Queue::nelem, and L_Queue::nhead.
| void lqueueDestroy | ( | L_QUEUE ** | plq, |
| l_int32 | freeflag ) |
| [in,out] | plq | will be set to null before returning |
| [in] | freeflag | TRUE to free each remaining struct in the array |
Notes:
(1) If freeflag is TRUE, frees each struct in the array.
(2) If freeflag is FALSE but there are elements on the array,
gives a warning and destroys the array. This will
cause a memory leak of all the items that were on the queue.
So if the items require their own destroy function, they
must be destroyed before the queue. The same applies to the
auxiliary stack, if it is used.
(3) To destroy the L_Queue, we destroy the ptr array, then
the lqueue, and then null the contents of the input ptr.
Definition at line 132 of file queue.c.
References L_Queue::array, lqueueRemove(), L_Queue::nelem, and L_Queue::stack.
Referenced by lqueueCreate().
|
static |
| [in] | lq | lqueue |
Definition at line 220 of file queue.c.
References L_Queue::array, and L_Queue::nalloc.
Referenced by lqueueAdd().
| l_int32 lqueueGetCount | ( | L_QUEUE * | lq | ) |
| [in] | lq | lqueue |
Definition at line 276 of file queue.c.
References L_Queue::nelem.
| l_ok lqueuePrint | ( | FILE * | fp, |
| L_QUEUE * | lq ) |
| [in] | fp | file stream |
| [in] | lq | lqueue |
Definition at line 296 of file queue.c.
References L_Queue::array, L_Queue::nalloc, L_Queue::nelem, and L_Queue::nhead.
| void * lqueueRemove | ( | L_QUEUE * | lq | ) |
| [in] | lq | lqueue |
Notes:
(1) If this is the last item on the queue, so that the queue
becomes empty, nhead is reset to the beginning of the array.
Definition at line 249 of file queue.c.
References L_Queue::array, L_Queue::nelem, and L_Queue::nhead.
Referenced by lqueueDestroy().