You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "pieter martin (JIRA)" <ji...@apache.org> on 2015/07/10 20:38:04 UTC
[jira] [Created] (TINKERPOP3-766) Make B_O_P_S_SE_SL_Traverser.path
mutable
pieter martin created TINKERPOP3-766:
----------------------------------------
Summary: Make B_O_P_S_SE_SL_Traverser.path mutable
Key: TINKERPOP3-766
URL: https://issues.apache.org/jira/browse/TINKERPOP3-766
Project: TinkerPop 3
Issue Type: Improvement
Components: process
Affects Versions: 3.0.0.GA
Reporter: pieter martin
Assignee: Marko A. Rodriguez
B_O_P_S_SE_SL_Traverser.path variable is currently immutable.
Following on a discussion earlier on the mailing list it needs to be mutable to ensure that the path reflects the correct state when labeled steps have been collapsed into one optimized step.
An indication of how I am using this at the moment in an optimized 'compiled' step is as follows,
{code}
@Override
protected Traverser<E> processNextStart() {
while (true) {
if (this.iterator.hasNext()) {
Pair<E, Map<String, Object>> next = this.iterator.next();
E e = next.getLeft();
Map<String, Object> labeledObjects = next.getRight();
//split before setting the path.
//This is because the labels must be set on a unique path for every iteration.
B_O_P_S_SE_SL_Traverser split = (B_O_P_S_SE_SL_Traverser) this.head.split(e, this);
for (String label : labeledObjects.keySet()) {
split.setPath(split.path().extend(labeledObjects.get(label), new HashSet<>(Arrays.asList(label))));
}
return split;
} else {
this.head = (B_O_P_S_SE_SL_Traverser) this.starts.next();
this.iterator = this.flatMapCustom(this.head);
}
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)