public static CodeRangeBuffer orCodeRangeBuff(ScanEnvironment env, CodeRangeBuffer bbuf1, boolean not1,
                                                                CodeRangeBuffer bbuf2, boolean not2) {
        CodeRangeBuffer pbuf = null;

        if (bbuf1 == null && bbuf2 == null) {
            if (not1 || not2) {
                return setAllMultiByteRange(env, pbuf);
            }
            return null;
        }

        if (bbuf2 == null) {
            CodeRangeBuffer tbuf;
            boolean tnot;
            // swap
            tnot = not1; not1 = not2; not2 = tnot;
            tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf;
        }

        if (bbuf1 == null) {
            if (not1) {
                return setAllMultiByteRange(env, pbuf);
            } else {
                if (!not2) {
                    return bbuf2.clone();
                } else {
                    return notCodeRangeBuff(env, bbuf2);
                }
            }
        }

        if (not1) {
            CodeRangeBuffer tbuf;
            boolean tnot;
            // swap
            tnot = not1; not1 = not2; not2 = tnot;
            tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf;
        }

        if (!not2 && !not1) { /* 1 OR 2 */
            pbuf = bbuf2.clone();
        } else if (!not1) { /* 1 OR (not 2) */
            pbuf = notCodeRangeBuff(env, bbuf2);
        }

        int[]p1 = bbuf1.p;
        int n1 = p1[0];

        for (int i=0; i<n1; i++) {
            int from = p1[i * 2 + 1];
            int to = p1[i * 2 + 2];
            pbuf = addCodeRangeToBuff(pbuf, env, from, to);
        }

        return pbuf;
    }
public static CodeRangeBuffer orCodeRangeBuff ( ScanEnvironment env , CodeRangeBuffer bbuf1 , boolean not1 , CodeRangeBuffer bbuf2 , boolean not2 ) { CodeRangeBuffer pbuf = null ; if ( bbuf1 == null && bbuf2 == null ) { if ( not1 || not2 ) { return setAllMultiByteRange ( env , pbuf ) ; } return null ; } if ( bbuf2 == null ) { CodeRangeBuffer tbuf ; boolean tnot ; tnot = not1 ; not1 = not2 ; not2 = tnot ; tbuf = bbuf1 ; bbuf1 = bbuf2 ; bbuf2 = tbuf ; } if ( bbuf1 == null ) { if ( not1 ) { return setAllMultiByteRange ( env , pbuf ) ; } else { if ( ! not2 ) { return bbuf2 . clone ( ) ; } else { return notCodeRangeBuff ( env , bbuf2 ) ; } } } if ( not1 ) { CodeRangeBuffer tbuf ; boolean tnot ; tnot = not1 ; not1 = not2 ; not2 = tnot ; tbuf = bbuf1 ; bbuf1 = bbuf2 ; bbuf2 = tbuf ; } if ( ! not2 && ! not1 ) { pbuf = bbuf2 . clone ( ) ; } else if ( ! not1 ) { pbuf = notCodeRangeBuff ( env , bbuf2 ) ; } int [ ] p1 = bbuf1 . p ; int n1 = p1 [ 0 ] ; for ( int i = 0 ; i < n1 ; i ++ ) { int from = p1 [ i * 2 + 1 ] ; int to = p1 [ i * 2 + 2 ] ; pbuf = addCodeRangeToBuff ( pbuf , env , from , to ) ; } return pbuf ; }
or_code_range_buf