Java 类com.google.common.collect.PeekingIterator 实例源码

项目:sstable-adaptor    文件:Bounds.java   
/**
 * Retrieves non-overlapping bounds for the list of input bounds
 *
 * Assume we have the following bounds
 * (brackets representing left/right bound):
 * [   ] [   ]    [   ]   [  ]
 * [   ]         [       ]
 * This method will return the following bounds:
 * [         ]    [          ]
 *
 * @param bounds unsorted bounds to find overlaps
 * @return the non-overlapping bounds
 */
public static <T extends RingPosition<T>> Set<Bounds<T>> getNonOverlappingBounds(Iterable<Bounds<T>> bounds)
{
    ArrayList<Bounds<T>> sortedBounds = Lists.newArrayList(bounds);
    Collections.sort(sortedBounds, new Comparator<Bounds<T>>()
    {
        public int compare(Bounds<T> o1, Bounds<T> o2)
        {
            return o1.left.compareTo(o2.left);
        }
    });

    Set<Bounds<T>> nonOverlappingBounds = Sets.newHashSet();

    PeekingIterator<Bounds<T>> it = Iterators.peekingIterator(sortedBounds.iterator());
    while (it.hasNext())
    {
        Bounds<T> beginBound = it.next();
        Bounds<T> endBound = beginBound;
        while (it.hasNext() && endBound.right.compareTo(it.peek().left) >= 0)
            endBound = it.next();
        nonOverlappingBounds.add(new Bounds<>(beginBound.left, endBound.right));
    }

    return nonOverlappingBounds;
}
项目:javaide    文件:JavaInputAstVisitor.java   
private void visitStatements(List<? extends StatementTree> statements) {
    boolean first = true;
    PeekingIterator<StatementTree> it =
            Iterators.<StatementTree>peekingIterator(statements.iterator());
    dropEmptyDeclarations();
    while (it.hasNext()) {
        StatementTree tree = it.next();
        builder.forcedBreak();
        if (!first) {
            builder.blankLineWanted(BlankLineWanted.PRESERVE);
        }
        markForPartialFormat();
        first = false;
        List<VariableTree> fragments = variableFragments(it, tree);
        if (!fragments.isEmpty()) {
            visitVariables(
                    fragments,
                    DeclarationKind.NONE,
                    canLocalHaveHorizontalAnnotations(fragments.get(0).getModifiers()));
        } else {
            scan(tree, null);
        }
    }
}
项目:javaide    文件:JavadocLexer.java   
/**
 * Replaces whitespace after a {@code href=...>} token with an "optional link break." This allows
 * us to output either {@code <a href=foo>foo</a>} or {@code <a href=foo>\nfoo</a>}, depending on
 * how much space we have left on the line.
 * <p>
 * <p>This method must be called after {@link #joinAdjacentLiteralsAndAdjacentWhitespace}, as it
 * assumes that adjacent whitespace tokens have already been joined.
 */
private static ImmutableList<Token> optionalizeSpacesAfterLinks(List<Token> input) {
    ImmutableList.Builder<Token> output = ImmutableList.builder();

    for (PeekingIterator<Token> tokens = peekingIterator(input.iterator()); tokens.hasNext(); ) {
        if (tokens.peek().getType() == LITERAL && tokens.peek().getValue().matches("^href=[^>]*>")) {
            output.add(tokens.next());

            if (tokens.peek().getType() == WHITESPACE) {
                output.add(new Token(OPTIONAL_LINE_BREAK, tokens.next().getValue()));
            }
        } else {
            output.add(tokens.next());
        }
    }

    return output.build();

/*
 * Note: We do not want to insert <p> tags inside <pre>. Fortunately, the formatter gets that
 * right without special effort on our part. The reason: Line breaks inside a <pre> section are
 * of type FORCED_NEWLINE rather than WHITESPACE.
 */
}
项目:javaide    文件:JavadocLexer.java   
/**
 * Adjust indentation inside `<pre>{@code` blocks.
 * <p>
 * <p>Also trim leading and trailing blank lines, and move the trailing `}` to its own line.
 */
private static ImmutableList<Token> deindentPreCodeBlocks(List<Token> input) {
    ImmutableList.Builder<Token> output = ImmutableList.builder();
    for (PeekingIterator<Token> tokens = peekingIterator(input.iterator()); tokens.hasNext(); ) {
        if (tokens.peek().getType() != PRE_OPEN_TAG) {
            output.add(tokens.next());
            continue;
        }

        output.add(tokens.next());
        List<Token> initialNewlines = new ArrayList<>();
        while (tokens.hasNext() && tokens.peek().getType() == FORCED_NEWLINE) {
            initialNewlines.add(tokens.next());
        }
        if (tokens.peek().getType() != LITERAL
                || !tokens.peek().getValue().matches("[ \t]*[{]@code")) {
            output.addAll(initialNewlines);
            output.add(tokens.next());
            continue;
        }

        deindentPreCodeBlock(output, tokens);
    }
    return output.build();
}
项目:clearwsd    文件:SemevalReader.java   
private InstanceParsePair<NlpFocus<DepNode, DepTree>> nextTree(PeekingIterator<NlpFocus<DepNode,
        DepTree>> iterator) {
    if (!iterator.hasNext()) {
        return null;
    }
    List<NlpFocus<DepNode, DepTree>> instances = new ArrayList<>();
    NlpFocus<DepNode, DepTree> current = iterator.next();
    DepTree tree = current.sequence();
    instances.add(current);
    while (iterator.hasNext()) {
        current = iterator.peek();
        if (tree.index() == current.sequence().index()) {
            instances.add(iterator.next());
            continue;
        }
        break;
    }
    return new InstanceParsePair<>(instances, (DefaultDepTree) tree);
}
项目:Mastering-Mesos    文件:Numbers.java   
/**
 * Converts a set of integers into a set of contiguous closed ranges that equally represent the
 * input integers.
 * <p>
 * The resulting ranges will be in ascending order.
 * <p>
 * TODO(wfarner): Change this to return a canonicalized RangeSet.
 *
 * @param values Values to transform to ranges.
 * @return Closed ranges with identical members to the input set.
 */
