/** * Ors a set with the inverse of another. */ void mergeOrInv(RegexpSet b) { for (int i = 0; i < BITSET_CHARS; i++) { _bitset[i] = _bitset[i] || !b._bitset[i]; } _range.unionNegate(b._range, 0, 0xfffff); }
/** * Ors two character sets. */ void mergeOr(RegexpSet b) { for (int i = 0; i < BITSET_CHARS; i++) { _bitset[i] = _bitset[i] || b._bitset[i]; } _range.union(b._range); }
/** * Calculate the difference of two sets. * * @return true if disjoint */ void difference(RegexpSet next) { for (int i = 0; i < BITSET_CHARS; i++) { _bitset[i] = _bitset[i] & !next._bitset[i]; } _range.difference(next._range); }
/** * Calculate the intersection of two sets. * * @return true if disjoint */ bool mergeOverlap(RegexpSet next) { bool isDisjoint = true; for (int i = 0; i < BITSET_CHARS; i++) { _bitset[i] = _bitset[i] & next._bitset[i]; if (_bitset[i]) { isDisjoint = false; } } if (_range.intersection(next._range)) { isDisjoint = false; } return(isDisjoint); }
/** * Create a new RegexpSet */ RegexpSet(RegexpSet old) { System.arraycopy(old._bitset, 0, _bitset, 0, _bitset.length); _range = (IntSet)old._range.clone(); }