public override TraversalBranch Next(PathExpander expander, TraversalContext context) { if (_relationships == null) { ExpandRelationships(expander); } while (_relationships.MoveNext()) { Relationship relationship = _relationships.Current; if (relationship.Equals(_howIGotHere)) { context.UnnecessaryRelationshipTraversed(); continue; } _expandedCount++; Node node = relationship.GetOtherNode(_source); // TODO maybe an unnecessary instantiation. Instead pass in this+node+relationship to uniqueness check TraversalBranch next = NewNextBranch(node, relationship); if (context.IsUnique(next)) { context.RelationshipTraversed(); next.Initialize(expander, context); return(next); } else { context.UnnecessaryRelationshipTraversed(); } } ResetRelationships(); return(null); }