Example #1
0
        void generateBitmapAux(pair <size_t,size_t> nodes,BitString *bitmap,uint &bitmap_pos,vector<pair<uint,uint> > &result) {
            pair <size_t,size_t> r;
            size_t pl_aux = nodes.first;
            size_t pr_aux = nodes.second;

            size_t next_vl,next_vr;
            size_t nsibling_l,nsibling_r;
            if (pr_aux - pl_aux != 1) {
                // cout << "entre!" << endl;
                if (pl_aux == pr_aux)  {
                    bitmap_pos++;
                    // cout << "(";
                    bitmap->setBit(bitmap_pos);    
                    // cout << ")";            
                    bitmap_pos++;
                    //return;
                }
                result.push_back(make_pair(pl_aux,pr_aux));
            }
            cst->FChild(pl_aux, pr_aux, &next_vl, &next_vr);
            cst->NSibling(pl_aux,pr_aux,&nsibling_l,&nsibling_r);
            r = make_pair(next_vl,next_vr);
            if (next_vl != (size_t)-1 && next_vr != (size_t)-1) {
                if (next_vl == next_vr)  {
                    generateBitmapAux(r,bitmap,bitmap_pos,result);
                } else { 
                    bitmap_pos++; // leave a 0
                    // cout << "(";
                    generateBitmapAux(r,bitmap,bitmap_pos,result);
                    // cout << ")";
                    bitmap->setBit(bitmap_pos);
                    bitmap_pos++;
                    pl_aux = next_vl;
                    pr_aux = next_vr;
                }
            }
            if (nsibling_l != (size_t)-1 && nsibling_r != (size_t)-1) {
                r = make_pair(nsibling_l,nsibling_r);
                if (nsibling_l == nsibling_r)  {
                    generateBitmapAux(r,bitmap,bitmap_pos,result);
                } else { 
                bitmap_pos++;
                // cout << "(";
                generateBitmapAux(r,bitmap,bitmap_pos,result);
                 // cout << ")";
                bitmap->setBit(bitmap_pos);
                bitmap_pos++;
                }

            }
        }