| /*====================================================================* |
| - Copyright (C) 2001 Leptonica. All rights reserved. |
| - This software is distributed in the hope that it will be |
| - useful, but with NO WARRANTY OF ANY KIND. |
| - No author or distributor accepts responsibility to anyone for the |
| - consequences of using this software, or for whether it serves any |
| - particular purpose or works at all, unless he or she says so in |
| - writing. Everyone is granted permission to copy, modify and |
| - redistribute this source code, for commercial or non-commercial |
| - purposes, with the following restrictions: (1) the origin of this |
| - source code must not be misrepresented; (2) modified versions must |
| - be plainly marked as such; and (3) this notice may not be removed |
| - or altered from any source or modified source distribution. |
| *====================================================================*/ |
| |
| #ifndef LEPTONICA_STACK_H |
| #define LEPTONICA_STACK_H |
| |
| /* |
| * stack.h |
| * |
| * Expandable pointer stack for arbitrary void* data. |
| * |
| * The L_Stack is an array of void * ptrs, onto which arbitrary |
| * objects can be stored. At any time, the number of |
| * stored objects is stack->n. The object at the bottom |
| * of the stack is at array[0]; the object at the top of |
| * the stack is at array[n-1]. New objects are added |
| * to the top of the stack, at the first available location, |
| * which is array[n]. Objects are removed from the top of the |
| * stack. When an attempt is made to remove an object from an |
| * empty stack, the result is null. When the stack becomes |
| * filled, so that n = nalloc, the size is doubled. |
| * |
| * The auxiliary stack can be used to store and remove |
| * objects for re-use. It must be created by a separate |
| * call to pstackCreate(). [Just imagine the chaos if |
| * pstackCreate() created the auxiliary stack!] |
| * pstackDestroy() checks for the auxiliary stack and removes it. |
| */ |
| |
| |
| /* Note that array[n] is the first null ptr in the array */ |
| struct L_Stack |
| { |
| l_int32 nalloc; /* size of ptr array */ |
| l_int32 n; /* number of stored elements */ |
| void **array; /* ptr array */ |
| struct L_Stack *auxstack; /* auxiliary stack */ |
| }; |
| typedef struct L_Stack L_STACK; |
| |
| |
| #endif /* LEPTONICA_STACK_H */ |
| |