public static Set<Range<Integer>> toRanges(Iterable<Integer> values) {
  ImmutableSet.Builder<Range<Integer>> builder = ImmutableSet.builder();

  PeekingIterator<Integer> iterator =
      Iterators.peekingIterator(Sets.newTreeSet(values).iterator());

  // Build ranges until there are no numbers left.
  while (iterator.hasNext()) {
    // Start a new range.
    int start = iterator.next();
    int end = start;
    // Increment the end until the range is non-contiguous.
    while (iterator.hasNext() && iterator.peek() == end + 1) {
      end++;
      iterator.next();
    }

    builder.add(Range.closed(start, end));
  }

  return builder.build();
}
项目:Mastering-Mesos    文件:StateManagerImplTest.java   
private void expectStateTransitions(
    String taskId,
    ScheduleStatus initial,
    ScheduleStatus next,
    ScheduleStatus... others) {

  List<ScheduleStatus> statuses = ImmutableList.<ScheduleStatus>builder()
      .add(initial)
      .add(next)
      .add(others)
      .build();
  PeekingIterator<ScheduleStatus> it = Iterators.peekingIterator(statuses.iterator());
  while (it.hasNext()) {
    ScheduleStatus cur = it.next();
    try {
      eventSink.post(matchStateChange(taskId, cur, it.peek()));
    } catch (NoSuchElementException e) {
      // Expected.
    }
  }
}
项目:wav2pzx    文件:PZXBuilder.java   
private static PZXBlock getPzxBlock(PeekingIterator<TapeBlock> iterator) {
    TapeBlock block = iterator.next();
    PulseList blockPulseList = block.getPulseList();
    PZXBlock pzxBlock = new PZXNullBlock();
    switch (block.getBlockType()) {
        case UNKNOWN:
            // TODO if this is the beginning of the tape and followed by a pilot discard
            // TODO if this is about a second after a data block with a tail but before a pulse block use a pause block?
            pzxBlock = new PZXPulseBlock(blockPulseList);
            break;
        case PILOT:
            pzxBlock = getPzxPulseBlock(iterator, blockPulseList);
            break;
        case SYNC_CANDIDATE:
            pzxBlock = new PZXPulseBlock(blockPulseList);
            break;
        case DATA:
            pzxBlock = getPzxDataBlock(iterator, block);
            break;
        case TAIL_CANDIDATE:
            pzxBlock = new PZXPulseBlock(blockPulseList);
            break;
    }
    return pzxBlock;
}
项目:wav2pzx    文件:PZXBuilder.java   
private static PZXDataBlock getPzxDataBlock(PeekingIterator<TapeBlock> iterator, TapeBlock block) {
    long tailLength = getTailLength(iterator);

    List<Long> zeroPulseLengths = block.getZeroBit().getPulses();
    List<Long> onePulseLengths = block.getOneBit().getPulses();
    DataBuilder dataBuilder = new DataBuilder();

    ImmutableList<Long> pulseLengths = block.getPulseList().getPulseLengths();
    for (int i = 0; i < pulseLengths.size(); i += 2) {
        ImmutableList<Long> pulses = pulseLengths.subList(i, i + 2);
        if (isSpecifiedPulseSequence(zeroPulseLengths, pulses)) {
            dataBuilder.addBit(0);
        } else if (isSpecifiedPulseSequence(onePulseLengths, pulses)) {
            dataBuilder.addBit(1);
        }
        // FIXME: Some kind of error, fall back to PulseBlock?
    }

    int numBitsInLastByte = dataBuilder.getNumBitsInCurrentByte();
    return new PZXDataBlock(block.getPulseList(), zeroPulseLengths, onePulseLengths, tailLength,
            numBitsInLastByte, dataBuilder.getData());
}
项目:emodb    文件:TimeLimitedIteratorTest.java   
@Test
public void testExpirationTime() {
    long start = System.currentTimeMillis();
    Iterator<Long> unlimitedIter = countForever();
    PeekingIterator<Long> limitedIter = TimeLimitedIterator.create(unlimitedIter, Duration.millis(10), 0);
    long previous = -1;
    while (limitedIter.hasNext()) {
        long next = limitedIter.next();
        assertEquals(next, previous + 1);
        previous = next;
    }
    long stop = System.currentTimeMillis();
    long elapsed = stop - start;

    assertTrue(elapsed >= 10);
    assertTrue(elapsed < 100);  // be fairly relaxed about the upper bound to avoid spurious test failures on slow machines.
    assertEquals(unlimitedIter.next(), (previous + 1));
}
项目:emodb    文件:AstyanaxEventReaderDAO.java   
void readAll(String channel, SlabFilter filter, EventSink sink, ConsistencyLevel consistency) {
    // PeekingIterator is needed so that we can look ahead and see the next slab Id
    PeekingIterator<Column<ByteBuffer>> manifestColumns = Iterators.peekingIterator(executePaginated(
            _keyspace.prepareQuery(ColumnFamilies.MANIFEST, consistency)
                    .getKey(channel)
                    .withColumnRange(new RangeBuilder().setLimit(50).build())
                    .autoPaginate(true)).iterator());

    while (manifestColumns.hasNext()) {
        Column<ByteBuffer> manifestColumn = manifestColumns.next();
        ByteBuffer slabId = manifestColumn.getName();
        ByteBuffer nextSlabId = manifestColumns.hasNext() ? manifestColumns.peek().getName() : null;
        boolean open = manifestColumn.getBooleanValue();
        if (filter != null && !filter.accept(slabId, open, nextSlabId)) {
            continue;
        }
        if (!readSlab(channel, slabId, new SlabCursor(), open, sink)) {
            break;
        }
    }
}
项目:xtext-core    文件:IndentationAwareCompletionPrefixProvider.java   
private PeekingIterator<ILeafNode> createReversedLeafIterator(INode root, INode candidate, LinkedList<ILeafNode> sameGrammarElement) {
    EObject grammarElement = null;
    PeekingIterator<ILeafNode> iterator = Iterators.peekingIterator(Iterators.filter(root.getAsTreeIterable().reverse().iterator(), ILeafNode.class));
    // traverse until we find the current candidate
    while(iterator.hasNext()) {
        ILeafNode next = iterator.next();
        if (candidate.equals(next)) {
            break;
        } else if (next.getTotalLength() == 0) {
            EObject otherGrammarElement = tryGetGrammarElementAsRule(next);
            if (grammarElement == null) {
                grammarElement = otherGrammarElement;
            }
            if (otherGrammarElement.equals(grammarElement)) {
                sameGrammarElement.add(next);
            } else {
                sameGrammarElement.removeLast();
            }
        }
    }
    return iterator;
}
项目:nomulus    文件:RestoreCommitLogsAction.java   
/**
 * Restore the contents of one transaction to Datastore.
 *
 * <p>The objects to delete are listed in the {@link CommitLogManifest}, which will be the first
 * object in the iterable. The objects to save follow, each as a {@link CommitLogMutation}. We
 * restore by deleting the deletes and recreating the saves from their proto form. We also save
 * the commit logs themselves back to Datastore, so that the commit log system itself is
 * transparently restored alongside the data.
 *
 * @return the manifest, for use in restoring the {@link CommitLogBucket}.
 */
