List of usage examples for com.google.common.collect Range lowerBoundType
public BoundType lowerBoundType()
From source file:org.immutables.mongo.repository.internal.Support.java
@SuppressWarnings("unchecked") public static <T extends Comparable<T>> Range<Comparable<Object>> writable(TypeAdapter<T> adapter, Range<T> range) { if (range.hasLowerBound() && range.hasUpperBound()) { return Range.range((Comparable<Object>) writable(adapter, range.lowerEndpoint()), range.lowerBoundType(), (Comparable<Object>) writable(adapter, range.upperEndpoint()), range.upperBoundType()); } else if (range.hasLowerBound()) { return Range.downTo((Comparable<Object>) writable(adapter, range.lowerEndpoint()), range.lowerBoundType()); } else if (range.hasUpperBound()) { return Range.upTo((Comparable<Object>) writable(adapter, range.upperEndpoint()), range.upperBoundType()); }/* w ww. j a v a2s .co m*/ throw new AssertionError(); }
From source file:org.apache.kylin.common.util.RangeUtil.java
/** * remove from self the elements that exist in other * @return// w ww.j a v a2 s . co m */ public static <C extends Comparable<?>> List<Range<C>> remove(Range<C> self, Range<C> other) { // mimic the following logic in guava 18: // RangeSet<C> rangeSet = TreeRangeSet.create(); // rangeSet.add(self); // rangeSet.remove(other); // return Lists.newArrayList(rangeSet.asRanges()); if (other == null || !self.isConnected(other)) { return Collections.singletonList(self); } Range<C> share = self.intersection(other); if (share.isEmpty()) { return Collections.singletonList(self); } List<Range<C>> ret = Lists.newArrayList(); //see left part if (!self.hasLowerBound()) { if (share.hasLowerBound()) { if (share.lowerBoundType() == BoundType.CLOSED) { ret.add(Range.lessThan(share.lowerEndpoint())); } else { ret.add(Range.atMost(share.lowerEndpoint())); } } } else { if (self.lowerEndpoint() != share.lowerEndpoint()) { if (self.lowerBoundType() == BoundType.CLOSED) { if (share.lowerBoundType() == BoundType.CLOSED) { ret.add(Range.closedOpen(self.lowerEndpoint(), share.lowerEndpoint())); } else { ret.add(Range.closed(self.lowerEndpoint(), share.lowerEndpoint())); } } else { if (share.lowerBoundType() == BoundType.CLOSED) { ret.add(Range.open(self.lowerEndpoint(), share.lowerEndpoint())); } else { ret.add(Range.openClosed(self.lowerEndpoint(), share.lowerEndpoint())); } } } else { if (self.lowerBoundType() == BoundType.CLOSED && share.lowerBoundType() == BoundType.OPEN) { ret.add(Range.closed(self.lowerEndpoint(), share.lowerEndpoint())); } } } //see right part if (!self.hasUpperBound()) { if (share.hasUpperBound()) { if (share.upperBoundType() == BoundType.CLOSED) { ret.add(Range.greaterThan(share.upperEndpoint())); } else { ret.add(Range.atLeast(share.upperEndpoint())); } } } else { if (self.upperEndpoint() != share.upperEndpoint()) { if (self.upperBoundType() == BoundType.CLOSED) { if (share.upperBoundType() == BoundType.CLOSED) { ret.add(Range.openClosed(share.upperEndpoint(), self.upperEndpoint())); } else { ret.add(Range.closed(share.upperEndpoint(), self.upperEndpoint())); } } else { if (share.upperBoundType() == BoundType.CLOSED) { ret.add(Range.open(share.upperEndpoint(), self.upperEndpoint())); } else { ret.add(Range.closedOpen(share.upperEndpoint(), self.upperEndpoint())); } } } else { if (self.upperBoundType() == BoundType.CLOSED && share.upperBoundType() == BoundType.OPEN) { ret.add(Range.closed(self.upperEndpoint(), share.upperEndpoint())); } } } return ret; }
From source file:org.apache.druid.sql.calcite.filtration.MoveTimeFiltersToIntervals.java
private static Range<Long> toLongRange(final Range<BoundValue> range) { if (!range.hasUpperBound() && !range.hasLowerBound()) { return Range.all(); } else if (range.hasUpperBound() && !range.hasLowerBound()) { return Range.upTo(Long.parseLong(range.upperEndpoint().getValue()), range.upperBoundType()); } else if (!range.hasUpperBound() && range.hasLowerBound()) { return Range.downTo(Long.parseLong(range.lowerEndpoint().getValue()), range.lowerBoundType()); } else {/*from w w w. j av a2s . c om*/ return Range.range(Long.parseLong(range.lowerEndpoint().getValue()), range.lowerBoundType(), Long.parseLong(range.upperEndpoint().getValue()), range.upperBoundType()); } }
From source file:org.nmdp.ngs.range.rtree.RangeGeometries.java
/** * Create and return a new rectangle geometry from the specified range. * * @param range range, must not be null, must not be empty, and must have lower and upper bounds * @return a new rectangle geometry from the specified range *///from www .j a va 2 s.c o m public static <N extends Number & Comparable<? super N>> Rectangle range(final Range<N> range) { checkNotNull(range); if (range.isEmpty()) { throw new IllegalArgumentException("range must not be empty"); } if (!range.hasLowerBound() || !range.hasUpperBound()) { throw new IllegalArgumentException("range must have lower and upper bounds"); } Number lowerEndpoint = range.lowerEndpoint(); BoundType lowerBoundType = range.lowerBoundType(); Number upperEndpoint = range.upperEndpoint(); BoundType upperBoundType = range.upperBoundType(); /* Since we are representing genomic coordinate systems, the expectation is that endpoints are instance of Integer, Long, or BigInteger; thus for open lower and upper bounds we can safely add or substract 1.0 respectively. Then by convention a rectangle with y1 0.0 and height of 1.0 is used. closed(10, 20) --> (10.0, 0.0, 20.0, 1.0) closedOpen(10, 20) --> (10.0, 0.0, 19.0, 1.0) openClosed(10, 20) --> (11.0, 0.0, 20.0, 1.0) open(10, 20) --> (11.0, 0.0, 19.0, 1.0); closed(10, 11) --> (10.0, 0.0, 11.0, 1.0) closedOpen(10, 11) --> (10.0, 0.0, 10.0, 1.0) openClosed(10, 11) --> (11.0, 0.0, 11.0, 1.0) open(10, 11) --> empty, throw exception closed(10, 10) --> (10.0, 0.0, 10.0, 1.0) closedOpen(10, 10) --> empty, throw exception openClosed(10, 10) --> empty, throw exception open(10, 10) --> empty, throw exception */ double x1 = lowerBoundType == BoundType.OPEN ? lowerEndpoint.doubleValue() + 1.0d : lowerEndpoint.doubleValue(); double y1 = 0.0d; double x2 = upperBoundType == BoundType.OPEN ? upperEndpoint.doubleValue() - 1.0d : upperEndpoint.doubleValue(); double y2 = 1.0d; return Geometries.rectangle(x1, y1, x2, y2); }
From source file:com.tinspx.util.base.NumberUtils.java
@SuppressWarnings("unchecked") public static Range<Long> toLongRange(@NonNull Range<? extends Number> range) { if (range.hasLowerBound()) { if (range.hasUpperBound()) { if (range.lowerEndpoint() instanceof Long && range.upperEndpoint() instanceof Long) { return (Range<Long>) range; }/*w ww .ja v a 2 s. c om*/ return Range.range(range.lowerEndpoint().longValue(), range.lowerBoundType(), range.upperEndpoint().longValue(), range.upperBoundType()); } else { if (range.lowerEndpoint() instanceof Long) { return (Range<Long>) range; } return Range.downTo(range.lowerEndpoint().longValue(), range.lowerBoundType()); } } else if (range.hasUpperBound()) { if (range.upperEndpoint() instanceof Long) { return (Range<Long>) range; } return Range.upTo(range.upperEndpoint().longValue(), range.upperBoundType()); } else { return Range.all(); } }
From source file:org.dishevelled.bio.range.rtree.RangeGeometries.java
/** * Create and return a new rectangle geometry from the specified range. * * @param <N> value type/*from w ww . j a va2 s .c om*/ * @param range range, must not be null, must not be empty, and must have lower and upper bounds * @return a new rectangle geometry from the specified range */ public static <N extends Number & Comparable<? super N>> Rectangle range(final Range<N> range) { checkNotNull(range); if (range.isEmpty()) { throw new IllegalArgumentException("range must not be empty"); } if (!range.hasLowerBound() || !range.hasUpperBound()) { throw new IllegalArgumentException("range must have lower and upper bounds"); } Number lowerEndpoint = range.lowerEndpoint(); BoundType lowerBoundType = range.lowerBoundType(); Number upperEndpoint = range.upperEndpoint(); BoundType upperBoundType = range.upperBoundType(); /* Since we are representing genomic coordinate systems, the expectation is that endpoints are instance of Integer, Long, or BigInteger; thus for open lower and upper bounds we can safely add or subtract 1.0 respectively. Then by convention a rectangle with y1 0.0 and height of 1.0 is used. closed(10, 20) --> (10.0, 0.0, 20.0, 1.0) closedOpen(10, 20) --> (10.0, 0.0, 19.0, 1.0) openClosed(10, 20) --> (11.0, 0.0, 20.0, 1.0) open(10, 20) --> (11.0, 0.0, 19.0, 1.0); closed(10, 11) --> (10.0, 0.0, 11.0, 1.0) closedOpen(10, 11) --> (10.0, 0.0, 10.0, 1.0) openClosed(10, 11) --> (11.0, 0.0, 11.0, 1.0) open(10, 11) --> empty, throw exception closed(10, 10) --> (10.0, 0.0, 10.0, 1.0) closedOpen(10, 10) --> empty, throw exception openClosed(10, 10) --> empty, throw exception open(10, 10) --> empty, throw exception */ double x1 = lowerBoundType == BoundType.OPEN ? lowerEndpoint.doubleValue() + 1.0d : lowerEndpoint.doubleValue(); double y1 = 0.0d; double x2 = upperBoundType == BoundType.OPEN ? upperEndpoint.doubleValue() - 1.0d : upperEndpoint.doubleValue(); double y2 = 1.0d; return Geometries.rectangle(x1, y1, x2, y2); }
From source file:com.tinspx.util.io.callbacks.FileChannelCallback.java
/** * Normalizes lower bound to a closed bound type (if exists) and the * upper bound to an open bound type (if exists). Missing bounds remain * missing. Lower bound must be non-negative and upper bound must be * positive. The range cannot be empty.//from w w w. j a va 2 s . co m */ static Range<Long> checkAndNormalize(Range<Long> range) { checkArgument(!range.isEmpty(), "range %s is empty", range); boolean make = false; long lower = -1; long upper = -1; if (range.hasLowerBound()) { lower = range.lowerEndpoint(); if (range.lowerBoundType() == BoundType.OPEN) { make = true; lower++; } checkArgument(lower >= 0, "closed lower bound (%s) may not be negative", lower); } if (range.hasUpperBound()) { upper = range.upperEndpoint(); if (range.upperBoundType() == BoundType.CLOSED) { make = true; upper++; } checkArgument(upper > 0, "open upper bound (%s) must be positive", upper); } if (make) { if (lower >= 0) { if (upper > 0) { range = Range.closedOpen(lower, upper); } else { range = Range.atLeast(lower); } } else { assert upper > 0 : upper; range = Range.lessThan(upper); } checkArgument(!range.isEmpty(), "normalized range %s is empty", range); } return range; }
From source file:org.apache.hadoop.hive.ql.optimizer.calcite.druid.DruidIntervalUtils.java
protected static boolean mergeable(Range range1, Range range2) { Comparable x1 = range1.upperEndpoint(); Comparable x2 = range2.lowerEndpoint(); int compare = x1.compareTo(x2); return compare > 0 || (compare == 0 && range1.upperBoundType() == BoundType.CLOSED && range2.lowerBoundType() == BoundType.CLOSED); }
From source file:org.apache.calcite.adapter.druid.DruidDateTimeUtils.java
protected static List<LocalInterval> toInterval(List<Range<Calendar>> ranges) { List<LocalInterval> intervals = Lists.transform(ranges, new Function<Range<Calendar>, LocalInterval>() { public LocalInterval apply(Range<Calendar> range) { if (!range.hasLowerBound() && !range.hasUpperBound()) { return DruidTable.DEFAULT_INTERVAL; }//w w w.j ava2s.com long start = range.hasLowerBound() ? range.lowerEndpoint().getTime().getTime() : DruidTable.DEFAULT_INTERVAL.getStartMillis(); long end = range.hasUpperBound() ? range.upperEndpoint().getTime().getTime() : DruidTable.DEFAULT_INTERVAL.getEndMillis(); if (range.hasLowerBound() && range.lowerBoundType() == BoundType.OPEN) { start++; } if (range.hasUpperBound() && range.upperBoundType() == BoundType.CLOSED) { end++; } return LocalInterval.create(start, end); } }); if (LOGGER.isInfoEnabled()) { LOGGER.info("Converted time ranges " + ranges + " to interval " + intervals); } return intervals; }
From source file:org.apache.hadoop.hive.ql.optimizer.calcite.druid.DruidIntervalUtils.java
protected static List<Interval> toInterval(List<Range> ranges) { List<Interval> intervals = Lists.transform(ranges, new Function<Range, Interval>() { @Override/*from ww w . j a v a2 s.c o m*/ public Interval apply(Range range) { if (!range.hasLowerBound() && !range.hasUpperBound()) { return DruidTable.DEFAULT_INTERVAL; } long start = range.hasLowerBound() ? toLong(range.lowerEndpoint()) : DruidTable.DEFAULT_INTERVAL.getStartMillis(); long end = range.hasUpperBound() ? toLong(range.upperEndpoint()) : DruidTable.DEFAULT_INTERVAL.getEndMillis(); if (range.hasLowerBound() && range.lowerBoundType() == BoundType.OPEN) { start++; } if (range.hasUpperBound() && range.upperBoundType() == BoundType.CLOSED) { end++; } return new Interval(start, end); } }); LOG.info("Converted time ranges " + ranges + " to interval " + intervals); return intervals; }