41 #define NO_EDGE (inT64) 0xffffffffffffffffi64
44 #define NO_EDGE (inT64) 0xffffffffffffffffll
84 #define FORWARD_EDGE (inT32) 0
85 #define BACKWARD_EDGE (inT32) 1
86 #define MAX_NODE_EDGES_DISPLAY (inT64) 100
87 #define MARKER_FLAG (inT64) 1
88 #define DIRECTION_FLAG (inT64) 2
89 #define WERD_END_FLAG (inT64) 4
90 #define LETTER_START_BIT 0
91 #define NUM_FLAG_BITS 3
92 #define REFFORMAT "%lld"
96 static const bool kBeginningDawgsType[] = { 1, 1, 1, 1 };
105 static const char kWildcard[] =
"*";
144 bool enable_wildcard)
const;
155 bool word_end)
const = 0;
239 if (
edge_rec_match(next_node, word_end, unichar_id, curr_next_node,
240 curr_word_end, curr_unichar_id))
return 0;
241 if (unichar_id > curr_unichar_id)
return 1;
242 if (unichar_id == curr_unichar_id) {
243 if (next_node > curr_next_node)
return 1;
244 if (next_node == curr_next_node) {
245 if (word_end > curr_word_end)
return 1;
259 return ((unichar_id == other_unichar_id) &&
260 (next_node == NO_EDGE || next_node == other_next_node) &&
261 (!word_end || (word_end == other_word_end)));
267 PermuterType perm,
int unicharset_size,
int debug_level);
331 const char *debug_msg) {
333 if (
data_[i] == new_info)
return false;
355 PermuterType perm,
int debug_level) {
356 read_squished_dawg(file, type, lang, perm, debug_level);
357 num_forward_edges_in_node0 = num_forward_edges(0);
360 const STRING &
lang, PermuterType perm,
int debug_level) {
361 FILE *file = fopen(filename,
"rb");
363 tprintf(
"Failed to open dawg file %s\n", filename);
366 read_squished_dawg(file, type, lang, perm, debug_level);
367 num_forward_edges_in_node0 = num_forward_edges(0);
372 int unicharset_size,
int debug_level) :
373 edges_(edges), num_edges_(num_edges) {
374 init(type, lang, perm, unicharset_size, debug_level);
375 num_forward_edges_in_node0 = num_forward_edges(0);
376 if (debug_level > 3) print_all(
"SquishedDawg:");
384 bool word_end)
const;
390 if (!edge_occupied(edge) || edge == NO_EDGE)
return;
391 assert(forward_edge(edge));
394 }
while (!last_edge(edge++));
424 FILE *file = fopen(filename,
"wb");
426 tprintf(
"Error opening %s\n", filename);
439 inline void set_empty_edge(
EDGE_REF edge_ref) {
443 inline void clear_all_edges() {
444 for (
int edge = 0; edge < num_edges_; edge++) set_empty_edge(edge);
447 inline void clear_marker_flag(
EDGE_REF edge_ref) {
451 inline bool forward_edge(
EDGE_REF edge_ref)
const {
452 return (edge_occupied(edge_ref) &&
456 inline bool backward_edge(
EDGE_REF edge_ref)
const {
457 return (edge_occupied(edge_ref) &&
461 inline bool edge_occupied(
EDGE_REF edge_ref)
const {
465 inline bool last_edge(
EDGE_REF edge_ref)
const {
474 PermuterType perm,
int debug_level);
477 void print_edge(
EDGE_REF edge)
const;
480 void print_all(
const char* msg) {
481 tprintf(
"\n__________________________\n%s\n", msg);
482 for (
int i = 0; i < num_edges_; ++i) print_edge(i);
483 tprintf(
"__________________________\n");
492 int num_forward_edges_in_node0;
497 #endif // DICT_DAWG_H_