@Override protected boolean filter(final Traverser.Admin<S> traverser) { if (this.onGraphComputer && !this.executingAtMaster) return true; traverser.setBulk(1L); if (null == this.dedupLabels) { return this.duplicateSet.add(TraversalUtil.applyNullable(traverser, this.dedupTraversal)); } else { final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); this.dedupLabels.forEach(label -> objects.add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal))); return this.duplicateSet.add(objects); } }
@Override protected boolean filter(final Traverser.Admin<S> traverser) { if (this.bypass) return true; if (this.high != -1 && this.counter.get() >= this.high) { throw FastNoSuchElementException.instance(); } long avail = traverser.bulk(); if (this.counter.get() + avail <= this.low) { // Will not surpass the low w/ this traverser. Skip and filter the whole thing. this.counter.getAndAdd(avail); return false; } // Skip for the low and trim for the high. Both can happen at once. long toSkip = 0; if (this.counter.get() < this.low) { toSkip = this.low - this.counter.get(); } long toTrim = 0; if (this.high != -1 && this.counter.get() + avail >= this.high) { toTrim = this.counter.get() + avail - this.high; } long toEmit = avail - toSkip - toTrim; this.counter.getAndAdd(toSkip + toEmit); traverser.setBulk(toEmit); return true; }
@Override public Map<Object, Traverser.Admin<S>> nextBarrier() throws NoSuchElementException { final Map<Object, Traverser.Admin<S>> map = null != this.barrier ? this.barrier : new HashMap<>(); while (this.starts.hasNext()) { final Traverser.Admin<S> traverser = this.starts.next(); final Object object; if (null != this.dedupLabels) { object = new ArrayList<>(this.dedupLabels.size()); for (final String label : this.dedupLabels) { ((List) object).add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal)); } } else { object = TraversalUtil.applyNullable(traverser, this.dedupTraversal); } if (!map.containsKey(object)) { traverser.setBulk(1L); // traverser.detach(); traverser.set(DetachedFactory.detach(traverser.get(), true)); // TODO: detect required detachment accordingly map.put(object, traverser); } } this.barrier = null; this.barrierIterator = null; if (map.isEmpty()) throw FastNoSuchElementException.instance(); else return map; }
@Override protected boolean filter(final Traverser.Admin<S> traverser) { if (this.onGraphComputer && !this.executingAtMaster) return true; traverser.setBulk(1L); if (null == this.dedupLabels) { return this.duplicateSet.add(TraversalUtil.applyNullable(traverser, this.dedupTraversal)); } else { final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); this.dedupLabels.forEach(label -> objects.add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal))); return this.duplicateSet.add(objects); } }
public static <S, E> boolean test(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.addStart(split); return traversal.hasNext(); // filter }
@Test @LoadGraphWith public void shouldNeverPropagateANoBulkTraverser() { try { assertFalse(g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).hasNext()); assertEquals(0, g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).toList().size()); g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).sideEffect(t -> fail("this should not have happened")).iterate(); } catch (VerificationException e) { // its okay if lambdas can't be serialized by the test suite } }
public static final <S, E> Iterator<E> applyAll(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); return traversal; // flatmap }
public static final <S, E> E apply(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); try { return traversal.next(); // map } catch (final NoSuchElementException e) { throw new IllegalArgumentException("The provided traverser does not map to a value: " + split + "->" + traversal); } }
if (RANDOM.nextDouble() <= ((runningWeight / totalWeight))) { final Traverser.Admin<S> split = s.split(); split.setBulk(1L); sampledSet.add(split); runningAmountToSample++;
@Override public Traverser.Admin<S> processNextStart() { if (this.bypass) { // If we are bypassing this step, let everything through. return this.starts.next(); } else { // Pull everything available before we start delivering from the tail buffer. if (this.starts.hasNext()) { this.starts.forEachRemaining(this::addTail); } // Pull the oldest traverser from the tail buffer. final Traverser.Admin<S> oldest = this.tail.pop(); // Trim any excess from the oldest traverser. final long excess = this.tailBulk - this.limit; if (excess > 0) { oldest.setBulk(oldest.bulk() - excess); // Account for the loss of excess in the tail buffer this.tailBulk -= excess; } // Account for the loss of bulk in the tail buffer as we emit the oldest traverser. this.tailBulk -= oldest.bulk(); return oldest; } }
@Override protected boolean filter(final Traverser.Admin<S> traverser) { long newBulk = 0l; if (traverser.bulk() < 100) { for (int i = 0; i < traverser.bulk(); i++) { if (this.probability >= RANDOM.nextDouble()) newBulk++; } /*} else if (traverser.bulk() < 1000000) { final double cumulative = RANDOM.nextDouble(); final long current = Double.valueOf(traverser.bulk() / 2.0d).longValue(); final double next = choose(traverser.bulk(), current) * Math.pow(this.probability,current) * Math.pow(1.0d - this.probability,traverser.bulk() - current); if() */ } else { newBulk = Math.round(this.probability * traverser.bulk()); } if (0 == newBulk) return false; traverser.setBulk(newBulk); return true; }
public static final <S, E> boolean test(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal, E end) { if (null == end) return TraversalUtil.test(traverser, traversal); final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); final Step<?, E> endStep = traversal.getEndStep(); while (traversal.hasNext()) { if (endStep.next().get().equals(end)) return true; } return false; }
@Override public E next() { if (0L == this.lastTraverser.bulk()) this.lastTraverser = this.traversers.next(); if (1L == this.lastTraverser.bulk()) { final E temp = this.lastTraverser.get(); this.lastTraverser = EmptyTraverser.instance(); return temp; } else { this.lastTraverser.setBulk(this.lastTraverser.bulk() - 1L); return this.lastTraverser.get(); } }
public static final <S, E> E apply(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); try { return traversal.next(); // map } catch (final NoSuchElementException e) { throw new IllegalArgumentException("The provided traverser does not map to a value: " + split + "->" + traversal); } }
@Test @LoadGraphWith public void shouldNeverPropagateANoBulkTraverser() { try { assertFalse(g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).hasNext()); assertEquals(0, g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).toList().size()); g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).sideEffect(t -> fail("this should not have happened")).iterate(); } catch (VerificationException e) { // its okay if lambdas can't be serialized by the test suite } }
public static final <S, E> Iterator<E> applyAll(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); return traversal; // flatmap }
@Override public void setBulk(final long count) { this.baseTraverser.setBulk(count); }
@Override public E next() { try { if (!this.locked) this.applyStrategies(); if (this.lastTraverser.bulk() == 0L) this.lastTraverser = this.finalEndStep.next(); this.lastTraverser.setBulk(this.lastTraverser.bulk() - 1L); return this.lastTraverser.get(); } catch (final FastNoSuchElementException e) { throw this.parent instanceof EmptyStep ? new NoSuchElementException() : e; } }
public static final <S, E> boolean test(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); return traversal.hasNext(); // filter }
@Override protected Iterator<E> flatMap(final Traverser.Admin<S> traverser) { final Traverser.Admin<S> innerTraverser = traverser.clone().asAdmin(); innerTraverser.setBulk(1L); for (final Traversal.Admin<S, E> coalesceTraversal : this.coalesceTraversals) { coalesceTraversal.reset(); coalesceTraversal.addStart(innerTraverser.split()); if (coalesceTraversal.hasNext()) return coalesceTraversal; } return EmptyIterator.instance(); }