1] 要素数が0の時にeach_common_prefixメソッドを呼び出すと、存在しない空文字列にマッチしてしまうバグを修正
2] 動的構築時にallocatorのリンクリストのサイズの上限に達っした場合(チェック漏れで)不変項が破られてしまうことがあったので修正
@@ -89,13 +89,13 @@ | ||
89 | 89 | lnk[idx].next = cur; |
90 | 90 | } |
91 | 91 | |
92 | - // NOTE: This method assume that variable codes is already sorted. | |
93 | 92 | NodeIndex x_check(const CodeList& codes) { |
94 | 93 | assert(beg_idx>=CODE_LIMIT); |
95 | - | |
96 | 94 | NodeIndex cur = lnk[beg_idx].next; |
97 | - for(uint32 cnt=0;; cur=lnk[cur].next, cnt++) { | |
95 | + for(uint32 cnt=0;; cur=lnk[cur].next, cnt++) { | |
98 | 96 | assert(cur); |
97 | + if(cur==lnk.size()) | |
98 | + resize_link(lnk.size()*2); | |
99 | 99 | |
100 | 100 | NodeIndex x = cur-codes.front(); |
101 | 101 | if(!bset[x] && can_allocate(codes, x)) { |
@@ -163,6 +163,9 @@ | ||
163 | 163 | |
164 | 164 | base.resize(node_size); |
165 | 165 | chck.resize(node_size); |
166 | + | |
167 | + if(tind.size()==0) | |
168 | + base[0].set_base(0); | |
166 | 169 | } |
167 | 170 | |
168 | 171 | // XXX: There is room for change. |