private CommitLogManifest restoreOneTransaction(PeekingIterator<ImmutableObject> commitLogs) {
  final CommitLogManifest manifest = (CommitLogManifest) commitLogs.next();
  Result<?> deleteResult = deleteAsync(manifest.getDeletions());
  List<Entity> entitiesToSave = Lists.newArrayList(ofy().save().toEntity(manifest));
  while (commitLogs.hasNext() && commitLogs.peek() instanceof CommitLogMutation) {
    CommitLogMutation mutation = (CommitLogMutation) commitLogs.next();
    entitiesToSave.add(ofy().save().toEntity(mutation));
    entitiesToSave.add(EntityTranslator.createFromPbBytes(mutation.getEntityProtoBytes()));
  }
  saveRaw(entitiesToSave);
  try {
    deleteResult.now();
  } catch (Exception e) {
    retrier.callWithRetry(
        () -> deleteAsync(manifest.getDeletions()).now(), RuntimeException.class);
  }
  return manifest;
}
项目:presto    文件:LocalProperties.java   
/**
 * Attempt to match the desired properties to a sequence of known properties.
 * <p>
 * Returns a list of the same length as the original. Entries are:
 * - Optional.empty(): the property was satisfied completely
 * - non-empty: the (simplified) property that was not satisfied
 */
