com.google.common.collect.Range#isConnected ( )源码实例Demo

下面列出了com.google.common.collect.Range#isConnected ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: mzmine3   文件: ScanAlignment.java
/**
 * get overlapping MZ range (lowerBound - mzTol and upperbound+ mzTol)
 * 
 * @param mzTol
 * @param a
 * @param b
 * @return
 */
public static Range<Double> getOverlapMZ(MZTolerance mzTol, DataPoint[] a, DataPoint[] b) {
  Range<Double> ra = getMZRange(a);
  Range<Double> rb = getMZRange(b);

  // no overlap
  if (!ra.isConnected(rb))
    return Range.singleton(0d);

  Range<Double> intersect = ra.intersection(rb);
  // add mzTol
  double min = intersect.lowerEndpoint();
  min = mzTol.getToleranceRange(min).lowerEndpoint();
  double max = intersect.upperEndpoint();
  max = mzTol.getToleranceRange(max).upperEndpoint();
  return Range.closed(min, max);

}
 
源代码2 项目: mzmine2   文件: ScanAlignment.java
/**
 * get overlapping MZ range (lowerBound - mzTol and upperbound+ mzTol)
 * 
 * @param mzTol
 * @param a
 * @param b
 * @return
 */
public static Range<Double> getOverlapMZ(MZTolerance mzTol, DataPoint[] a, DataPoint[] b) {
  Range<Double> ra = getMZRange(a);
  Range<Double> rb = getMZRange(b);

  // no overlap
  if (!ra.isConnected(rb))
    return Range.singleton(0d);

  Range<Double> intersect = ra.intersection(rb);
  // add mzTol
  double min = intersect.lowerEndpoint();
  min = mzTol.getToleranceRange(min).lowerEndpoint();
  double max = intersect.upperEndpoint();
  max = mzTol.getToleranceRange(max).upperEndpoint();
  return Range.closed(min, max);

}
 
源代码3 项目: Bats   文件: RexSimplify.java
/** Weakens a term so that it checks only what is not implied by predicates.
 *
 * <p>The term is broken into "ref comparison constant",
 * for example "$0 &lt; 5".
 *
 * <p>Examples:
 * <ul>
 *
 * <li>{@code residue($0 < 10, [$0 < 5])} returns {@code true}
 *
 * <li>{@code residue($0 < 10, [$0 < 20, $0 > 0])} returns {@code $0 < 10}
 * </ul>
 */
private <C extends Comparable<C>> Range<C> residue(RexNode ref, Range<C> r0, List<RexNode> predicates,
        Class<C> clazz) {
    for (RexNode predicate : predicates) {
        switch (predicate.getKind()) {
        case EQUALS:
        case LESS_THAN:
        case LESS_THAN_OR_EQUAL:
        case GREATER_THAN:
        case GREATER_THAN_OR_EQUAL:
            final RexCall call = (RexCall) predicate;
            if (call.getOperands().get(0).equals(ref) && call.getOperands().get(1) instanceof RexLiteral) {
                final RexLiteral literal = (RexLiteral) call.getOperands().get(1);
                final C c1 = literal.getValueAs(clazz);
                final Range<C> r1 = range(predicate.getKind(), c1);
                if (r0.encloses(r1)) {
                    // Given these predicates, term is always satisfied.
                    // e.g. r0 is "$0 < 10", r1 is "$0 < 5"
                    return Range.all();
                }
                if (r0.isConnected(r1)) {
                    return r0.intersection(r1);
                }
                // Ranges do not intersect. Return null meaning the empty range.
                return null;
            }
        }
    }
    return r0;
}
 
源代码4 项目: mzmine3   文件: RangeUtils.java
/**
 * Returns a range that is contained in between the both ranges.
 * 
 * @param r1
 * @param r2
 * @return The connected range. Null if there is no connected range.
 */
public static @Nullable Range<Double> getConnected(@Nonnull Range<Double> r1,
    @Nonnull Range<Double> r2) {

  if (!r1.isConnected(r2))
    return null;

  double lower =
      (r1.lowerEndpoint() > r2.lowerEndpoint()) ? r1.lowerEndpoint() : r2.lowerEndpoint();
  double upper =
      (r1.upperEndpoint() > r2.upperEndpoint()) ? r2.upperEndpoint() : r1.upperEndpoint();

  return Range.closed(lower, upper);
}
 
源代码5 项目: Quicksql   文件: RexSimplify.java
/** Weakens a term so that it checks only what is not implied by predicates.
 *
 * <p>The term is broken into "ref comparison constant",
 * for example "$0 &lt; 5".
 *
 * <p>Examples:
 * <ul>
 *
 * <li>{@code residue($0 < 10, [$0 < 5])} returns {@code true}
 *
 * <li>{@code residue($0 < 10, [$0 < 20, $0 > 0])} returns {@code $0 < 10}
 * </ul>
 */
