⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trie.h

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 H
字号:
/* -*-C-*- ******************************************************************************** * * File:        trie.h  (Formerly trie.h) * Description:  Functions to build a trie data structure. * Author:       Mark Seaman, SW Productivity * Created:      Fri Oct 16 14:37:00 1987 * Modified:     Fri Jul 26 11:26:34 1991 (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. * *********************************************************************************/#ifndef TRIE_H#define TRIE_H/*----------------------------------------------------------------------              I n c l u d e s----------------------------------------------------------------------*/#include "dawg.h"#include "cutil.h"/*----------------------------------------------------------------------              T y p e s----------------------------------------------------------------------*/#define NUM_PLACEMENT_ATTEMPTS (INT32) 100#define EDGE_NUM_MARGIN        (INT32) 2#define DEFAULT_NODE_SIZE      (INT32) 2#define FORWARD_EDGE           (INT32) 0#define BACKWARD_EDGE          (INT32) 1/*----------------------------------------------------------------------              V a r i a b l e s----------------------------------------------------------------------*///?extern INT32 max_new_attempts;/*----------------------------------------------------------------------              M a c r o s----------------------------------------------------------------------*//********************************************************************** * link_edge * * Set up this edge record to the requested values. **********************************************************************/#define link_edge(edges,e,nxt,ch,flgs)                \(edges[e] = ((INT32) (nxt)                        | \					((INT32) (ch)   << LETTER_START_BIT) | \					((INT32) (flgs) << FLAG_START_BIT)))/********************************************************************** * set_last_flag * * Set up this edge record to be the last one in a sequence of edges. **********************************************************************/#define set_last_flag(edges,e)   \(edges[e] |= (LAST_FLAG << FLAG_START_BIT))/********************************************************************** * copy_edge * * Move the contents of a single of edge from one place in the dawg to * another. **********************************************************************/#define copy_edge(dawg,from,to)              \	dawg[to] = dawg[from]/********************************************************************** * move_edges * * Move the location of a set of edges from one place in the dawg to * another.  There can be no overlap between 'from' and 'to'. **********************************************************************/#define move_edges(dawg,from,to,num)              \{                                               \	INT32 i;                                     \	for (i=0; i<num; i++) {                      \		copy_edge(dawg,from+i,to+i);              \		dawg[from+i] = NO_EDGE;                   \	}                                            \}                                               \/********************************************************************** * copy_edges * * Copy the location of a set of edges from one place in the dawg to * another.  The copy is carried out so that the 'from' and 'to' spaces * can overlap, as long as: *     from < to **********************************************************************/#define copy_edges(dawg,from,to,num)            \{                                             \	INT32 i;                                   \	for (i=num-1; i>=0; i--) {                 \		copy_edge(dawg,from+i,to+i);            \	}                                          \}                                             \/********************************************************************** * move_node_if_needed * * Move the node location if there is a need to do it because there is * not enough room to add the new edges. **********************************************************************/#define move_node_if_needed(dawg,node,max_num_edges,reserved_edges)     \if (! room_in_node (dawg, node)) {                                    \	node = move_node (dawg, node, max_num_edges, reserved_edges);      \}                                                                     \/*----------------------------------------------------------------------              F u n c t i o n s----------------------------------------------------------------------*/void add_edge_linkage(EDGE_ARRAY dawg,                      NODE_REF node1,                      NODE_REF node2,                      INT32 direction,                      char character,                      INT32 word_end);void add_new_edge(EDGE_ARRAY dawg,                  NODE_REF *node1,                  NODE_REF *node2,                  char character,                  INT32 word_end,                  INT32 max_num_edges,                  INT32 reserved_edges);void add_word_to_dawg(EDGE_ARRAY dawg,                      char *string,                      INT32 max_num_edges,                      INT32 reserved_edges);void initialize_dawg(EDGE_ARRAY dawg, INT32 max_num_edges); NODE_REF move_node(EDGE_ARRAY dawg,                   NODE_REF node,                   INT32 max_num_edges,                   INT32 reserved_edges);NODE_REF new_dawg_node(EDGE_ARRAY dawg,                       INT32 num_edges,                       INT32 max_num_edges,                       INT32 reserved_edges);void read_word_list(char *filename,                    EDGE_ARRAY dawg,                    INT32 max_num_edges,                    INT32 reserved_edges);void relocate_edge(EDGE_ARRAY dawg,                   NODE_REF node,                   NODE_REF old_node,                   NODE_REF new_node);void remove_edge(EDGE_ARRAY dawg,                 NODE_REF node1,                 NODE_REF node2,                 char character,                 INT32 word_end);void remove_edge_linkage(EDGE_ARRAY dawg,                         NODE_REF node,                         NODE_REF next,                         INT32 direction,                         char character,                         INT32 word_end);INT32 room_in_node(EDGE_ARRAY dawg, NODE_REF node); /*#if defined(__STDC__) || defined(__cplusplus)# define	_ARGS(s) s#else# define	_ARGS(s) ()#endif*//* trie.c *void add_edge_linkage  _ARGS((EDGE_ARRAY dawg,  NODE_REF node1,  NODE_REF node2,  INT32 direction,  int character,  INT32 word_end));void add_new_edge  _ARGS((EDGE_ARRAY dawg,  NODE_REF *node1,  NODE_REF *node2,  int character,  INT32 word_end,  INT32 max_num_edges,  INT32 reserved_edges));void add_word_to_dawg  _ARGS((EDGE_ARRAY dawg,  char *string,  INT32 max_num_edges,  INT32 reserved_edges));void initialize_dawg  _ARGS((EDGE_ARRAY dawg,  INT32 max_num_edges));NODE_REF move_node  _ARGS((EDGE_ARRAY dawg,  NODE_REF node,  INT32 max_num_edges,  INT32 reserved_edges));NODE_REF new_dawg_node  _ARGS((EDGE_ARRAY dawg,  INT32 num_edges,  INT32 max_num_edges,  INT32 reserved_edges));void read_word_list  _ARGS((char *filename,  EDGE_ARRAY dawg,  INT32 max_num_edges,  INT32 reserved_edges));void relocate_edge  _ARGS((EDGE_ARRAY dawg,  NODE_REF node,  NODE_REF old_node,  NODE_REF new_node));void remove_edge  _ARGS((EDGE_ARRAY dawg,  NODE_REF node1,  NODE_REF node2,  int character,  INT32 word_end));void remove_edge_linkage  _ARGS((EDGE_ARRAY dawg,  NODE_REF node,  NODE_REF next,  INT32 direction,  int character,  INT32 word_end));INT32 room_in_node  _ARGS((EDGE_ARRAY dawg,  NODE_REF node));#undef _ARGS*/#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -