tesseract/cutil/tessarray.h
2008-02-01 00:05:57 +00:00

167 lines
4.8 KiB
C

/* -*-C-*-
********************************************************************************
*
* File: array.h (Formerly array.h)
* Description: Dynamic Array of String
* Author: Mark Seaman, SW Productivity
* Created: Fri Oct 16 14:37:00 1987
* Modified: Mon Sep 24 14:15:59 1990 (Mark Seaman) marks@hpgrlt
* Language: C
* Package: N/A
* Status: Reusable Software Component
*
* (c) Copyright 1987, Hewlett-Packard Company.
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** http://www.apache.org/licenses/LICENSE-2.0
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*
*****************************************************************************
This file contains a set of general purpose dynamic array of string routines.
These routines can be used in a wide variety of ways to provide several
different popular data structures. A new "das" can be created by declaring
a variable of type 'DAS'
******************************************************************************/
#ifndef TESSARRAY_H
#define TESSARRAY_H
/*
----------------------------------------------------------------------
I n c l u d e s
----------------------------------------------------------------------
*/
#include <stdio.h>
/*
----------------------------------------------------------------------
T y p e s
----------------------------------------------------------------------
*/
typedef struct array_record
{
size_t limit;
size_t top;
void *base[2];
} *ARRAY;
typedef void (*voidProc) ();
typedef int (*intProc) ();
/*
----------------------------------------------------------------------
M a c r o s
----------------------------------------------------------------------
*/
#define DEFAULT_SIZE 2
/**********************************************************************
* array_count
*
* Return the value of the number of elements currently in the array.
**********************************************************************/
#define array_count(a) \
((a)->top)
/**********************************************************************
* array_free
*
* Free the memory allocated to this array.
**********************************************************************/
#define array_free \
memfree
/**********************************************************************
* array_index
*
* Check to make sure that the index value is valid. Return the
* value of the nth element currently in the array.
**********************************************************************/
#define array_index(a,i) \
((i<array_count(a)) ? (a)->base[i] : 0)
/**********************************************************************
* array_limit
*
* Return the maximum number of elements that could be currently held
* in this array without further expansion.
**********************************************************************/
#define array_limit(a) \
((a)->limit)
/**********************************************************************
* array_loop
*
* Iterate through each of the array elements. Each value can then be
* accessed by:
* array_index (a, x)
**********************************************************************/
#define array_loop(a,x) \
for (x=0; x < array_count (a); x++)
/**********************************************************************
* array_top
*
* Return the last element that was pushed on this array.
**********************************************************************/
#define array_top(a) \
((a)->base[array_count (a) - 1])
/**********************************************************************
* array_value
*
* Return the nth element of the array. Don't do range checking.
**********************************************************************/
#define array_value(a,i) \
((a)->base[i])
/*----------------------------------------------------------------------
F u n c t i o n s
----------------------------------------------------------------------*/
ARRAY array_insert(ARRAY array, int index, void *value);
ARRAY array_new(int num);
ARRAY array_push(ARRAY array, void *value);
/*
#if defined(__STDC__) || defined(__cplusplus)
# define _ARGS(s) s
#else
# define _ARGS(s) ()
#endif*/
/* array.c
ARRAY array_insert
_ARGS((ARRAY array,
int index,
char *value));
ARRAY array_new
_ARGS((int num));
ARRAY array_push
_ARGS((ARRAY array,
char *value));
#undef _ARGS
*/
#endif