public static <T> List<Optional<LocalProperty<T>>> match(List<LocalProperty<T>> actuals, List<LocalProperty<T>> desired)
{
    // After normalizing actuals, each symbol should only appear once
    PeekingIterator<LocalProperty<T>> actualIterator = peekingIterator(normalizeAndPrune(actuals).iterator());

    Set<T> constants = new HashSet<>();
    boolean consumeMoreActuals = true;
    List<Optional<LocalProperty<T>>> result = new ArrayList<>(desired.size());
    for (LocalProperty<T> desiredProperty : desired) {
        while (consumeMoreActuals && actualIterator.hasNext() && desiredProperty.isSimplifiedBy(actualIterator.peek())) {
            constants.addAll(actualIterator.next().getColumns());
        }
        Optional<LocalProperty<T>> simplifiedDesired = desiredProperty.withConstants(constants);
        consumeMoreActuals &= !simplifiedDesired.isPresent(); // Only continue processing actuals if all previous desired properties were fully satisfied
        result.add(simplifiedDesired);
    }
    return result;
}
项目:google-java-format    文件:JavaInputAstVisitor.java   
private void visitStatements(List<? extends StatementTree> statements) {
  boolean first = true;
  PeekingIterator<StatementTree> it = Iterators.peekingIterator(statements.iterator());
  dropEmptyDeclarations();
  while (it.hasNext()) {
    StatementTree tree = it.next();
    builder.forcedBreak();
    if (!first) {
      builder.blankLineWanted(BlankLineWanted.PRESERVE);
    }
    markForPartialFormat();
    first = false;
    List<VariableTree> fragments = variableFragments(it, tree);
    if (!fragments.isEmpty()) {
      visitVariables(
          fragments,
          DeclarationKind.NONE,
          canLocalHaveHorizontalAnnotations(fragments.get(0).getModifiers()));
    } else {
      scan(tree, null);
    }
  }
}
项目:google-java-format    文件:JavadocLexer.java   
/**
 * Replaces whitespace after a {@code href=...>} token with an "optional link break." This allows
 * us to output either {@code <a href=foo>foo</a>} or {@code <a href=foo>\nfoo</a>}, depending on
 * how much space we have left on the line.
 *
 * <p>This method must be called after {@link #joinAdjacentLiteralsAndAdjacentWhitespace}, as it
 * assumes that adjacent whitespace tokens have already been joined.
 */
private static ImmutableList<Token> optionalizeSpacesAfterLinks(List<Token> input) {
  ImmutableList.Builder<Token> output = ImmutableList.builder();

  for (PeekingIterator<Token> tokens = peekingIterator(input.iterator()); tokens.hasNext(); ) {
    if (tokens.peek().getType() == LITERAL && tokens.peek().getValue().matches("^href=[^>]*>")) {
      output.add(tokens.next());

      if (tokens.peek().getType() == WHITESPACE) {
        output.add(new Token(OPTIONAL_LINE_BREAK, tokens.next().getValue()));
      }
    } else {
      output.add(tokens.next());
    }
  }

  return output.build();

  /*
   * Note: We do not want to insert <p> tags inside <pre>. Fortunately, the formatter gets that
   * right without special effort on our part. The reason: Line breaks inside a <pre> section are
   * of type FORCED_NEWLINE rather than WHITESPACE.
   */
}
项目:google-java-format    文件:JavadocLexer.java   
/**
 * Adjust indentation inside `<pre>{@code` blocks.
 *
 * <p>Also trim leading and trailing blank lines, and move the trailing `}` to its own line.
 */
private static ImmutableList<Token> deindentPreCodeBlocks(List<Token> input) {
  ImmutableList.Builder<Token> output = ImmutableList.builder();
  for (PeekingIterator<Token> tokens = peekingIterator(input.iterator()); tokens.hasNext(); ) {
    if (tokens.peek().getType() != PRE_OPEN_TAG) {
      output.add(tokens.next());
      continue;
    }

    output.add(tokens.next());
    List<Token> initialNewlines = new ArrayList<>();
    while (tokens.hasNext() && tokens.peek().getType() == FORCED_NEWLINE) {
      initialNewlines.add(tokens.next());
    }
    if (tokens.peek().getType() != LITERAL
        || !tokens.peek().getValue().matches("[ \t]*[{]@code")) {
      output.addAll(initialNewlines);
      output.add(tokens.next());
      continue;
    }

    deindentPreCodeBlock(output, tokens);
  }
  return output.build();
}
项目:kylin    文件:SortMergedPartitionResultIterator.java   
@Override
public GTRecord next() {
    if (!hasNext()) {
        throw new NoSuchElementException();
    }
    // get smallest record
    PeekingIterator<GTRecord> it = heap.poll();
    // WATCH OUT! record got from PartitionResultIterator.next() may changed later,
    // so we must make a shallow copy of it.
    record.shallowCopyFrom(it.next());

    if (it.hasNext()) {
        heap.offer(it);
    }

    return record;
}
项目:scylla-tools-java    文件:Bounds.java   
/**
 * Retrieves non-overlapping bounds for the list of input bounds
 *
 * Assume we have the following bounds
 * (brackets representing left/right bound):
 * [   ] [   ]    [   ]   [  ]
 * [   ]         [       ]
 * This method will return the following bounds:
 * [         ]    [          ]
 *
 * @param bounds unsorted bounds to find overlaps
 * @return the non-overlapping bounds
 */
