mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-01 07:59:05 +08:00
166c867d84
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk@129 d0cd1f9f-072b-0410-8dd7-cf729c803f20
167 lines
4.8 KiB
C
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
|