// TODO maybe a more exact implementation is possible?
public CompoundBitVectorInterval binaryOr(
      CompoundBitVectorInterval pState,
      boolean pAllowSignedWrapAround,
      final OverflowEventHandler pOverflowEventHandler) {
    checkBitVectorCompatibilityWith(pState.info);
    if (isBottom() || pState.isBottom()) {
      return bottom(info);
    }
    if (isSingleton() && containsZero()) {
      return pState;
    }
    if (pState.isSingleton() && pState.containsZero()) {
      return this;
    }
    if (pState.isSingleton()) {
      CompoundBitVectorInterval result = bottom(info);
      for (BitVectorInterval interval : intervals) {
        if (!interval.isSingleton()) {
          return getInternal(info.getRange());
        }
        result =
            result.unionWith(
                BitVectorInterval.cast(
                    info,
                    interval.getLowerBound().or(pState.getValue()),
                    pAllowSignedWrapAround,
                    pOverflowEventHandler));
      }
      return result;
    } else if (isSingleton()) {
      return pState.binaryOr(this, pAllowSignedWrapAround, pOverflowEventHandler);
    }
    // TODO maybe a more exact implementation is possible?
    return getInternal(info.getRange());
  }
return pState.binaryOr(this, pAllowSignedWrapAround, pOverflowEventHandler);
}
// TODO maybe a more exact implementation is possible?
return getInternal(info.getRange());
}
BitVectorInterval.cast(
info,
interval.getLowerBound().or(pState.getValue()),
pAllowSignedWrapAround,
pOverflowEventHandler));
}
return result;
} else if (isSingleton()) {
return pState.binaryOr(this, pAllowSignedWrapAround, pOverflowEventHandler);
}
// TODO maybe a more exact implementation is possible?
return getInternal(info.getRange());
}
return this;
}
if (pState.isSingleton()) {
CompoundBitVectorInterval result = bottom(info);
for (BitVectorInterval interval : intervals) {
if (!interval.isSingleton()) {
return getInternal(info.getRange());
}
result =
result.unionWith(
BitVectorInterval.cast(
info,
interval.getLowerBound().or(pState.getValue()),
pAllowSignedWrapAround,
pOverflowEventHandler));
}
return result;
} else if (isSingleton()) {
return pState.binaryOr(this, pAllowSignedWrapAround, pOverflowEventHandler);
}
// TODO maybe a more exact implementation is possible?
return getInternal(info.getRange());
}