/**
* 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;
}
java类com.google.common.collect.PeekingIterator的实例源码
Bounds.java 文件源码
项目:sstable-adaptor
阅读 37
收藏 0
点赞 0
评论 0
JavaInputAstVisitor.java 文件源码
项目:javaide
阅读 49
收藏 0
点赞 0
评论 0
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);
}
}
}
JavadocLexer.java 文件源码
项目:javaide
阅读 26
收藏 0
点赞 0
评论 0
/**
* 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.
*/
}
JavadocLexer.java 文件源码
项目:javaide
阅读 28
收藏 0
点赞 0
评论 0
/**
* 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();
}
SemevalReader.java 文件源码
项目:clearwsd
阅读 30
收藏 0
点赞 0
评论 0
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);
}
Numbers.java 文件源码
项目:Mastering-Mesos
阅读 33
收藏 0
点赞 0
评论 0
/**
* 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();
}
StateManagerImplTest.java 文件源码
项目:Mastering-Mesos
阅读 32
收藏 0
点赞 0
评论 0
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.
}
}
}
PZXBuilder.java 文件源码
项目:wav2pzx
阅读 29
收藏 0
点赞 0
评论 0
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;
}
PZXBuilder.java 文件源码
项目:wav2pzx
阅读 29
收藏 0
点赞 0
评论 0
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());
}
TimeLimitedIteratorTest.java 文件源码
项目:emodb
阅读 30
收藏 0
点赞 0
评论 0
@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));
}
AstyanaxEventReaderDAO.java 文件源码
项目:emodb
阅读 37
收藏 0
点赞 0
评论 0
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;
}
}
}
IndentationAwareCompletionPrefixProvider.java 文件源码
项目:xtext-core
阅读 24
收藏 0
点赞 0
评论 0
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;
}
RestoreCommitLogsAction.java 文件源码
项目:nomulus
阅读 24
收藏 0
点赞 0
评论 0
/**
* 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;
}
LocalProperties.java 文件源码
项目:presto
阅读 36
收藏 0
点赞 0
评论 0
/**
* 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;
}
JavaInputAstVisitor.java 文件源码
项目:google-java-format
阅读 25
收藏 0
点赞 0
评论 0
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);
}
}
}
JavadocLexer.java 文件源码
项目:google-java-format
阅读 28
收藏 0
点赞 0
评论 0
/**
* 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.
*/
}
JavadocLexer.java 文件源码
项目:google-java-format
阅读 27
收藏 0
点赞 0
评论 0
/**
* 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();
}
SortMergedPartitionResultIterator.java 文件源码
项目:kylin
阅读 24
收藏 0
点赞 0
评论 0
@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;
}
Bounds.java 文件源码
项目:scylla-tools-java
阅读 41
收藏 0
点赞 0
评论 0
/**
* 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;
}
CounterMutation.java 文件源码
项目:scylla-tools-java
阅读 28
收藏 0
点赞 0
评论 0
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);
}
}
AbstractExpectedExceptionChecker.java 文件源码
项目:error-prone
阅读 65
收藏 0
点赞 0
评论 0
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);
}
GroupingIterable.java 文件源码
项目:jg2p
阅读 27
收藏 0
点赞 0
评论 0
@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;
}
};
}
TraceCommonService.java 文件源码
项目:glowroot
阅读 40
收藏 0
点赞 0
评论 0
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();
}
MutableProfile.java 文件源码
项目:glowroot
阅读 34
收藏 0
点赞 0
评论 0
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);
}
}
}
BounceService.java 文件源码
项目:bouncestorage
阅读 34
收藏 0
点赞 0
评论 0
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);
});
}
MergingIterator.java 文件源码
项目:lsmtree
阅读 25
收藏 0
点赞 0
评论 0
@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;
}
FixupFontDeclarations.java 文件源码
项目:closure-stylesheets
阅读 26
收藏 0
点赞 0
评论 0
/**
* 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;
}
};
}
Evaluator.java 文件源码
项目:OpenModsLib
阅读 50
收藏 0
点赞 0
评论 0
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;
}
EvaluatorFactory.java 文件源码
项目:OpenModsLib
阅读 27
收藏 0
点赞 0
评论 0
@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);
}
}
LegacyLayout.java 文件源码
项目:sstable-adaptor
阅读 25
收藏 0
点赞 0
评论 0
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();
}