Mercurial > hgrepos > Python2 > PyMuPDF
diff mupdf-source/thirdparty/tesseract/src/cutil/oldlist.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mupdf-source/thirdparty/tesseract/src/cutil/oldlist.h Mon Sep 15 11:43:07 2025 +0200 @@ -0,0 +1,152 @@ +/****************************************************************************** + * + * File: oldlist.h (Formerly list.h) + * Description: List processing procedures declarations. + * Author: Mark Seaman, SW Productivity + * + * (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 the interface for a set of general purpose list + * manipulation routines. For the implementation of these routines see + * the file "list.c". + * + ****************************************************************************** + * + * INDEX + * ======= + * + * BASICS: + * ------- + * first_node - Macro to return the first list node (not the cell). + * list_rest - Macro the return the second list cell + * pop - Destroy one list cell + * push - Create one list cell and set the node and next fields + * + * ITERATION: + * ----------------- + * iterate - Macro to create a for loop to visit each cell. + * + * LIST CELL COUNTS: + * ----------------- + * count - Returns the number of list cells in the list. + * last - Returns the last list cell. + * + * TRANSFORMS: (Note: These functions all modify the input list.) + * ---------- + * delete_d - Removes the requested elements from the list. + * push_last - Add a new element onto the end of a list. + * + * SETS: + * ----- + * search - Return the pointer to the list cell whose node matches. + * + * CELL OPERATIONS: + * ----------------- + * destroy - Return all list cells in a list. + * destroy_nodes - Apply a function to each list cell and destroy the list. + * set_rest - Assign the next field in a list cell. + * + ***********************************************************************/ + +#ifndef LIST_H +#define LIST_H + +#include <tesseract/export.h> + +#include <cstddef> // for size_t + +namespace tesseract { + +/*---------------------------------------------------------------------- + T y p e s +----------------------------------------------------------------------*/ + +#define NIL_LIST static_cast<LIST>(nullptr) + +using int_compare = int (*)(void *, void *); +using void_dest = void (*)(void *); + +/*---------------------------------------------------------------------- + M a c r o s +----------------------------------------------------------------------*/ + +/********************************************************************** + * i t e r a t e + * + * Visit each node in the list. Replace the old list with the list + * minus the head. Continue until the list is NIL_LIST. + **********************************************************************/ + +#define iterate(l) for (; (l) != nullptr; (l) = (l)->list_rest()) + +/********************************************************************** + * s e t r e s t + * + * Change the "next" field of a list element to point to a desired place. + * + * #define set_rest(l,node) l->next = node; + **********************************************************************/ + +#define set_rest(l, cell) ((l)->next = (cell)) + +struct list_rec { + list_rec *node; + list_rec *next; + + list_rec *first_node() { + return node; + } + + list_rec *list_rest() { + return next; + } + + //******************************************************************** + // Recursively count the elements in a list. Return the count. + //******************************************************************** + size_t size() { + auto var_list = this; + size_t n = 0; + iterate(var_list) n++; + return n; + } +}; +using LIST = list_rec *; + +/*---------------------------------------------------------------------- + Public Function Prototypes +----------------------------------------------------------------------*/ + +LIST delete_d(LIST list, void *key, int_compare is_equal); + +TESS_API +LIST destroy(LIST list); + +void destroy_nodes(LIST list, void_dest destructor); + +LIST last(LIST var_list); + +LIST pop(LIST list); + +TESS_API +LIST push(LIST list, void *element); + +TESS_API +LIST push_last(LIST list, void *item); + +LIST search(LIST list, void *key, int_compare is_equal); + +} // namespace tesseract + +#endif
