Example usage for com.google.common.collect Range isEmpty

List of usage examples for com.google.common.collect Range isEmpty

Introduction

In this page you can find the example usage for com.google.common.collect Range isEmpty.

Prototype

public boolean isEmpty() 

Source Link

Document

Returns true if this range is of the form [v..v) or (v..v] .

Usage

From source file:com.google.googlejavaformat.InputOutput.java

private static void addToRanges(List<Range<Integer>> ranges, int i, int k) {
    while (ranges.size() <= i) {
        ranges.add(EMPTY_RANGE);// www  . j  av  a  2 s .co m
    }
    Range<Integer> oldValue = ranges.get(i);
    ranges.set(i, Range.closedOpen(oldValue.isEmpty() ? k : oldValue.lowerEndpoint(), k + 1));
}

From source file:net.bican.iplib.IPAddresses.java

private static Set<Range<IPAddress>> removeEmptyIntervals(final Set<Range<IPAddress>> intervals) {
    final Set<Range<IPAddress>> result = new TreeSet<>(IPAddressRangeComparator.getComparator());
    for (final Range<IPAddress> i : intervals) {
        if (!i.isEmpty()) {
            result.add(i);/*from  w ww . j  av a 2 s .  c  o m*/
        }
    }
    return result;
}

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  ww w. j  a v  a2  s.  c  om*/
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:org.dishevelled.bio.range.rtree.RangeGeometries.java

/**
 * Create and return a new rectangle geometry from the specified range.
 *
 * @param <N> value type// www .j  a  v  a  2s.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:net.bican.iplib.IPAddresses.java

private static Set<Range<IPAddress>> fromConnectedInterval(final Range<IPAddress> interval) {
    if (interval.isEmpty()) {
        return null;
    }/*from   w ww.  java2 s .c om*/
    int prefix = 0;
    final LongDiscreteDomain<IPAddress> domain = interval.lowerEndpoint().getDomain();
    while (prefix <= domain.maxPrefix()) {
        final Range<IPAddress> thisRange = IPAddresses.canonical(interval, domain);
        final Range<IPAddress> otherRange = IPAddresses.fromCIDR(new CIDR(thisRange.lowerEndpoint(), prefix));
        if (thisRange.equals(otherRange)) {
            TreeSet<Range<IPAddress>> result = new TreeSet<>(IPAddressRangeComparator.getComparator());
            result.add(otherRange);
            return result;
        } else if (thisRange.encloses(otherRange)) {
            final Set<Range<IPAddress>> result = new TreeSet<>(IPAddressRangeComparator.getComparator());
            result.add(otherRange);
            Range<IPAddress> newRange1 = Range.closedOpen(thisRange.lowerEndpoint(),
                    otherRange.lowerEndpoint());
            Range<IPAddress> newRange2 = Range.openClosed(otherRange.upperEndpoint(),
                    thisRange.upperEndpoint());
            final Set<Range<IPAddress>> results1 = IPAddresses.fromConnectedInterval(newRange1);
            if (results1 != null) {
                result.addAll(results1);
            }
            final Set<Range<IPAddress>> results2 = IPAddresses.fromConnectedInterval(newRange2);
            if (results2 != null) {
                result.addAll(results2);
            }
            return result;
        }
        prefix++;
    }
    return new TreeSet<>(Collections.singleton(interval));
}

From source file:org.apache.kylin.common.util.RangeUtil.java

/**
 * for NavigableMap sorted by C, given a range of C, return the sub map whose key falls in the range
 *///from w ww. j  a  v a  2 s .com
public static <C extends Comparable<?>, V> NavigableMap<C, V> filter(NavigableMap<C, V> values,
        Range<C> filterRange) {
    if (filterRange == null || filterRange.isEmpty()) {
        return Maps.newTreeMap();
    } else if (filterRange.equals(Range.all())) {
        return values;
    }

    if (filterRange.hasUpperBound() && !filterRange.hasLowerBound()) {
        return values.headMap(filterRange.upperEndpoint(), upperBoundInclusive(filterRange));
    } else if (filterRange.hasLowerBound() && !filterRange.hasUpperBound()) {
        return values.tailMap(filterRange.lowerEndpoint(), lowerBoundInclusive(filterRange));
    } else {
        return values.subMap(filterRange.lowerEndpoint(), lowerBoundInclusive(filterRange), //
                filterRange.upperEndpoint(), upperBoundInclusive(filterRange));
    }
}

From source file:net.bican.iplib.IPAddresses.java

static Range<IPAddress> canonical(final Range<IPAddress> range, final LongDiscreteDomain<IPAddress> domain) {
    if (range.isEmpty()) {
        return null;
    }/*from   w w  w.j a  v a 2s .  c  o m*/
    final boolean l = range.lowerBoundType() == BoundType.OPEN;
    final boolean u = range.upperBoundType() == BoundType.OPEN;
    final IPAddress s = range.lowerEndpoint();
    final IPAddress e = range.upperEndpoint();
    if (l && u) {
        Range.closed(domain.next(s), domain.previous(e));
    } else if (l) {
        return Range.closed(domain.next(s), e);
    } else if (u) {
        return Range.closed(s, domain.previous(e));
    }
    return range;
}

From source file:net.bican.iplib.IPAddresses.java

/**
 * transforms the range to CIDR notation, if any is possible
 *
 * @param range// www  .j  a  v a  2  s  .  com
 *          the range to transform
 * @return transformed CIDR range
 */
public static CIDR toCIDR(final Range<IPAddress> range) {
    Preconditions.checkNotNull(range, "range cannot be null"); //$NON-NLS-1$
    if (range.isEmpty()) {
        return null;
    }
    int prefix = 0;
    final LongDiscreteDomain<IPAddress> domain = range.lowerEndpoint().getDomain();
    final Range<IPAddress> addrRange = IPAddresses.canonical(range, domain);
    while (prefix <= domain.maxPrefix()) {
        final CIDR cidr = new CIDR(addrRange.lowerEndpoint(), prefix);
        final Range<IPAddress> a = IPAddresses.fromCIDR(cidr);
        if (a.equals(addrRange)) {
            return cidr;
        }
        prefix++;
    }
    return null;
}

From source file:org.apache.kylin.common.util.RangeUtil.java

/**
 * remove from self the elements that exist in other
 * @return//w w  w.  ja v  a  2  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:com.google.googlejavaformat.java.JavaOutput.java

private static Range<Integer> union(Range<Integer> x, Range<Integer> y) {
    return x.isEmpty() ? y : y.isEmpty() ? x : x.span(y).canonical(DiscreteDomain.integers());
}