const size_t rkey = rule2key(rid, dfa.key_size, dfa.def_rule);
size_t ntag = 3;
for (size_t t = r.ltag; t < r.htag; ++t) {
- if (t != r.ttag && !fixed(dfa.tags[t])) ++ntag;
+ if (t != r.ttag && !orbit(dfa.tags[t])) ++ntag;
}
o.wind(ind).ws("status = check_key_count_").wstring(name).ws("(keys_count, i, ")
for (size_t t = r.ltag; t < r.htag; ++t) {
const Tag &tag = dfa.tags[t];
- if (t == r.ttag || fixed(tag)) continue;
+ if (t == r.ttag || orbit(tag)) continue;
const std::string tname = tagname(tag);
o.ws("\n").wind(ind + 1).ws(" || check_tag_").wstring(name)
.ws("(&i, keys, ").wstring(tname).ws(", input, token, \"")
// keys: 1 - scanned length, 2 - matched length, 3 - matched rule, the rest - tags
size_t nkey = 3;
for (size_t t = ltag; t < htag; ++t) {
- if (t != trail && !fixed(skel.tags[t])) ++nkey;
+ if (t != trail && !orbit(skel.tags[t])) ++nkey;
}
key_t *keys = new key_t[nkey * width], *k = keys;
for (size_t w = 0; w < width; ++w) {
*k++ = to_le(rule2key<key_t>(rule, skel.defrule));
const size_t *ts = &tags[w * nver];
for (size_t t = ltag; t < htag; ++t) {
- if (t != trail && !fixed(skel.tags[t])) {
- *k++ = to_le(static_cast<key_t>(ts[skel.finvers[t]]));
+ const Tag &tag = skel.tags[t];
+ if (t != trail && !orbit(tag)) {
+ const size_t base = fixed(tag) ? tag.base : t;
+ *k++ = to_le(static_cast<key_t>(ts[skel.finvers[base]]));
}
}
}