public static <T extends RingPosition<T>> Set<Bounds<T>> getNonOverlappingBounds(Iterable<Bounds<T>> bounds)
{
    ArrayList<Bounds<T>> sortedBounds = Lists.newArrayList(bounds);
    Collections.sort(sortedBounds, new Comparator<Bounds<T>>()
    {
        public int compare(Bounds<T> o1, Bounds<T> o2)
        {
            return o1.left.compareTo(o2.left);
        }
    });

    Set<Bounds<T>> nonOverlappingBounds = Sets.newHashSet();

    PeekingIterator<Bounds<T>> it = Iterators.peekingIterator(sortedBounds.iterator());
    while (it.hasNext())
    {
        Bounds<T> beginBound = it.next();
        Bounds<T> endBound = beginBound;
        while (it.hasNext() && endBound.right.compareTo(it.peek().left) >= 0)
            endBound = it.next();
        nonOverlappingBounds.add(new Bounds<>(beginBound.left, endBound.right));
    }

    return nonOverlappingBounds;
}
项目:scylla-tools-java    文件:CounterMutation.java   
private void updateForRow(PeekingIterator<PartitionUpdate.CounterMark> markIter, Row row, ColumnFamilyStore cfs)
{
    int cmp = 0;
    // If the mark is before the row, we have no value for this mark, just consume it
    while (markIter.hasNext() && (cmp = compare(markIter.peek().clustering(), row.clustering(), cfs)) < 0)
        markIter.next();

    if (!markIter.hasNext())
        return;

    while (cmp == 0)
    {
        PartitionUpdate.CounterMark mark = markIter.next();
        Cell cell = mark.path() == null ? row.getCell(mark.column()) : row.getCell(mark.column(), mark.path());
        if (cell != null)
        {
            updateWithCurrentValue(mark, CounterContext.instance().getLocalClockAndCount(cell.value()), cfs);
            markIter.remove();
        }
        if (!markIter.hasNext())
            return;

        cmp = compare(markIter.peek().clustering(), row.clustering(), cfs);
    }
}
项目:error-prone    文件:AbstractExpectedExceptionChecker.java   
Description scanBlock(MethodTree tree, BlockTree block, VisitorState state) {
  PeekingIterator<? extends StatementTree> it =
      Iterators.peekingIterator(block.getStatements().iterator());
  while (it.hasNext() && !MATCHER.matches(it.peek(), state)) {
    it.next();
  }
  List<Tree> expectations = new ArrayList<>();
  while (it.hasNext() && MATCHER.matches(it.peek(), state)) {
    expectations.add(it.next());
  }
  if (expectations.isEmpty()) {
    return NO_MATCH;
  }
  Deque<StatementTree> suffix = new ArrayDeque<>();
  StatementTree failure = null;
  Iterators.addAll(suffix, it);
  if (!suffix.isEmpty() && FAIL_MATCHER.matches(suffix.peekLast(), state)) {
    failure = suffix.removeLast();
  }
  return handleMatch(tree, state, expectations, ImmutableList.copyOf(suffix), failure);
}
项目:jg2p    文件:GroupingIterable.java   
@Override
public Iterator<List<T>> iterator() {
  final PeekingIterator<T> iter = Iterators.peekingIterator(delegate.iterator());
  return new AbstractIterator<List<T>>() {
    @Override
    protected List<T> computeNext() {
      if (!iter.hasNext()) {
        return endOfData();
      }
      ArrayList<T> result = Lists.newArrayList();
      T last = iter.next();
      result.add(last);
      while (iter.hasNext() && equiv.equivalent(last, iter.peek())) {
        last = iter.next(); // get peeked value
        result.add(last);
      }
      return result;
    }
  };
}
项目:glowroot    文件:TraceCommonService.java   
private static void writeEntries(JsonGenerator jg, List<Trace.Entry> entries)
        throws IOException {
    jg.writeStartArray();
    PeekingIterator<Trace.Entry> i = Iterators.peekingIterator(entries.iterator());
    while (i.hasNext()) {
        Trace.Entry entry = i.next();
        int depth = entry.getDepth();
        jg.writeStartObject();
        writeJson(entry, jg);
        int nextDepth = i.hasNext() ? i.peek().getDepth() : 0;
        if (nextDepth > depth) {
            jg.writeArrayFieldStart("childEntries");
        } else if (nextDepth < depth) {
            jg.writeEndObject();
            for (int j = depth; j > nextDepth; j--) {
                jg.writeEndArray();
                jg.writeEndObject();
            }
        } else {
            jg.writeEndObject();
        }
    }
    jg.writeEndArray();
}
项目:glowroot    文件:MutableProfile.java   
private void merge(List<Profile.ProfileNode> flatNodes,
        List<ProfileNode> destinationRootNodes) {
    destinationStack.push(destinationRootNodes);
    PeekingIterator<Profile.ProfileNode> i =
            Iterators.peekingIterator(flatNodes.iterator());
    while (i.hasNext()) {
        Profile.ProfileNode flatNode = i.next();
        int destinationDepth = destinationStack.size() - 1;
        for (int j = 0; j < destinationDepth - flatNode.getDepth(); j++) {
            // TODO optimize: faster way to pop multiple elements at once
            destinationStack.pop();
        }
        ProfileNode destinationNode = mergeOne(flatNode, destinationStack.getFirst());
        if (i.hasNext() && i.peek().getDepth() > flatNode.getDepth()) {
            destinationStack.push(destinationNode.childNodes);
        }
    }
}
项目:bouncestorage    文件:BounceService.java   
private void processPolicy(BouncePolicy policy) {
    logger.info("processing policy {} {}", policy.getClass(), status.container);

    ListContainerOptions options = new ListContainerOptions().recursive();

    PeekingIterator<StorageMetadata> destinationIterator = Iterators.peekingIterator(
            Utils.crawlBlobStore(policy.getDestination(), container, options).iterator());
    PeekingIterator<StorageMetadata> sourceIterator = Iterators.peekingIterator(
            Utils.crawlBlobStore(policy, container, options).iterator());

    policy.prepareBounce(container);
    StreamSupport.stream(Spliterators.spliteratorUnknownSize(
            new ReconcileIterator(sourceIterator, destinationIterator), Spliterator.CONCURRENT), true)
            .filter(p -> p.getRight() == null || !WriteBackPolicy.isSwiftSegmentBlob(p.getRight().getName()))
            .forEach((p) -> {
                BounceStorageMetadata sourceObject = p.getLeft();
                StorageMetadata destinationObject = p.getRight();

                reconcileObject(policy, sourceObject, destinationObject);
            });
}
项目:lsmtree    文件:MergingIterator.java   
@Override
protected Generation.Entry<K, V> computeNext() {
    if (heap.isEmpty()) {
        return endOfData();
    }

    PeekingIterator<EntryAndGenerationId<K,V>> first = heap.poll();
    EntryAndGenerationId<K,V> ret = first.next();
    if (first.hasNext()) {
        temp.add(first);
    }
    while (!heap.isEmpty() && keyComparator.compare(ret.entry.getKey(), heap.peek().peek().entry.getKey()) == 0) {
        PeekingIterator<EntryAndGenerationId<K, V>> iter = heap.poll();
        iter.next();
        if (iter.hasNext()) {
            temp.add(iter);
        }
    }
    heap.addAll(temp);
    temp.clear();
    return ret.entry;
}
项目:closure-stylesheets    文件:FixupFontDeclarations.java   
/**
 * Computes the suffix of {@code xs} starting at the first node for which
 * {@code p} fails.
 *
 * {@code Iterables.concat(takeWhile(xs, p), dropWhile(xs, p)) = xs}
 */
