BitSet[] computeRows()
    {
        HashMap<Short,BitSet> sets = new HashMap<Short,BitSet>();
        for (int i=all.nextSetBit(0);i>=0;i=all.nextSetBit(i+1)) 
        {
            sets.put( (short)i, (BitSet)all.clone() );
        }
        for ( int i=0;i<sections.size();i++ )
        {
            Section s = sections.get(i);
            if ( s.state==SectionState.merged && getBooleanOption(Options.HIDE_MERGED) )
            {
                for (int j=all.nextSetBit(0);j>=0;j=all.nextSetBit(j+1)) 
                    adjustSet( sets, all, (short)j );
            }
            else
            {
                Set<Short> keys = s.lists.keySet();
                Iterator<Short> iter = keys.iterator();
                while ( iter.hasNext() )
                {
                    short key = iter.next();
                    FragList fl = s.lists.get( key );
                    BitSet bs = fl.getShared();
                    adjustSet( sets, bs, key );
                }
            }
        }
        Set<Short> bsKeys = sets.keySet();
        HashSet<BitSet> map = new HashSet<BitSet>();
        Iterator<Short> iter2 = bsKeys.iterator();
        while ( iter2.hasNext() )
        {
            Short v = iter2.next();
            map.add( sets.get(v) );
        }
        BitSet[] barray = new BitSet[map.size()];
        map.toArray(barray);
        return barray;
    }