private <C extends Comparable<C>> Range<C> residue(RexNode ref, Range<C> r0,
    List<RexNode> predicates, Class<C> clazz) {
  for (RexNode predicate : predicates) {
    switch (predicate.getKind()) {
    case EQUALS:
    case LESS_THAN:
    case LESS_THAN_OR_EQUAL:
    case GREATER_THAN:
    case GREATER_THAN_OR_EQUAL:
      final RexCall call = (RexCall) predicate;
      if (call.operands.get(0).equals(ref)
          && call.operands.get(1) instanceof RexLiteral) {
        final RexLiteral literal = (RexLiteral) call.operands.get(1);
        final C c1 = literal.getValueAs(clazz);
        final Range<C> r1 = range(predicate.getKind(), c1);
        if (r0.encloses(r1)) {
          // Given these predicates, term is always satisfied.
          // e.g. r0 is "$0 < 10", r1 is "$0 < 5"
          return Range.all();
        }
        if (r0.isConnected(r1)) {
          return r0.intersection(r1);
        }
        // Ranges do not intersect. Return null meaning the empty range.
        return null;
      }
    }
  }
  return r0;
}
 
源代码6 项目: pulsar   文件: ManagedCursorImpl.java
/**
 * Given a list of entries, filter out the entries that have already been individually deleted.
 *
 * @param entries
 *            a list of entries
 * @return a list of entries not containing deleted messages
 */
List<Entry> filterReadEntries(List<Entry> entries) {
    lock.readLock().lock();
    try {
        Range<PositionImpl> entriesRange = Range.closed((PositionImpl) entries.get(0).getPosition(),
                (PositionImpl) entries.get(entries.size() - 1).getPosition());
        if (log.isDebugEnabled()) {
            log.debug("[{}] [{}] Filtering entries {} - alreadyDeleted: {}", ledger.getName(), name, entriesRange,
                    individualDeletedMessages);
        }

        if (individualDeletedMessages.isEmpty() || !entriesRange.isConnected(individualDeletedMessages.span())) {
            // There are no individually deleted messages in this entry list, no need to perform filtering
            if (log.isDebugEnabled()) {
                log.debug("[{}] [{}] No filtering needed for entries {}", ledger.getName(), name, entriesRange);
            }
            return entries;
        } else {
            // Remove from the entry list all the entries that were already marked for deletion
            return Lists.newArrayList(Collections2.filter(entries, entry -> {
                boolean includeEntry = !individualDeletedMessages.contains(
                        ((PositionImpl) entry.getPosition()).getLedgerId(),
                        ((PositionImpl) entry.getPosition()).getEntryId());
                if (!includeEntry) {
                    if (log.isDebugEnabled()) {
                        log.debug("[{}] [{}] Filtering entry at {} - already deleted", ledger.getName(), name,
                                entry.getPosition());
                    }

                    entry.release();
                }
                return includeEntry;
            }));
        }
    } finally {
        lock.readLock().unlock();
    }
}
 
源代码7 项目: nexus-public   文件: RangeParser.java
private List<Range<Long>> ensureSatisfiable(Range<Long> requested, Range<Long> content) {
  if (requested.isConnected(content)) {
    return singletonList(requested.intersection(content));
  }
  else {
    return UNSATISFIABLE;
  }
}
 
源代码8 项目: mzmine2   文件: RangeUtils.java
/**
 * Returns a range that is contained in between the both ranges.
 * 
 * @param r1
 * @param r2
 * @return The connected range. Null if there is no connected range.
 */
public static @Nullable Range<Double> getConnected(@Nonnull Range<Double> r1, @Nonnull Range<Double> r2){
  
  if(!r1.isConnected(r2))
    return null;
  
  double lower = (r1.lowerEndpoint() > r2.lowerEndpoint()) ? r1.lowerEndpoint() : r2.lowerEndpoint();
  double upper = (r1.upperEndpoint() > r2.upperEndpoint()) ? r2.upperEndpoint() : r1.upperEndpoint();
  
  return Range.closed(lower, upper);
}
 
源代码9 项目: calcite   文件: RexSimplify.java
/** Weakens a term so that it checks only what is not implied by predicates.
 *
 * <p>The term is broken into "ref comparison constant",
 * for example "$0 &lt; 5".
 *
 * <p>Examples:
 * <ul>
 *
 * <li>{@code residue($0 < 10, [$0 < 5])} returns {@code true}
 *
 * <li>{@code residue($0 < 10, [$0 < 20, $0 > 0])} returns {@code $0 < 10}
 * </ul>
 */
