You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2019/07/15 23:31:06 UTC
[tinkerpop] 02/02: TINKERPOP-1921 Add HasNext() to .NET
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-1921
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 233eb2d6520a37e9b6a8d79111b7c56bdaec98a0
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Mon Jul 15 19:30:22 2019 -0400
TINKERPOP-1921 Add HasNext() to .NET
---
.../Process/Traversal/DefaultTraversal.cs | 29 ++++++++++++++++++++--
.../Gremlin.Net/Process/Traversal/ITraversal.cs | 6 +++++
.../Process/Traversal/TraversalTests.cs | 18 ++++++++++++++
3 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
index 1ffda51..8f56352 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
@@ -64,6 +64,9 @@ namespace Gremlin.Net.Process.Traversal
private IEnumerator<Traverser> TraverserEnumerator
=> _traverserEnumerator ?? (_traverserEnumerator = GetTraverserEnumerator());
+ private bool _nextAvailable;
+ private bool _fetchedNext;
+
/// <inheritdoc />
public void Dispose()
{
@@ -73,13 +76,27 @@ namespace Gremlin.Net.Process.Traversal
/// <inheritdoc />
public bool MoveNext()
{
+ var more = MoveNextInternal();
+ _fetchedNext = false;
+ return more;
+ }
+
+ private bool MoveNextInternal()
+ {
+ if (_fetchedNext) return _nextAvailable;
+
var currentTraverser = TraverserEnumerator.Current;
if (currentTraverser?.Bulk > 1)
{
currentTraverser.Bulk--;
- return true;
+ _nextAvailable = true;
}
- return TraverserEnumerator.MoveNext();
+ else
+ {
+ _nextAvailable = TraverserEnumerator.MoveNext();
+ }
+
+ return _nextAvailable;
}
/// <summary>
@@ -167,6 +184,14 @@ namespace Gremlin.Net.Process.Traversal
await strategy.ApplyAsync(this).ConfigureAwait(false);
}
+ /// <inheritdoc />
+ public bool HasNext()
+ {
+ var more = MoveNextInternal();
+ _fetchedNext = true;
+ return more;
+ }
+
/// <summary>
/// Gets the next result from the traversal.
/// </summary>
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
index 498ef7f..48268c1 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
@@ -68,6 +68,12 @@ namespace Gremlin.Net.Process.Traversal
E Next();
/// <summary>
+ /// Determines if the traversal contains any additional results for iteration.
+ /// </summary>
+ /// <returns>True if there are more results and false otherwise.</returns>
+ bool HasNext();
+
+ /// <summary>
/// Gets the next n-number of results from the traversal.
/// </summary>
/// <param name="amount">The number of results to get.</param>
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
index f32b567..a7d62ac 100644
--- a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
@@ -42,6 +42,24 @@ namespace Gremlin.Net.UnitTest.Process.Traversal
var actualObj = traversal.Next();
Assert.Equal(traverserObj, actualObj);
+
+ Assert.Equal(null, traversal.Next());
+ }
+ [Theory]
+ [InlineData(1)]
+ [InlineData("test")]
+ public void ShouldCheckHasNext(object traverserObj)
+ {
+ var traversal = new TestTraversal(new List<object> {traverserObj});
+
+ Assert.Equal(true, traversal.HasNext());
+ Assert.Equal(true, traversal.HasNext());
+
+ var actualObj = traversal.Next();
+ Assert.Equal(traverserObj, actualObj);
+
+ Assert.Equal(false, traversal.HasNext());
+ Assert.Equal(false, traversal.HasNext());
}
[Theory]