LongRangeSet (long dividendMin, long dividendMax, long divisorMin, long divisorMax, LongRangeType lrType) { if (divisorMin == 0) { if (divisorMax == 0) return empty(); divisorMin = 1; } if (dividendMin >= 0) { return divisorMin > 0 ? range(dividendMin / divisorMax, dividendMax / divisorMin) : range(dividendMax / divisorMax, dividendMin / divisorMin); } if (divisorMin > 0) { return range(dividendMin / divisorMin, dividendMax / divisorMax); } long minValue = lrType.min(); if (dividendMin == minValue && divisorMax == -1) { // MIN_VALUE/-1 = MIN_VALUE return point(minValue) .join(divisorMin == -1 ? empty() : range(dividendMin / divisorMin, dividendMin / (divisorMax - 1))) .join(dividendMax == minValue ? empty() : range(dividendMax / divisorMin, (dividendMin + 1) / divisorMax)); } return range(dividendMax / divisorMin, dividendMin / divisorMax); }