trie.h

来自「一个google的OCR源码」· C头文件 代码 · 共 271 行

H
271
字号
/* -*-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) 100000#define EDGE_NUM_MARGIN        (EDGE_RECORD) 2#define DEFAULT_NODE_SIZE      (EDGE_RECORD) 2#define FORWARD_EDGE           (EDGE_RECORD) 0#define BACKWARD_EDGE          (EDGE_RECORD) 1typedef EDGE_REF *NODE_MAP;typedef char     *NODE_MARKER;/*----------------------------------------------------------------------              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] = ((EDGE_RECORD) (nxt)  << NEXT_EDGE_START_BIT | \	    ((EDGE_RECORD) static_cast<unsigned char>(ch)   << LETTER_START_BIT) | \	    ((EDGE_RECORD) (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)              \{                                               \	int i;                                     \	for (i=0; i<num; i++) {                      \		copy_edge(dawg,from+i,to+i);              \		dawg[from+i] = NEXT_EDGE_MASK;                   \	}                                            \}                                               \/********************************************************************** * 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)            \{                                             \	int i;                                   \	for (i=num-1; i>=0; i--) {                 \		copy_edge(dawg,from+i,to+i);            \	}                                          \}                                             \/*----------------------------------------------------------------------              F u n c t i o n s----------------------------------------------------------------------*/void add_edge_linkage(EDGE_ARRAY dawg,                      NODE_REF node1,                      NODE_REF node2,                      EDGE_RECORD direction,                      char character,                      EDGE_RECORD word_end);bool add_new_edge(EDGE_ARRAY dawg,                  NODE_REF *node1,                  NODE_REF *node2,                  char character,                  EDGE_RECORD 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);bool move_node_if_needed(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 print_dawg_map (EDGE_ARRAY dawg, inT32 max_num_edges);void read_full_dawg (const char *filename,                     EDGE_ARRAY dawg,                     inT32 max_num_edges);void read_word_list(const 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,                 EDGE_RECORD word_end);void remove_edge_linkage(EDGE_ARRAY dawg,                         NODE_REF node,                         NODE_REF next,                         EDGE_RECORD direction,                         char character,                         EDGE_RECORD word_end);inT32 room_in_node(EDGE_ARRAY dawg, NODE_REF node);void write_full_dawg (const char *filename,                      EDGE_ARRAY dawg,                      inT32 max_num_edges);/*#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 + =
减小字号Ctrl + -
显示快捷键?