INNER CODE UNIT · JavaScript
f_for
lh3/pangene · pangene.js:258
let f_for = f, f_rev = f + this.seg.length * 2;
let list_for = this.#traverse_bubble(vs, ve, flag, f_for, max_n);
let list_rev = this.#traverse_bubble(ve^1, vs^1, flag, f_rev, max_n);
if (list_for.length != list_rev.length) return [];
let n_in = 0;
for (let i = 0; i < list_for.length; ++i)
if (flag[list_for[i]<<1|0] == f_rev || flag[list_for[i]<<1|1] == f_rev)
++n_in;
if (n_in != list_for.length) return [];
for (let i = 0; i < list_for.length; ++i) {
for (let rev = 0; rev < 2; ++rev) {
const v = list_for[i]<<1 | rev;
const off = this.idx[v].o, n = this.idx[v].n;
for (let j = 0; j < n; ++j) {
const a = this.arc[off + j];
if (flag[a.w] != f_for && flag[a.w] != f_rev) // if reaching other vertices not reachable from start or end, there is no bubble
return [];
}