1 #include "progress.h"
2 
3 namespace marisa_alpha {
4 
Progress(int flags)5 Progress::Progress(int flags) : flags_(flags), trie_id_(0), total_size_(0) {
6   if ((flags_ & MARISA_ALPHA_NUM_TRIES_MASK) == 0) {
7     flags_ = (flags_ & ~MARISA_ALPHA_NUM_TRIES_MASK)
8         | MARISA_ALPHA_DEFAULT_NUM_TRIES;
9   }
10   if ((flags & MARISA_ALPHA_TRIE_MASK) == 0) {
11     flags_ = (flags_ & ~MARISA_ALPHA_TRIE_MASK) | MARISA_ALPHA_DEFAULT_TRIE;
12   }
13   if ((flags & MARISA_ALPHA_TAIL_MASK) == 0) {
14     flags_ = (flags_ & ~MARISA_ALPHA_TAIL_MASK) | MARISA_ALPHA_DEFAULT_TAIL;
15   }
16   if ((flags & MARISA_ALPHA_ORDER_MASK) == 0) {
17     flags_ = (flags_ & ~MARISA_ALPHA_ORDER_MASK) | MARISA_ALPHA_DEFAULT_ORDER;
18   }
19 }
20 
is_valid() const21 bool Progress::is_valid() const {
22   if ((flags_ & ~MARISA_ALPHA_FLAGS_MASK) != 0) {
23     return false;
24   }
25   switch (flags_ & MARISA_ALPHA_TRIE_MASK) {
26     case MARISA_ALPHA_PATRICIA_TRIE:
27     case MARISA_ALPHA_PREFIX_TRIE: {
28       break;
29     }
30     default: {
31       return false;
32     }
33   }
34   switch (flags_ & MARISA_ALPHA_TAIL_MASK) {
35     case MARISA_ALPHA_WITHOUT_TAIL:
36     case MARISA_ALPHA_BINARY_TAIL:
37     case MARISA_ALPHA_TEXT_TAIL: {
38       break;
39     }
40     default: {
41       return false;
42     }
43   }
44   switch (flags_ & MARISA_ALPHA_ORDER_MASK) {
45     case MARISA_ALPHA_LABEL_ORDER:
46     case MARISA_ALPHA_WEIGHT_ORDER: {
47       break;
48     }
49     default: {
50       return false;
51     }
52   }
53   return true;
54 }
55 
56 }  // namespace marisa_alpha
57