private boolean hasMatched(final ConnectiveStep.Connective connective, final Traverser.Admin<S> traverser) { int counter = 0; boolean matched = false; for (final Traversal.Admin<Object, Object> matchTraversal : this.matchTraversals) { if (traverser.getTags().contains(matchTraversal.getStartStep().getId())) { if (connective == ConnectiveStep.Connective.OR) { matched = true; break; } counter++; } } if (!matched) matched = this.matchTraversals.size() == counter; if (matched && this.dedupLabels != null) { final Path path = traverser.path(); final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); for (final String label : this.dedupLabels) { objects.add(path.get(Pop.last, label)); } this.dedups.add(objects); } return matched; }
private <S> Traverser.Admin<S> retractUnnecessaryLabels(final Traverser.Admin<S> traverser) { if (null == this.parent.getKeepLabels()) return traverser; final Set<String> keepers = new HashSet<>(this.parent.getKeepLabels()); final Set<String> tags = traverser.getTags(); for (final Traversal.Admin<?, ?> matchTraversal : this.parent.matchTraversals) { // get remaining traversal patterns for the traverser final String startStepId = matchTraversal.getStartStep().getId(); if (!tags.contains(startStepId)) { keepers.addAll(this.parent.getReferencedLabelsMap().get(startStepId)); // get the reference labels required for those remaining traversals } } return PathProcessor.processTraverserPathLabels(traverser, keepers); // remove all reference labels that are no longer required }
if (this.standardAlgorithmBarrier.isEmpty()) { traverser = this.starts.next(); if (!traverser.getTags().contains(this.getId())) { traverser.getTags().add(this.getId()); // so the traverser never returns to this branch ever again if (!this.hasPathLabel(traverser.path(), this.matchStartLabels)) traverser.addLabels(Collections.singleton(this.computedStartLabel)); // if the traverser doesn't have a legal start, then provide it the pre-computed one traverser.getTags().add(matchTraversal.getStartStep().getId()); split.getTags().add(matchTraversal.getStartStep().getId()); matchTraversal.addStart(split);
if (!traverser.getTags().contains(this.getId())) { traverser.getTags().add(this.getId()); // so the traverser never returns to this branch ever again if (!this.hasPathLabel(traverser.path(), this.matchStartLabels)) traverser.addLabels(Collections.singleton(this.computedStartLabel)); // if the traverser doesn't have a legal start, then provide it the pre-computed one traverser.getTags().add(matchTraversal.getStartStep().getId()); for (final Traversal.Admin<?, ?> matchTraversal : this.matchTraversals) { final Traverser.Admin split = traverser.split(); split.getTags().add(matchTraversal.getStartStep().getId()); split.setStepId(matchTraversal.getStartStep().getId()); traversers.add(split);
private boolean hasMatched(final ConnectiveStep.Connective connective, final Traverser.Admin<S> traverser) { int counter = 0; boolean matched = false; for (final Traversal.Admin<Object, Object> matchTraversal : this.matchTraversals) { if (traverser.getTags().contains(matchTraversal.getStartStep().getId())) { if (connective == ConnectiveStep.Connective.OR) { matched = true; break; } counter++; } } if (!matched) matched = this.matchTraversals.size() == counter; if (matched && this.dedupLabels != null) { final Path path = traverser.path(); final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); for (final String label : this.dedupLabels) { objects.add(path.get(Pop.last, label)); } this.dedups.add(objects); } return matched; }
@Override public void merge(final Traverser.Admin<?> other) { if (this.requiresOneBulk) { //O_Traverser if (!other.getTags().isEmpty()) { if (this.tags == null) this.tags = new HashSet<>(); this.tags.addAll(other.getTags()); } //skip the B_O_Traverser //B_O_Traverser //this.bulk = this.bulk + other.bulk(); //B_O_S_SE_SL_Traverser if (null != this.sack && null != this.sideEffects.getSackMerger()) this.sack = this.sideEffects.getSackMerger().apply(this.sack, other.sack()); } else { super.merge(other); } }
@Override public void merge(final Traverser.Admin<?> other) { if (this.requiresOneBulk) { //O_Traverser if (!other.getTags().isEmpty()) { if (this.tags == null) this.tags = new HashSet<>(); this.tags.addAll(other.getTags()); } //skip the B_O_Traverser //B_O_Traverser //this.bulk = this.bulk + other.bulk(); //B_O_S_SE_SL_Traverser if (null != this.sack && null != this.sideEffects.getSackMerger()) this.sack = this.sideEffects.getSackMerger().apply(this.sack, other.sack()); } else { super.merge(other); } }
public static boolean hasExecutedTraversal(final Traverser.Admin<Object> traverser, final Traversal.Admin<Object, Object> traversal) { return traverser.getTags().contains(traversal.getStartStep().getId()); }
@Override public Set<String> getTags() { return this.baseTraverser.getTags(); }
private <S> Traverser.Admin<S> retractUnnecessaryLabels(final Traverser.Admin<S> traverser) { if (null == this.parent.getKeepLabels()) return traverser; final Set<String> keepers = new HashSet<>(this.parent.getKeepLabels()); final Set<String> tags = traverser.getTags(); for (final Traversal.Admin<?, ?> matchTraversal : this.parent.matchTraversals) { // get remaining traversal patterns for the traverser final String startStepId = matchTraversal.getStartStep().getId(); if (!tags.contains(startStepId)) { keepers.addAll(this.parent.getReferencedLabelsMap().get(startStepId)); // get the reference labels required for those remaining traversals } } return PathProcessor.processTraverserPathLabels(traverser, keepers); // remove all reference labels that are no longer required }
if (this.standardAlgorithmBarrier.isEmpty()) { traverser = this.starts.next(); if (!traverser.getTags().contains(this.getId())) { traverser.getTags().add(this.getId()); // so the traverser never returns to this branch ever again if (!this.hasPathLabel(traverser.path(), this.matchStartLabels)) traverser.addLabels(Collections.singleton(this.computedStartLabel)); // if the traverser doesn't have a legal start, then provide it the pre-computed one traverser.getTags().add(matchTraversal.getStartStep().getId()); split.getTags().add(matchTraversal.getStartStep().getId()); matchTraversal.addStart(split);
if (!traverser.getTags().contains(this.getId())) { traverser.getTags().add(this.getId()); // so the traverser never returns to this branch ever again if (!this.hasPathLabel(traverser.path(), this.matchStartLabels)) traverser.addLabels(Collections.singleton(this.computedStartLabel)); // if the traverser doesn't have a legal start, then provide it the pre-computed one traverser.getTags().add(matchTraversal.getStartStep().getId()); for (final Traversal.Admin<?, ?> matchTraversal : this.matchTraversals) { final Traverser.Admin split = traverser.split(); split.getTags().add(matchTraversal.getStartStep().getId()); split.setStepId(matchTraversal.getStartStep().getId()); traversers.add(split);
public static boolean hasExecutedTraversal(final Traverser.Admin<Object> traverser, final Traversal.Admin<Object, Object> traversal) { return traverser.getTags().contains(traversal.getStartStep().getId()); }
@Override public Set<String> getTags() { return this.baseTraverser.getTags(); }