Fix Bindings for type safe GraphTraversal interface
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/deb030c5 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/deb030c5 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/deb030c5 Branch: refs/heads/TINKERPOP-1752 Commit: deb030c5c2d27c0f227c600cb638f3b32e19ca42 Parents: 4212958 Author: florianhockmann <[email protected]> Authored: Wed Sep 6 20:08:47 2017 +0200 Committer: florianhockmann <[email protected]> Committed: Tue Sep 12 16:39:38 2017 +0200 ---------------------------------------------------------------------- .../Gremlin.Net/Process/Traversal/Bindings.cs | 32 ++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deb030c5/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs index 985369e..e15a202 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs @@ -21,6 +21,9 @@ #endregion +using System.Collections.Generic; +using System.Threading; + namespace Gremlin.Net.Process.Traversal { /// <summary> @@ -29,14 +32,39 @@ namespace Gremlin.Net.Process.Traversal public class Bindings { /// <summary> + /// Gets an instance of the <see cref="Bindings" /> class. + /// </summary> + public static Bindings Instance { get; } = new Bindings(); + + private static readonly ThreadLocal<Dictionary<object, string>> BoundVariableByValue = + new ThreadLocal<Dictionary<object, string>>(); + + /// <summary> /// Binds the variable to the specified value. /// </summary> /// <param name="variable">The variable to bind.</param> /// <param name="value">The value to which the variable should be bound.</param> /// <returns>The bound value.</returns> - public Binding Of(string variable, object value) + public TV Of<TV>(string variable, TV value) + { + var dict = BoundVariableByValue.Value; + if (dict == null) + { + dict = new Dictionary<object, string>(); + BoundVariableByValue.Value = dict; + } + dict[value] = variable; + return value; + } + + internal static string GetBoundVariable<TV>(TV value) + { + return BoundVariableByValue.Value?[value]; + } + + internal static void Clear() { - return new Binding(variable, value); + BoundVariableByValue.Value?.Clear(); } } } \ No newline at end of file