private <T> Iterable<T> dropWhile(
    final Iterable<T> xs, final Predicate<? super T> p) {
  return new Iterable<T>() {
    @Override
    public Iterator<T> iterator() {
      PeekingIterator<T> xsi = Iterators.peekingIterator(xs.iterator());
      while (xsi.hasNext()) {
        if (p.apply(xsi.peek())) {
          break;
        }
        xsi.next();
      }
      return xsi;
    }
  };
}
项目:OpenModsLib    文件:Evaluator.java   
private static List<String> parseMacroArgList(PeekingIterator<Token> tokens) {
    final Token firstToken = expectTokens(tokens, TokenType.SYMBOL, TokenType.RIGHT_BRACKET);

    final List<String> args = Lists.newArrayList();
    if (firstToken.type == TokenType.RIGHT_BRACKET) {
        Preconditions.checkState(firstToken.value.equals(")"), "Unexpected bracket: '%s'", firstToken.value);
        return args;
    }

    args.add(firstToken.value);

    while (true) {
        final Token token = expectTokens(tokens, TokenType.SEPARATOR, TokenType.RIGHT_BRACKET);
        if (token.type == TokenType.RIGHT_BRACKET) {
            Preconditions.checkState(token.value.equals(")"), "Unexpected bracket: '%s'", token.value);
            break;
        }

        final String arg = expectToken(tokens, TokenType.SYMBOL);
        args.add(arg);
    }
    return args;
}
项目:OpenModsLib    文件:EvaluatorFactory.java   
@Override
public IModifierStateTransition<Node> getStateForModifier(String modifier) {
    if (MODIFIER_OP.equals(modifier)) {
        return new SingleStateTransition.ForModifier<Node>() {

            @Override
            public Node createRootNode(Node child) {
                return child;
            }

            @Override
            public Node parseSymbol(IParserState<Node> state, PeekingIterator<Token> input) {
                Preconditions.checkState(input.hasNext(), "Unexpected end out input");
                final Token token = input.next();
                Preconditions.checkState(token.type == TokenType.OPERATOR, "Unexpected token, expected operator, got %s", token);
                NodeOp operator = OPERATORS.getOperator(token.value, OperatorArity.BINARY);
                if (operator == null) operator = OPERATORS.getOperator(token.value, OperatorArity.UNARY);
                if (operator == null) throw new IllegalArgumentException("Unknown operator: " + token.value);
                return new Node(operator);
            }

        };
    } else {
        throw new UnsupportedOperationException("Modifier: " + modifier);
    }
}
项目:sstable-adaptor    文件:LegacyLayout.java   
private static Row getNextRow(CellGrouper grouper, PeekingIterator<? extends LegacyAtom> cells)
{
    if (!cells.hasNext())
        return null;

    grouper.reset();
    while (cells.hasNext() && grouper.addAtom(cells.peek()))
    {
        // We've added the cell already in the grouper, so just skip it
        cells.next();
    }
    return grouper.getRow();
}
项目:sstable-adaptor    文件:LegacyLayout.java   
private static Iterator<Row> convertToRows(final CellGrouper grouper, final PeekingIterator<LegacyAtom> atoms)
{
    return new AbstractIterator<Row>()
    {
        protected Row computeNext()
        {
            if (!atoms.hasNext())
                return endOfData();

            return getNextRow(grouper, atoms);
        }
    };
}
项目:tg-eventstore    文件:ReorderingEventReader.java   
@Override
public Stream<ResolvedEvent> readAllForwards(Position positionExclusive) {
    try(Stream<ResolvedEvent> allForwards = underlying.readAllForwards(positionExclusive)) {
        PeekingIterator<ResolvedEvent> allForwardsIterator = Iterators.peekingIterator(allForwards.iterator());

        if (allForwardsIterator.hasNext() && sortKeyExtractor.apply(allForwardsIterator.peek()).compareTo(cutoffSortKey) < 0) {
            allForwards.close();
            return bufferedAndSortedReadAllForwards(positionExclusive);
        }

        return stream(spliteratorUnknownSize(allForwardsIterator, ORDERED), false).onClose(allForwards::close);
    }
}
项目:tg-eventstore    文件:ReorderingEventReader.java   
private Stream<ResolvedEvent> bufferedAndSortedReadAllForwards(Position positionExclusive) {
    try(Stream<ResolvedEvent> allForwards = underlying.readAllForwards()) {

        Iterator<ResolvedEvent> remainder = allForwards.iterator();
        PeekingIterator<EventWithSortKey<T>> sortCandidates = Iterators.peekingIterator(
                Iterators.transform(remainder, re -> new EventWithSortKey<>(re, sortKeyExtractor.apply(re)))
        );

        final LinkedList<EventWithSortKey<T>> buffer = new LinkedList<>();

        while (sortCandidates.hasNext() && sortCandidates.peek().sortKey.compareTo(cutoffSortKey) < 0) {
            buffer.add(sortCandidates.next());
        }

        if (!sortCandidates.hasNext()) {
            return Stream.empty();
        }

        buffer.sort(Comparator.naturalOrder());

        if (!positionExclusive.equals(underlying.emptyStorePosition())) {
            Iterator<EventWithSortKey<T>> bufferIterator = buffer.iterator();
            while (!bufferIterator.next().event.position().equals(positionExclusive)) {
                bufferIterator.remove();
            }
            bufferIterator.remove();
        }

        Stream<EventWithSortKey<T>> reorderedEvents = buffer.stream().onClose(buffer::clear);
        Stream<EventWithSortKey<T>> eventInTheGap = Stream.of(sortCandidates.peek());
        Stream<ResolvedEvent> remainingEvents = stream(spliteratorUnknownSize(remainder, ORDERED), false);

        return concat(concat(reorderedEvents, eventInTheGap).map(EventWithSortKey::toResolvedEvent), remainingEvents).onClose(allForwards::close);
    }
}
项目:tg-eventstore    文件:EventShovel.java   
private static <T> Iterator<Iterator<T>> batchBy(Iterator<T> it, Function<T, Object> grouping) {
    return new Iterator<Iterator<T>>() {
        PeekingIterator<T> peekingIterator = peekingIterator(it);

        @Override
        public boolean hasNext() {
            return peekingIterator.hasNext();
        }

        @Override
        public Iterator<T> next() {
            return new Iterator<T>() {
                private Object currentGroup = grouping.apply(peekingIterator.peek());

                private boolean isSameGroup() {
                    return currentGroup.equals(grouping.apply(peekingIterator.peek()));
                }

                @Override
                public boolean hasNext() {
                    return peekingIterator.hasNext() && isSameGroup();
                }

                @Override
                public T next() {
                    if (!isSameGroup()) {
                        throw new NoSuchElementException();
                    }
                    return peekingIterator.next();
                }
            };
        }
    };
}
项目:tg-eventstore    文件:EventStoreMergingIterator.java   
private Iterator<EventInIdentifiedStream> getIteratorWhoseHeadIsNext() {
    if (iteratorWhoseHeadIsNext != null) {
        return iteratorWhoseHeadIsNext;
    }
    Iterator<PeekingIterator<EventInIdentifiedStream>> streams = underlying.iterator();
    while (streams.hasNext()) {
        PeekingIterator<EventInIdentifiedStream> eventStream = streams.next();

        Instant potentialCutoffTime = clock.instant();
        if (eventStream.hasNext()) {
            if (cutOffTime != null && eventStream.peek().event.effectiveTimestamp().isAfter(cutOffTime)) {
                streams.remove();
            } else if (iteratorWhoseHeadIsNext == null || order.compare(eventStream.peek(), iteratorWhoseHeadIsNext.peek()) < 0) {
                iteratorWhoseHeadIsNext = eventStream;
            }
        } else {
            streams.remove();
            if (this.cutOffTime == null) {
                this.cutOffTime = potentialCutoffTime.minus(delay).toEpochMilli();
            }
        }
    }

    if (iteratorWhoseHeadIsNext != null) {
        long cutoff = this.cutOffTime == null ? clock.instant().minus(delay).toEpochMilli() : this.cutOffTime;
        if (iteratorWhoseHeadIsNext.peek().event.effectiveTimestamp().isAfter(cutoff)) {
            underlying.clear();
            return null;
        }
    }
    return iteratorWhoseHeadIsNext;
}
项目:javaide    文件:JavaInputAstVisitor.java   
/**
 * The parser expands multi-variable declarations into separate single-variable declarations. All
 * of the fragments in the original declaration have the same start position, so we use that as a
 * signal to collect them and preserve the multi-variable declaration in the output.
 * <p>
 * <p>e.g. {@code int x, y;} is parsed as {@code int x; int y;}.
 */
