public static void bufferedorWithContainer(
            final BitmapStorage32 container, final int bufSize,
            final EWAHCompressedBitmap32... bitmaps) {
        int range = 0;
        EWAHCompressedBitmap32[] sbitmaps = bitmaps.clone();
        Arrays.sort(sbitmaps, new Comparator<EWAHCompressedBitmap32>() {
            @Override
            public int compare(EWAHCompressedBitmap32 a,
                               EWAHCompressedBitmap32 b) {
                return b.sizeInBits() - a.sizeInBits();
            }
        });

        java.util.ArrayList<IteratingBufferedRunningLengthWord32> al = new java.util.ArrayList<IteratingBufferedRunningLengthWord32>();
        for (EWAHCompressedBitmap32 bitmap : sbitmaps) {
            if (bitmap.sizeInBits() > range)
                range = bitmap.sizeInBits();
            al.add(new IteratingBufferedRunningLengthWord32(bitmap));
        }
        int[] hardbitmap = new int[bufSize];
        int maxr = al.size();
        while (maxr > 0) {
            int effective = 0;
            for (int k = 0; k < maxr; ++k) {
                if (al.get(k).size() > 0) {
                    int eff = IteratorAggregation32
                            .inplaceor(hardbitmap,
                                    al.get(k));
                    if (eff > effective)
                        effective = eff;
                } else
                    maxr = k;
            }
            for (int k = 0; k < effective; ++k)
                container.addWord(hardbitmap[k]);
            Arrays.fill(hardbitmap, 0);

        }
        container.setSizeInBitsWithinLastWord(range);
    }
public static void bufferedorWithContainer(
            final BitmapStorage32 container, final int bufSize,
            final EWAHCompressedBitmap32... bitmaps) {
        int range = 0;
        EWAHCompressedBitmap32[] sbitmaps = bitmaps.clone();
        Arrays.sort(sbitmaps, new Comparator<EWAHCompressedBitmap32>() {
            @Override
            public int compare(EWAHCompressedBitmap32 a,
                               EWAHCompressedBitmap32 b) {
                return b.sizeInBits() - a.sizeInBits();
            }
        });

        java.util.ArrayList<IteratingBufferedRunningLengthWord32> al = new java.util.ArrayList<IteratingBufferedRunningLengthWord32>();
        for (EWAHCompressedBitmap32 bitmap : sbitmaps) {
            if (bitmap.sizeInBits() > range)
                range = bitmap.sizeInBits();
            al.add(new IteratingBufferedRunningLengthWord32(bitmap));
        }
        int[] hardbitmap = new int[bufSize];
        int maxr = al.size();
        while (maxr > 0) {
            int effective = 0;
            for (int k = 0; k < maxr; ++k) {
                if (al.get(k).size() > 0) {
                    int eff = IteratorAggregation32
                            .inplaceor(hardbitmap,
                                    al.get(k));
                    if (eff > effective)
                        effective = eff;
                } else
                    maxr = k;
            }
            for (int k = 0; k < effective; ++k)
                container.addWord(hardbitmap[k]);
            Arrays.fill(hardbitmap, 0);

        }
        container.setSizeInBitsWithinLastWord(range);
    }
public static void bufferedorWithContainer ( final BitmapStorage32 container , final int bufSize , final EWAHCompressedBitmap32 ... bitmaps ) { int range = 0 ; EWAHCompressedBitmap32 [ ] sbitmaps = bitmaps . clone ( ) ; Arrays . sort ( sbitmaps , new Comparator < EWAHCompressedBitmap32 > ( ) { @ Override public int compare ( EWAHCompressedBitmap32 a , EWAHCompressedBitmap32 b ) { return b . sizeInBits ( ) - a . sizeInBits ( ) ; } } ) ; java . util . ArrayList < IteratingBufferedRunningLengthWord32 > al = new java . util . ArrayList < IteratingBufferedRunningLengthWord32 > ( ) ; for ( EWAHCompressedBitmap32 bitmap : sbitmaps ) { if ( bitmap . sizeInBits ( ) > range ) range = bitmap . sizeInBits ( ) ; al . add ( new IteratingBufferedRunningLengthWord32 ( bitmap ) ) ; } int [ ] hardbitmap = new int [ bufSize ] ; int maxr = al . size ( ) ; while ( maxr > 0 ) { int effective = 0 ; for ( int k = 0 ; k < maxr ; ++ k ) { if ( al . get ( k ) . size ( ) > 0 ) { int eff = IteratorAggregation32 . inplaceor ( hardbitmap , al . get ( k ) ) ; if ( eff > effective ) effective = eff ; } else maxr = k ; } for ( int k = 0 ; k < effective ; ++ k ) container . addWord ( hardbitmap [ k ] ) ; Arrays . fill ( hardbitmap , 0 ) ; } container . setSizeInBitsWithinLastWord ( range ) ; }
Compute the or aggregate using a temporary uncompressed bitmap.

@param container where the aggregate is written
@param bufSize   buffer size used during the computation in 64-bit
words
@param bitmaps   the source bitmaps
Compute the or aggregate using a temporary uncompressed bitmap .