private <C extends Comparable<C>> Range<C> residue(RexNode ref, Range<C> r0,
    List<RexNode> predicates, Class<C> clazz) {
  Range<C> result = r0;
  for (RexNode predicate : predicates) {
    switch (predicate.getKind()) {
    case EQUALS:
    case LESS_THAN:
    case LESS_THAN_OR_EQUAL:
    case GREATER_THAN:
    case GREATER_THAN_OR_EQUAL:
      final RexCall call = (RexCall) predicate;
      if (call.operands.get(0).equals(ref)
          && call.operands.get(1) instanceof RexLiteral) {
        final RexLiteral literal = (RexLiteral) call.operands.get(1);
        final C c1 = literal.getValueAs(clazz);
        final Range<C> r1 = range(predicate.getKind(), c1);
        if (result.encloses(r1)) {
          // Given these predicates, term is always satisfied.
          // e.g. r0 is "$0 < 10", r1 is "$0 < 5"
          result = Range.all();
          continue;
        }
        if (result.isConnected(r1)) {
          result = result.intersection(r1);
          continue;
        }
        // Ranges do not intersect. Return null meaning the empty range.
        return null;
      }
    }
  }
  return result;
}
 
源代码10 项目: attic-aurora   文件: SlaAlgorithm.java
@Override
public Number calculate(Iterable<IScheduledTask> tasks, Range<Long> timeFrame) {
  // Given the set of tasks do the following:
  // - index all available tasks by InstanceId (JobKey + instance ID);
  // - combine individual task ITaskEvent lists into the instance based timeline to represent
  //   all available history for a given task instance;
  // - convert instance timeline into the SlaState intervals.
  Map<InstanceId, List<Interval>> instanceSlaTimeline =
      Maps.transformValues(
          Multimaps.index(tasks, TO_ID).asMap(),
          Functions.compose(TASK_EVENTS_TO_INTERVALS, TO_SORTED_EVENTS));

  // Given the instance timeline converted to SlaState-based time intervals, aggregate the
  // platform uptime per given timeFrame.
  long aggregateUptime = 0;
  long aggregateTotal = 0;
  for (List<Interval> intervals : instanceSlaTimeline.values()) {
    long instanceUptime = elapsedFromRange(timeFrame);
    long instanceTotal = instanceUptime;
    for (Interval interval : intervals) {
      if (timeFrame.isConnected(interval.range)) {
        long intersection = elapsedFromRange(timeFrame.intersection(interval.range));
        if (interval.state == SlaState.REMOVED) {
          instanceUptime -= intersection;
          instanceTotal -= intersection;
        } else if (interval.state == SlaState.DOWN) {
          instanceUptime -= intersection;
        }
      }
    }
    aggregateUptime += instanceUptime;
    aggregateTotal += instanceTotal;
  }

  // Calculate effective platform uptime or default to 100.0 if no instances are running yet.
  return aggregateTotal > 0 ? (double) aggregateUptime * 100 / aggregateTotal : 100.0;
}
 
源代码11 项目: kylin-on-parquet-v2   文件: RangeUtil.java
/**
 * remove from self the elements that exist in other
 * @return
 */
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;

}
 
源代码12 项目: kylin-on-parquet-v2   文件: TsConditionExtractor.java
private static Range<Long> extractTsConditionInternal(TupleFilter filter, TblColRef colRef) {
    if (filter == null) {
        return Range.all();
    }

    if (filter instanceof LogicalTupleFilter) {
        if (filter.getOperator() == TupleFilter.FilterOperatorEnum.AND) {
            Range<Long> ret = Range.all();
            for (TupleFilter child : filter.getChildren()) {
                Range childRange = extractTsConditionInternal(child, colRef);
                if (childRange != null) {
                    if (ret.isConnected(childRange) && !ret.intersection(childRange).isEmpty()) {
                        ret = ret.intersection(childRange);
                    } else {
                        return null;
                    }
                } else {
                    return null;
                }
            }
            return ret.isEmpty() ? null : ret;
        } else {
            //for conditions like date > DATE'2000-11-11' OR date < DATE '1999-01-01'
            //we will use Ranges.all() rather than two ranges to represent them
            return Range.all();
        }
    }

    if (filter instanceof CompareTupleFilter) {
        CompareTupleFilter compareTupleFilter = (CompareTupleFilter) filter;
        if (compareTupleFilter.getColumn() == null)// column will be null at filters like " 1<>1"
            return Range.all();

        if (compareTupleFilter.getColumn().equals(colRef)) {
            Object firstValue = compareTupleFilter.getFirstValue();
            long t;
            switch (compareTupleFilter.getOperator()) {
            case EQ:
                t = DateFormat.stringToMillis((String) firstValue);
                return Range.closed(t, t);
            case LT:
                t = DateFormat.stringToMillis((String) firstValue);
                return Range.lessThan(t);
            case LTE:
                t = DateFormat.stringToMillis((String) firstValue);
                return Range.atMost(t);
            case GT:
                t = DateFormat.stringToMillis((String) firstValue);
                return Range.greaterThan(t);
            case GTE:
                t = DateFormat.stringToMillis((String) firstValue);
                return Range.atLeast(t);
            case NEQ:
            case IN://not handled for now
                break;
            default:
            }
        }
    }
    return Range.all();
}
 