private List<VariableTree> variableFragments(PeekingIterator<? extends Tree> it, Tree first) {
    List<VariableTree> fragments = new ArrayList<>();
    if (first.getKind() == VARIABLE) {
        int start = getStartPosition(first);
        fragments.add((VariableTree) first);
        while (it.hasNext()
                && it.peek().getKind() == VARIABLE
                && getStartPosition(it.peek()) == start) {
            fragments.add((VariableTree) it.next());
        }
    }
    return fragments;
}
项目:javaide    文件:JavadocLexer.java   
/**
 * Where the input has two consecutive line breaks between literals, insert a {@code <p>} tag
 * between the literals.
 * <p>
 * <p>This method must be called after {@link #joinAdjacentLiteralsAndAdjacentWhitespace}, as it
 * assumes that adjacent whitespace tokens have already been joined.
 */
private static ImmutableList<Token> inferParagraphTags(List<Token> input) {
    ImmutableList.Builder<Token> output = ImmutableList.builder();

    for (PeekingIterator<Token> tokens = peekingIterator(input.iterator()); tokens.hasNext(); ) {
        if (tokens.peek().getType() == LITERAL) {
            output.add(tokens.next());

            if (tokens.peek().getType() == WHITESPACE
                    && hasMultipleNewlines(tokens.peek().getValue())) {
                output.add(tokens.next());

                if (tokens.peek().getType() == LITERAL) {
                    output.add(new Token(PARAGRAPH_OPEN_TAG, "<p>"));
                }
            }
        } else {
            // TODO(cpovirk): Or just `continue` from the <p> case and move this out of the `else`?
            output.add(tokens.next());
        }
    }

    return output.build();

/*
 * Note: We do not want to insert <p> tags inside <pre>. Fortunately, the formatter gets that
 * right without special effort on our part. The reason: Line breaks inside a <pre> section are
 * of type FORCED_NEWLINE rather than WHITESPACE.
 */
}
项目:Elasticsearch    文件:PlainSortedMergeIterator.java   
public PlainSortedMergeIterator(Iterable<? extends KeyIterable<TKey, TRow>> iterables, final Comparator<? super TRow> itemComparator) {

        Comparator<PeekingIterator<TRow>> heapComparator = new Comparator<PeekingIterator<TRow>>() {
            @Override
            public int compare(PeekingIterator<TRow> o1, PeekingIterator<TRow> o2) {
                return itemComparator.compare(o1.peek(), o2.peek());
            }
        };
        queue = new PriorityQueue<>(2, heapComparator);
        addIterators(iterables);
    }
项目:incubator-omid    文件:CompactorScanner.java   
private void skipToNextColumn(Cell cell, PeekingIterator<Map.Entry<Cell, Optional<Cell>>> iter) {
    while (iter.hasNext()
            && CellUtil.matchingFamily(iter.peek().getKey(), cell)
            && CellUtil.matchingQualifier(iter.peek().getKey(), cell)) {
        iter.next();
    }
}
项目:wav2pzx    文件:PZXPulseBlock.java   
/**
    * Return the on-disk PZX format data for the supplied PulseList
 * @param pulseList the PulseList to encode into the disk representation
    * @return the byte[] with the PZX disk format data
     */
public static byte[] getPZXBlockDiskRepresentation(PulseList pulseList) {
    // iterate through the pulse array doing a run length encoding of the number of repeated values
       PeekingIterator<Long> iterator = Iterators.peekingIterator(pulseList.getPulseLengths().iterator());
       int count;
       // We will probably have a similar number of bytes output as source pulses * 2 16 bit values
       ArrayList<Byte> output = new ArrayList<>(pulseList.getPulseLengths().size()*4);

       // The pulse level is low at start of the block by default. However initial
       // pulse of zero duration may be easily used to make it high.
       if( pulseList.getFirstPulseLevel() == 1 ) {
           PZXEncodeUtils.addBytesFor(0, 1, output);
       }

       // RLE the pulses found in the block for encoding
       while(iterator.hasNext()) {
           long pulse = iterator.next();
           count = 1;
           while(iterator.hasNext() && iterator.peek() == pulse) { 
               iterator.next();
               count += 1;
           }

           // Write the desired output bytes to the output list
           PZXEncodeUtils.addBytesFor(pulse, count, output);
       }

       return addPZXBlockHeader("PULS", output);
}