源代码13 项目: dataflow-java   文件: AnnotationUtils.java
/**
 * Determines the effect of the given allele at the given position within a
 * transcript. Currently, this routine is relatively primitive: it only works
 * with SNPs and only computes effects on coding regions of the transcript.
 * This utility currently does not handle any splice sites well, including
 * splice site disruption and codons which span two exons.
 *
 * @param variantStart 0-based absolute start for the variant.
 * @param allele Bases to substitute at {@code variantStart}.
 * @param transcript The affected transcript.
 * @param transcriptBases The reference bases which span the provided
 *     {@code transcript}. Must match the exact length of the
 *     {@code transcript.position}.
 * @return The effect of this variant on the given transcript, or null if
 *     unknown.
 */
public static VariantEffect determineVariantTranscriptEffect(
    long variantStart, String allele, Annotation transcript, String transcriptBases) {
  long txLen = transcript.getEnd() - transcript.getStart();
  Preconditions.checkArgument(transcriptBases.length() == txLen,
      "transcriptBases must have equal length to the transcript; got " +
          transcriptBases.length() + " and " + txLen + ", respectively");
  if (allele.length() != 1) {
    LOG.fine("determineVariantTranscriptEffects() only supports SNPs, ignoring " + allele);
    return null;
  }
  if (transcript.getTranscript().getCodingSequence() == null) {
    LOG.fine("determineVariantTranscriptEffects() only supports intersection with coding " +
        "transcript, ignoring ");
    return null;
  }

  long variantEnd = variantStart + 1;
  Range<Long> variantRange = Range.closedOpen(variantStart, variantEnd);
  Range<Long> codingRange = Range.closedOpen(
      transcript.getTranscript().getCodingSequence().getStart(),
      transcript.getTranscript().getCodingSequence().getEnd());
  if (Boolean.TRUE.equals(transcript.getReverseStrand())) {
    allele = SequenceUtil.reverseComplement(allele);
  }
  for (Exon exon : transcript.getTranscript().getExons()) {
    // For now, only compute effects on variants within the coding region of an exon.
    Range<Long> exonRange = Range.closedOpen(exon.getStart(), exon.getEnd());
    if (exonRange.isConnected(codingRange) &&
        exonRange.intersection(codingRange).isConnected(variantRange) &&
        !exonRange.intersection(codingRange).intersection(variantRange).isEmpty()) {
      // Get the bases which correspond to this exon.
      int txOffset = transcript.getStart().intValue();
      String exonBases = transcriptBases.substring(
          exon.getStart().intValue() - txOffset, exon.getEnd().intValue() - txOffset);
      int variantExonOffset = (int) (variantStart - exon.getStart());

      if (Boolean.TRUE.equals(transcript.getReverseStrand())) {
        // Normalize the offset and bases to 5' -> 3'.
        exonBases = SequenceUtil.reverseComplement(exonBases);
        variantExonOffset = (int) (exon.getEnd() - variantEnd);
      }

      // Determine the indices for the codon which contains this variant.
      if (exon.getFrame() == null) {
        LOG.fine("exon lacks frame data, cannot determine effect");
        return null;
      }
      int offsetWithinCodon = (variantExonOffset + exon.getFrame()) % 3;
      int codonExonOffset = variantExonOffset - offsetWithinCodon;
      if (codonExonOffset < 0 || exonBases.length() <= codonExonOffset+3) {
        LOG.fine("variant codon spans multiple exons, this case is not yet handled");
        return null;
      }
      String fromCodon = exonBases.substring(codonExonOffset, codonExonOffset+3);
      String toCodon =
          fromCodon.substring(0, offsetWithinCodon) + allele +
          fromCodon.substring(offsetWithinCodon + 1);
      return codonChangeToEffect(fromCodon, toCodon);
    }
  }
  return null;
}