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 2017/07/13 17:48:00 UTC
[12/52] [abbrv] tinkerpop git commit: Add Gremlin-CSharp and
Gremlin-DotNet
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/GraphTraversalSource.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/GraphTraversalSource.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/GraphTraversalSource.cs
new file mode 100644
index 0000000..e68fdee
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/GraphTraversalSource.cs
@@ -0,0 +1,143 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+using Gremlin.Net.Process.Remote;
+using Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Process.Traversal.Strategy.Decoration;
+
+namespace Gremlin.CSharp.Process
+{
+ public class GraphTraversalSource
+ {
+ public ICollection<ITraversalStrategy> TraversalStrategies { get; set; }
+ public Bytecode Bytecode { get; set; }
+
+ public GraphTraversalSource()
+ : this(new List<ITraversalStrategy>(), new Bytecode())
+ {
+ }
+
+ public GraphTraversalSource(ICollection<ITraversalStrategy> traversalStrategies, Bytecode bytecode)
+ {
+ TraversalStrategies = traversalStrategies;
+ Bytecode = bytecode;
+ }
+
+ public GraphTraversalSource WithBulk(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withBulk", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithPath(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withPath", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithSack(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withSack", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithSideEffect(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withSideEffect", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithStrategies(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withStrategies", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithoutStrategies(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("withoutStrategies", args);
+ return source;
+ }
+
+ public GraphTraversalSource WithBindings(object bindings)
+ {
+ return this;
+ }
+
+ public GraphTraversalSource WithRemote(IRemoteConnection remoteConnection)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.TraversalStrategies.Add(new RemoteStrategy(remoteConnection));
+ return source;
+ }
+
+ public GraphTraversalSource WithComputer(string graphComputer = null, int? workers = null, string persist = null,
+ string result = null, ITraversal vertices = null, ITraversal edges = null,
+ Dictionary<string, dynamic> configuration = null)
+ {
+ return WithStrategies(new VertexProgramStrategy(graphComputer, workers, persist, result, vertices, edges, configuration));
+ }
+
+ public GraphTraversal E(params object[] args)
+ {
+ var traversal = new GraphTraversal(TraversalStrategies, new Bytecode(Bytecode));
+ traversal.Bytecode.AddStep("E", args);
+ return traversal;
+ }
+
+ public GraphTraversal V(params object[] args)
+ {
+ var traversal = new GraphTraversal(TraversalStrategies, new Bytecode(Bytecode));
+ traversal.Bytecode.AddStep("V", args);
+ return traversal;
+ }
+
+ public GraphTraversal AddV(params object[] args)
+ {
+ var traversal = new GraphTraversal(TraversalStrategies, new Bytecode(Bytecode));
+ traversal.Bytecode.AddStep("addV", args);
+ return traversal;
+ }
+
+ public GraphTraversal Inject(params object[] args)
+ {
+ var traversal = new GraphTraversal(TraversalStrategies, new Bytecode(Bytecode));
+ traversal.Bytecode.AddStep("inject", args);
+ return traversal;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/Operator.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/Operator.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/Operator.cs
new file mode 100644
index 0000000..5a9f805
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/Operator.cs
@@ -0,0 +1,40 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum Operator
+ {
+ addAll,
+ and,
+ assign,
+ div,
+ max,
+ min,
+ minus,
+ mult,
+ or,
+ sum,
+ sumLong
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/Order.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/Order.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/Order.cs
new file mode 100644
index 0000000..1a30c7d
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/Order.cs
@@ -0,0 +1,36 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum Order
+ {
+ decr,
+ incr,
+ keyDecr,
+ keyIncr,
+ shuffle,
+ valueDecr,
+ valueIncr
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/P.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/P.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/P.cs
new file mode 100644
index 0000000..62282b7
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/P.cs
@@ -0,0 +1,108 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.CSharp.Process
+{
+ public class P
+ {
+ public static TraversalPredicate Between(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("between", value);
+ }
+
+ public static TraversalPredicate Eq(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("eq", value);
+ }
+
+ public static TraversalPredicate Gt(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("gt", value);
+ }
+
+ public static TraversalPredicate Gte(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("gte", value);
+ }
+
+ public static TraversalPredicate Inside(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("inside", value);
+ }
+
+ public static TraversalPredicate Lt(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("lt", value);
+ }
+
+ public static TraversalPredicate Lte(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("lte", value);
+ }
+
+ public static TraversalPredicate Neq(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("neq", value);
+ }
+
+ public static TraversalPredicate Not(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("not", value);
+ }
+
+ public static TraversalPredicate Outside(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("outside", value);
+ }
+
+ public static TraversalPredicate Test(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("test", value);
+ }
+
+ public static TraversalPredicate Within(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("within", value);
+ }
+
+ public static TraversalPredicate Without(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("without", value);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/Pick.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/Pick.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/Pick.cs
new file mode 100644
index 0000000..17c27d7
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/Pick.cs
@@ -0,0 +1,31 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum Pick
+ {
+ any,
+ none
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/Pop.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/Pop.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/Pop.cs
new file mode 100644
index 0000000..4e14d94
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/Pop.cs
@@ -0,0 +1,32 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum Pop
+ {
+ all,
+ first,
+ last
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/Scope.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/Scope.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/Scope.cs
new file mode 100644
index 0000000..a9578ee
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/Scope.cs
@@ -0,0 +1,31 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum Scope
+ {
+ global,
+ local
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/T.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/T.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/T.cs
new file mode 100644
index 0000000..4bf9062
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/T.cs
@@ -0,0 +1,33 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public enum T
+ {
+ id,
+ key,
+ label,
+ value
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Process/__.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Process/__.cs b/gremlin-dotnet/src/Gremlin.CSharp/Process/__.cs
new file mode 100644
index 0000000..2db0082
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Process/__.cs
@@ -0,0 +1,488 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.CSharp.Process
+{
+ public static class __
+ {
+ public static GraphTraversal Start()
+ {
+ return new GraphTraversal();
+ }
+
+ public static GraphTraversal V(params object[] args)
+ {
+ return new GraphTraversal().V(args);
+ }
+
+ public static GraphTraversal AddE(params object[] args)
+ {
+ return new GraphTraversal().AddE(args);
+ }
+
+ public static GraphTraversal AddInE(params object[] args)
+ {
+ return new GraphTraversal().AddInE(args);
+ }
+
+ public static GraphTraversal AddOutE(params object[] args)
+ {
+ return new GraphTraversal().AddOutE(args);
+ }
+
+ public static GraphTraversal AddV(params object[] args)
+ {
+ return new GraphTraversal().AddV(args);
+ }
+
+ public static GraphTraversal Aggregate(params object[] args)
+ {
+ return new GraphTraversal().Aggregate(args);
+ }
+
+ public static GraphTraversal And(params object[] args)
+ {
+ return new GraphTraversal().And(args);
+ }
+
+ public static GraphTraversal As(params object[] args)
+ {
+ return new GraphTraversal().As(args);
+ }
+
+ public static GraphTraversal Barrier(params object[] args)
+ {
+ return new GraphTraversal().Barrier(args);
+ }
+
+ public static GraphTraversal Both(params object[] args)
+ {
+ return new GraphTraversal().Both(args);
+ }
+
+ public static GraphTraversal BothE(params object[] args)
+ {
+ return new GraphTraversal().BothE(args);
+ }
+
+ public static GraphTraversal BothV(params object[] args)
+ {
+ return new GraphTraversal().BothV(args);
+ }
+
+ public static GraphTraversal Branch(params object[] args)
+ {
+ return new GraphTraversal().Branch(args);
+ }
+
+ public static GraphTraversal Cap(params object[] args)
+ {
+ return new GraphTraversal().Cap(args);
+ }
+
+ public static GraphTraversal Choose(params object[] args)
+ {
+ return new GraphTraversal().Choose(args);
+ }
+
+ public static GraphTraversal Coalesce(params object[] args)
+ {
+ return new GraphTraversal().Coalesce(args);
+ }
+
+ public static GraphTraversal Coin(params object[] args)
+ {
+ return new GraphTraversal().Coin(args);
+ }
+
+ public static GraphTraversal Constant(params object[] args)
+ {
+ return new GraphTraversal().Constant(args);
+ }
+
+ public static GraphTraversal Count(params object[] args)
+ {
+ return new GraphTraversal().Count(args);
+ }
+
+ public static GraphTraversal CyclicPath(params object[] args)
+ {
+ return new GraphTraversal().CyclicPath(args);
+ }
+
+ public static GraphTraversal Dedup(params object[] args)
+ {
+ return new GraphTraversal().Dedup(args);
+ }
+
+ public static GraphTraversal Drop(params object[] args)
+ {
+ return new GraphTraversal().Drop(args);
+ }
+
+ public static GraphTraversal Emit(params object[] args)
+ {
+ return new GraphTraversal().Emit(args);
+ }
+
+ public static GraphTraversal Filter(params object[] args)
+ {
+ return new GraphTraversal().Filter(args);
+ }
+
+ public static GraphTraversal FlatMap(params object[] args)
+ {
+ return new GraphTraversal().FlatMap(args);
+ }
+
+ public static GraphTraversal Fold(params object[] args)
+ {
+ return new GraphTraversal().Fold(args);
+ }
+
+ public static GraphTraversal Group(params object[] args)
+ {
+ return new GraphTraversal().Group(args);
+ }
+
+ public static GraphTraversal GroupCount(params object[] args)
+ {
+ return new GraphTraversal().GroupCount(args);
+ }
+
+ public static GraphTraversal GroupV3d0(params object[] args)
+ {
+ return new GraphTraversal().GroupV3d0(args);
+ }
+
+ public static GraphTraversal Has(params object[] args)
+ {
+ return new GraphTraversal().Has(args);
+ }
+
+ public static GraphTraversal HasId(params object[] args)
+ {
+ return new GraphTraversal().HasId(args);
+ }
+
+ public static GraphTraversal HasKey(params object[] args)
+ {
+ return new GraphTraversal().HasKey(args);
+ }
+
+ public static GraphTraversal HasLabel(params object[] args)
+ {
+ return new GraphTraversal().HasLabel(args);
+ }
+
+ public static GraphTraversal HasNot(params object[] args)
+ {
+ return new GraphTraversal().HasNot(args);
+ }
+
+ public static GraphTraversal HasValue(params object[] args)
+ {
+ return new GraphTraversal().HasValue(args);
+ }
+
+ public static GraphTraversal Id(params object[] args)
+ {
+ return new GraphTraversal().Id(args);
+ }
+
+ public static GraphTraversal Identity(params object[] args)
+ {
+ return new GraphTraversal().Identity(args);
+ }
+
+ public static GraphTraversal In(params object[] args)
+ {
+ return new GraphTraversal().In(args);
+ }
+
+ public static GraphTraversal InE(params object[] args)
+ {
+ return new GraphTraversal().InE(args);
+ }
+
+ public static GraphTraversal InV(params object[] args)
+ {
+ return new GraphTraversal().InV(args);
+ }
+
+ public static GraphTraversal Inject(params object[] args)
+ {
+ return new GraphTraversal().Inject(args);
+ }
+
+ public static GraphTraversal Is(params object[] args)
+ {
+ return new GraphTraversal().Is(args);
+ }
+
+ public static GraphTraversal Key(params object[] args)
+ {
+ return new GraphTraversal().Key(args);
+ }
+
+ public static GraphTraversal Label(params object[] args)
+ {
+ return new GraphTraversal().Label(args);
+ }
+
+ public static GraphTraversal Limit(params object[] args)
+ {
+ return new GraphTraversal().Limit(args);
+ }
+
+ public static GraphTraversal Local(params object[] args)
+ {
+ return new GraphTraversal().Local(args);
+ }
+
+ public static GraphTraversal Loops(params object[] args)
+ {
+ return new GraphTraversal().Loops(args);
+ }
+
+ public static GraphTraversal Map(params object[] args)
+ {
+ return new GraphTraversal().Map(args);
+ }
+
+ public static GraphTraversal MapKeys(params object[] args)
+ {
+ return new GraphTraversal().MapKeys(args);
+ }
+
+ public static GraphTraversal MapValues(params object[] args)
+ {
+ return new GraphTraversal().MapValues(args);
+ }
+
+ public static GraphTraversal Match(params object[] args)
+ {
+ return new GraphTraversal().Match(args);
+ }
+
+ public static GraphTraversal Max(params object[] args)
+ {
+ return new GraphTraversal().Max(args);
+ }
+
+ public static GraphTraversal Mean(params object[] args)
+ {
+ return new GraphTraversal().Mean(args);
+ }
+
+ public static GraphTraversal Min(params object[] args)
+ {
+ return new GraphTraversal().Min(args);
+ }
+
+ public static GraphTraversal Not(params object[] args)
+ {
+ return new GraphTraversal().Not(args);
+ }
+
+ public static GraphTraversal Optional(params object[] args)
+ {
+ return new GraphTraversal().Optional(args);
+ }
+
+ public static GraphTraversal Or(params object[] args)
+ {
+ return new GraphTraversal().Or(args);
+ }
+
+ public static GraphTraversal Order(params object[] args)
+ {
+ return new GraphTraversal().Order(args);
+ }
+
+ public static GraphTraversal OtherV(params object[] args)
+ {
+ return new GraphTraversal().OtherV(args);
+ }
+
+ public static GraphTraversal Out(params object[] args)
+ {
+ return new GraphTraversal().Out(args);
+ }
+
+ public static GraphTraversal OutE(params object[] args)
+ {
+ return new GraphTraversal().OutE(args);
+ }
+
+ public static GraphTraversal OutV(params object[] args)
+ {
+ return new GraphTraversal().OutV(args);
+ }
+
+ public static GraphTraversal Path(params object[] args)
+ {
+ return new GraphTraversal().Path(args);
+ }
+
+ public static GraphTraversal Project(params object[] args)
+ {
+ return new GraphTraversal().Project(args);
+ }
+
+ public static GraphTraversal Properties(params object[] args)
+ {
+ return new GraphTraversal().Properties(args);
+ }
+
+ public static GraphTraversal Property(params object[] args)
+ {
+ return new GraphTraversal().Property(args);
+ }
+
+ public static GraphTraversal PropertyMap(params object[] args)
+ {
+ return new GraphTraversal().PropertyMap(args);
+ }
+
+ public static GraphTraversal Range(params object[] args)
+ {
+ return new GraphTraversal().Range(args);
+ }
+
+ public static GraphTraversal Repeat(params object[] args)
+ {
+ return new GraphTraversal().Repeat(args);
+ }
+
+ public static GraphTraversal Sack(params object[] args)
+ {
+ return new GraphTraversal().Sack(args);
+ }
+
+ public static GraphTraversal Sample(params object[] args)
+ {
+ return new GraphTraversal().Sample(args);
+ }
+
+ public static GraphTraversal Select(params object[] args)
+ {
+ return new GraphTraversal().Select(args);
+ }
+
+ public static GraphTraversal SideEffect(params object[] args)
+ {
+ return new GraphTraversal().SideEffect(args);
+ }
+
+ public static GraphTraversal SimplePath(params object[] args)
+ {
+ return new GraphTraversal().SimplePath(args);
+ }
+
+ public static GraphTraversal Store(params object[] args)
+ {
+ return new GraphTraversal().Store(args);
+ }
+
+ public static GraphTraversal Subgraph(params object[] args)
+ {
+ return new GraphTraversal().Subgraph(args);
+ }
+
+ public static GraphTraversal Sum(params object[] args)
+ {
+ return new GraphTraversal().Sum(args);
+ }
+
+ public static GraphTraversal Tail(params object[] args)
+ {
+ return new GraphTraversal().Tail(args);
+ }
+
+ public static GraphTraversal TimeLimit(params object[] args)
+ {
+ return new GraphTraversal().TimeLimit(args);
+ }
+
+ public static GraphTraversal Times(params object[] args)
+ {
+ return new GraphTraversal().Times(args);
+ }
+
+ public static GraphTraversal To(params object[] args)
+ {
+ return new GraphTraversal().To(args);
+ }
+
+ public static GraphTraversal ToE(params object[] args)
+ {
+ return new GraphTraversal().ToE(args);
+ }
+
+ public static GraphTraversal ToV(params object[] args)
+ {
+ return new GraphTraversal().ToV(args);
+ }
+
+ public static GraphTraversal Tree(params object[] args)
+ {
+ return new GraphTraversal().Tree(args);
+ }
+
+ public static GraphTraversal Unfold(params object[] args)
+ {
+ return new GraphTraversal().Unfold(args);
+ }
+
+ public static GraphTraversal Union(params object[] args)
+ {
+ return new GraphTraversal().Union(args);
+ }
+
+ public static GraphTraversal Until(params object[] args)
+ {
+ return new GraphTraversal().Until(args);
+ }
+
+ public static GraphTraversal Value(params object[] args)
+ {
+ return new GraphTraversal().Value(args);
+ }
+
+ public static GraphTraversal ValueMap(params object[] args)
+ {
+ return new GraphTraversal().ValueMap(args);
+ }
+
+ public static GraphTraversal Values(params object[] args)
+ {
+ return new GraphTraversal().Values(args);
+ }
+
+ public static GraphTraversal Where(params object[] args)
+ {
+ return new GraphTraversal().Where(args);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.CSharp/Structure/Graph.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.CSharp/Structure/Graph.cs b/gremlin-dotnet/src/Gremlin.CSharp/Structure/Graph.cs
new file mode 100644
index 0000000..3ae5bef
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.CSharp/Structure/Graph.cs
@@ -0,0 +1,35 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using Gremlin.CSharp.Process;
+
+namespace Gremlin.CSharp.Structure
+{
+ public class Graph
+ {
+ public GraphTraversalSource Traversal()
+ {
+ return new GraphTraversalSource();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Gremlin.Net.Process.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Gremlin.Net.Process.csproj b/gremlin-dotnet/src/Gremlin.Net.Process/Gremlin.Net.Process.csproj
new file mode 100644
index 0000000..5e2d7fc
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Gremlin.Net.Process.csproj
@@ -0,0 +1,24 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <Version>3.2.5-SNAPSHOT</Version>
+ <TargetFramework>netstandard1.3</TargetFramework>
+ <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
+ <PackageProjectUrl>http://tinkerpop.apache.org</PackageProjectUrl>
+ <PackageLicenseUrl>https://github.com/apache/tinkerpop/blob/master/LICENSE</PackageLicenseUrl>
+ <RepositoryUrl>https://github.com/apache/tinkerpop</RepositoryUrl>
+ <Authors>Apache TinkerPop</Authors>
+ <PackageTags>gremlin;tinkerpop;gremlin-dotnet</PackageTags>
+ <Description>This package provides implementations and interfaces for Gremlin language variants.</Description>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+ <DocumentationFile></DocumentationFile>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+ <PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" />
+ </ItemGroup>
+
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Remote/IRemoteConnection.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Remote/IRemoteConnection.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Remote/IRemoteConnection.cs
new file mode 100644
index 0000000..8555cb3
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Remote/IRemoteConnection.cs
@@ -0,0 +1,42 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Threading.Tasks;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.Process.Remote
+{
+ /// <summary>
+ /// A simple abstraction of a "connection" to a "server".
+ /// </summary>
+ public interface IRemoteConnection
+ {
+ /// <summary>
+ /// Submits <see cref="ITraversal" /> <see cref="Bytecode" /> to a server and returns a
+ /// <see cref="ITraversal" />.
+ /// </summary>
+ /// <param name="bytecode">The <see cref="Bytecode" /> to send.</param>
+ /// <returns>The <see cref="ITraversal" /> with the results and optional side-effects.</returns>
+ Task<ITraversal> SubmitAsync(Bytecode bytecode);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Remote/RemoteStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Remote/RemoteStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Remote/RemoteStrategy.cs
new file mode 100644
index 0000000..4826113
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Remote/RemoteStrategy.cs
@@ -0,0 +1,61 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Threading.Tasks;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.Process.Remote
+{
+ /// <summary>
+ /// Reconstructs a <see cref="ITraversal" /> by submitting it to a remote server via an
+ /// <see cref="IRemoteConnection" /> instance.
+ /// </summary>
+ public class RemoteStrategy : ITraversalStrategy
+ {
+ private readonly IRemoteConnection _remoteConnection;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RemoteStrategy" /> class.
+ /// </summary>
+ /// <param name="remoteConnection">The <see cref="IRemoteConnection" /> that should be used.</param>
+ public RemoteStrategy(IRemoteConnection remoteConnection)
+ {
+ _remoteConnection = remoteConnection;
+ }
+
+ /// <inheritdoc />
+ public void Apply(ITraversal traversal)
+ {
+ ApplyAsync(traversal).Wait();
+ }
+
+ /// <inheritdoc />
+ public async Task ApplyAsync(ITraversal traversal)
+ {
+ if (traversal.Traversers != null) return;
+ var remoteTraversal = await _remoteConnection.SubmitAsync(traversal.Bytecode).ConfigureAwait(false);
+ traversal.SideEffects = remoteTraversal.SideEffects;
+ traversal.Traversers = remoteTraversal.Traversers;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Binding.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Binding.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Binding.cs
new file mode 100644
index 0000000..80c8269
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Binding.cs
@@ -0,0 +1,80 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// Associates a variable with a value.
+ /// </summary>
+ public class Binding : IEquatable<Binding>
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Binding" /> class.
+ /// </summary>
+ /// <param name="key">The key that identifies the <see cref="Binding" />.</param>
+ /// <param name="value">The value of the <see cref="Binding" />.</param>
+ public Binding(string key, object value)
+ {
+ Key = key;
+ Value = value;
+ }
+
+ /// <summary>
+ /// Gets the key that identifies the <see cref="Binding" />.
+ /// </summary>
+ public string Key { get; }
+
+ /// <summary>
+ /// Gets the value of the <see cref="Binding" />.
+ /// </summary>
+ public object Value { get; }
+
+ /// <inheritdoc />
+ public bool Equals(Binding other)
+ {
+ if (other == null)
+ return false;
+ return Key == other.Key && Value.Equals(other.Value);
+ }
+
+ /// <inheritdoc />
+ public override bool Equals(object other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ if (other.GetType() != GetType()) return false;
+ return Equals(other as Binding);
+ }
+
+ /// <inheritdoc />
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ return ((Key?.GetHashCode() ?? 0) * 397) ^ (Value?.GetHashCode() ?? 0);
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/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
new file mode 100644
index 0000000..985369e
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Bindings.cs
@@ -0,0 +1,42 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// Bindings are used to associate a variable with a value.
+ /// </summary>
+ public class Bindings
+ {
+ /// <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)
+ {
+ return new Binding(variable, value);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Bytecode.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Bytecode.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Bytecode.cs
new file mode 100644
index 0000000..b35e8db
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Bytecode.cs
@@ -0,0 +1,85 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// A language agnostic representation of <see cref="ITraversal" /> mutations.
+ /// </summary>
+ /// <remarks>
+ /// Bytecode is simply a list of ordered instructions.
+ /// Bytecode can be serialized between environments and machines by way of a GraphSON representation.
+ /// Thus, Gremlin-CSharp can create bytecode in C# and ship it to Gremlin-Java for evaluation in Java.
+ /// </remarks>
+ public class Bytecode
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Bytecode" /> class.
+ /// </summary>
+ public Bytecode()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Bytecode" /> class.
+ /// </summary>
+ /// <param name="byteCode">Already existing <see cref="Bytecode" /> that should be cloned.</param>
+ public Bytecode(Bytecode byteCode)
+ {
+ SourceInstructions = new List<Instruction>(byteCode.SourceInstructions);
+ StepInstructions = new List<Instruction>(byteCode.StepInstructions);
+ }
+
+ /// <summary>
+ /// Gets the traversal source instructions.
+ /// </summary>
+ public List<Instruction> SourceInstructions { get; } = new List<Instruction>();
+
+ /// <summary>
+ /// Gets the <see cref="ITraversal" /> instructions.
+ /// </summary>
+ public List<Instruction> StepInstructions { get; } = new List<Instruction>();
+
+ /// <summary>
+ /// Add a traversal source instruction to the bytecode.
+ /// </summary>
+ /// <param name="sourceName">The traversal source method name (e.g. withSack()).</param>
+ /// <param name="args">The traversal source method arguments.</param>
+ public void AddSource(string sourceName, params object[] args)
+ {
+ SourceInstructions.Add(new Instruction(sourceName, args));
+ }
+
+ /// <summary>
+ /// Adds a <see cref="ITraversal" /> instruction to the bytecode.
+ /// </summary>
+ /// <param name="stepName">The traversal method name (e.g. out()).</param>
+ /// <param name="args">The traversal method arguments.</param>
+ public void AddStep(string stepName, params object[] args)
+ {
+ StepInstructions.Add(new Instruction(stepName, args));
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/DefaultTraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/DefaultTraversal.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/DefaultTraversal.cs
new file mode 100644
index 0000000..86c636c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/DefaultTraversal.cs
@@ -0,0 +1,195 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// A traversal represents a directed walk over a graph.
+ /// </summary>
+ public abstract class DefaultTraversal : ITraversal
+ {
+ private IEnumerator<Traverser> _traverserEnumerator;
+
+ /// <summary>
+ /// Gets the <see cref="Bytecode" /> representation of this traversal.
+ /// </summary>
+ public Bytecode Bytecode { get; protected set; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="ITraversalSideEffects" /> of this traversal.
+ /// </summary>
+ public ITraversalSideEffects SideEffects { get; set; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="Traverser" />'s of this traversal that hold the results of the traversal.
+ /// </summary>
+ public IEnumerable<Traverser> Traversers { get; set; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="ITraversalStrategy" /> strategies of this traversal.
+ /// </summary>
+ protected ICollection<ITraversalStrategy> TraversalStrategies { get; set; } = new List<ITraversalStrategy>();
+
+ private IEnumerator<Traverser> TraverserEnumerator
+ => _traverserEnumerator ?? (_traverserEnumerator = GetTraverserEnumerator());
+
+ /// <inheritdoc />
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ /// <inheritdoc />
+ public bool MoveNext()
+ {
+ var currentTraverser = TraverserEnumerator.Current;
+ if (currentTraverser?.Bulk > 1)
+ {
+ currentTraverser.Bulk--;
+ return true;
+ }
+ return TraverserEnumerator.MoveNext();
+ }
+
+ /// <summary>
+ /// Reset is not supported.
+ /// </summary>
+ /// <exception cref="NotSupportedException">Thrown always as this operation is not supported.</exception>
+ public void Reset()
+ {
+ throw new NotSupportedException();
+ }
+
+ /// <inheritdoc />
+ public object Current => TraverserEnumerator.Current?.Object;
+
+ private IEnumerator<Traverser> GetTraverserEnumerator()
+ {
+ if (Traversers == null)
+ ApplyStrategies();
+ return Traversers.GetEnumerator();
+ }
+
+ private void ApplyStrategies()
+ {
+ foreach (var strategy in TraversalStrategies)
+ strategy.Apply(this);
+ }
+
+ private async Task ApplyStrategiesAsync()
+ {
+ foreach (var strategy in TraversalStrategies)
+ await strategy.ApplyAsync(this).ConfigureAwait(false);
+ }
+
+ /// <summary>
+ /// Gets the next result from the traversal.
+ /// </summary>
+ /// <returns>The result.</returns>
+ public object Next()
+ {
+ MoveNext();
+ return Current;
+ }
+
+ /// <summary>
+ /// Gets the next n-number of results from the traversal.
+ /// </summary>
+ /// <param name="amount">The number of results to get.</param>
+ /// <returns>The n-results.</returns>
+ public IEnumerable<object> Next(int amount)
+ {
+ for (var i = 0; i < amount; i++)
+ yield return Next();
+ }
+
+ /// <summary>
+ /// Iterates all <see cref="Traverser" /> instances in the traversal.
+ /// </summary>
+ /// <returns>The fully drained traversal.</returns>
+ public ITraversal Iterate()
+ {
+ while (MoveNext())
+ {
+ }
+ return this;
+ }
+
+ /// <summary>
+ /// Gets the next <see cref="Traverser" />.
+ /// </summary>
+ /// <returns>The next <see cref="Traverser" />.</returns>
+ public Traverser NextTraverser()
+ {
+ TraverserEnumerator.MoveNext();
+ return TraverserEnumerator.Current;
+ }
+
+ /// <summary>
+ /// Puts all the results into a <see cref="List{T}" />.
+ /// </summary>
+ /// <returns>The results in a list.</returns>
+ public List<object> ToList()
+ {
+ var objs = new List<object>();
+ while (MoveNext())
+ objs.Add(Current);
+ return objs;
+ }
+
+ /// <summary>
+ /// Puts all the results into a <see cref="HashSet{T}" />.
+ /// </summary>
+ /// <returns>The results in a set.</returns>
+ public HashSet<object> ToSet()
+ {
+ var objs = new HashSet<object>();
+ while (MoveNext())
+ objs.Add(Current);
+ return objs;
+ }
+
+ /// <inheritdoc />
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing)
+ SideEffects?.Dispose();
+ }
+
+ /// <summary>
+ /// Starts a promise to execute a function on the current traversal that will be completed in the future.
+ /// </summary>
+ /// <typeparam name="TReturn">The return type of the <paramref name="callback" />.</typeparam>
+ /// <param name="callback">The function to execute on the current traversal.</param>
+ /// <returns>The result of the executed <paramref name="callback" />.</returns>
+ public async Task<TReturn> Promise<TReturn>(Func<ITraversal, TReturn> callback)
+ {
+ await ApplyStrategiesAsync().ConfigureAwait(false);
+ return callback(this);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversal.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversal.cs
new file mode 100644
index 0000000..cb472b7
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversal.cs
@@ -0,0 +1,96 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// A traversal represents a directed walk over a graph.
+ /// </summary>
+ public interface ITraversal : IDisposable, IEnumerator
+ {
+ /// <summary>
+ /// Gets the <see cref="Bytecode" /> representation of this traversal.
+ /// </summary>
+ Bytecode Bytecode { get; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="ITraversalSideEffects" /> of this traversal.
+ /// </summary>
+ ITraversalSideEffects SideEffects { get; set; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="Traverser" />'s of this traversal that hold the results of the traversal.
+ /// </summary>
+ IEnumerable<Traverser> Traversers { get; set; }
+
+ /// <summary>
+ /// Gets the next result from the traversal.
+ /// </summary>
+ /// <returns>The result.</returns>
+ object Next();
+
+ /// <summary>
+ /// Gets the next n-number of results from the traversal.
+ /// </summary>
+ /// <param name="amount">The number of results to get.</param>
+ /// <returns>The n-results.</returns>
+ IEnumerable<object> Next(int amount);
+
+ /// <summary>
+ /// Iterates all <see cref="Traverser" /> instances in the traversal.
+ /// </summary>
+ /// <returns>The fully drained traversal.</returns>
+ ITraversal Iterate();
+
+ /// <summary>
+ /// Gets the next <see cref="Traverser" />.
+ /// </summary>
+ /// <returns>The next <see cref="Traverser" />.</returns>
+ Traverser NextTraverser();
+
+ /// <summary>
+ /// Puts all the results into a <see cref="List{T}" />.
+ /// </summary>
+ /// <returns>The results in a list.</returns>
+ List<object> ToList();
+
+ /// <summary>
+ /// Puts all the results into a <see cref="HashSet{T}" />.
+ /// </summary>
+ /// <returns>The results in a set.</returns>
+ HashSet<object> ToSet();
+
+ /// <summary>
+ /// Starts a promise to execute a function on the current traversal that will be completed in the future.
+ /// </summary>
+ /// <typeparam name="TReturn">The return type of the <paramref name="callback" />.</typeparam>
+ /// <param name="callback">The function to execute on the current traversal.</param>
+ /// <returns>The result of the executed <paramref name="callback" />.</returns>
+ Task<TReturn> Promise<TReturn>(Func<ITraversal, TReturn> callback);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalSideEffects.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalSideEffects.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalSideEffects.cs
new file mode 100644
index 0000000..0378fe6
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalSideEffects.cs
@@ -0,0 +1,52 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// A <see cref="ITraversal" /> can maintain global sideEffects.
+ /// </summary>
+ public interface ITraversalSideEffects : IDisposable
+ {
+ /// <summary>
+ /// Retrieves the keys of the side-effect that can be supplied to <see cref="Get" />.
+ /// </summary>
+ /// <returns>The keys of the side-effect.</returns>
+ IReadOnlyCollection<string> Keys();
+
+ /// <summary>
+ /// Gets the side-effect associated with the provided key.
+ /// </summary>
+ /// <param name="key">The key to get the value for.</param>
+ /// <returns>The value associated with key.</returns>
+ object Get(string key);
+
+ /// <summary>
+ /// Invalidates the side effect cache for traversal.
+ /// </summary>
+ void Close();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalStrategy.cs
new file mode 100644
index 0000000..991a807
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/ITraversalStrategy.cs
@@ -0,0 +1,46 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Threading.Tasks;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// A <see cref="ITraversalStrategy" /> defines a particular atomic operation for mutating a
+ /// <see cref="ITraversal" /> prior to its evaluation.
+ /// </summary>
+ public interface ITraversalStrategy
+ {
+ /// <summary>
+ /// Applies the strategy to the given <see cref="ITraversal" />.
+ /// </summary>
+ /// <param name="traversal">The <see cref="ITraversal" /> the strategy should be applied to.</param>
+ void Apply(ITraversal traversal);
+
+ /// <summary>
+ /// Applies the strategy to the given <see cref="ITraversal" /> asynchronously.
+ /// </summary>
+ /// <param name="traversal">The <see cref="ITraversal" /> the strategy should be applied to.</param>
+ Task ApplyAsync(ITraversal traversal);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Instruction.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Instruction.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Instruction.cs
new file mode 100644
index 0000000..195b7bf
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Instruction.cs
@@ -0,0 +1,52 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// Represents a <see cref="Bytecode" /> instruction by an operator name and its arguments.
+ /// </summary>
+ public class Instruction
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Instruction" /> class.
+ /// </summary>
+ /// <param name="operatorName">The name of the operator.</param>
+ /// <param name="arguments">The arguments.</param>
+ public Instruction(string operatorName, params dynamic[] arguments)
+ {
+ OperatorName = operatorName;
+ Arguments = arguments;
+ }
+
+ /// <summary>
+ /// Gets the name of the operator.
+ /// </summary>
+ public string OperatorName { get; }
+
+ /// <summary>
+ /// Gets the arguments.
+ /// </summary>
+ public dynamic[] Arguments { get; }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/AbstractTraversalStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/AbstractTraversalStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/AbstractTraversalStrategy.cs
new file mode 100644
index 0000000..8c9666c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/AbstractTraversalStrategy.cs
@@ -0,0 +1,86 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Gremlin.Net.Process.Traversal.Strategy
+{
+ /// <summary>
+ /// Provides a common base class for strategies that are only included in <see cref="Bytecode" />
+ /// to be applied remotely.
+ /// </summary>
+ public abstract class AbstractTraversalStrategy : ITraversalStrategy, IEquatable<AbstractTraversalStrategy>
+ {
+ /// <summary>
+ /// Gets the name of the strategy.
+ /// </summary>
+ public string StrategyName => GetType().Name;
+
+ /// <summary>
+ /// Gets the configuration of the strategy.
+ /// </summary>
+ public Dictionary<string, dynamic> Configuration { get; } = new Dictionary<string, dynamic>();
+
+ /// <inheritdoc />
+ public bool Equals(AbstractTraversalStrategy other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return StrategyName == other.StrategyName;
+ }
+
+ /// <inheritdoc />
+ public virtual void Apply(ITraversal traversal)
+ {
+ }
+
+ /// <inheritdoc />
+ public virtual Task ApplyAsync(ITraversal traversal)
+ {
+ return Task.CompletedTask;
+ }
+
+ /// <inheritdoc />
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != GetType()) return false;
+ return Equals((AbstractTraversalStrategy) obj);
+ }
+
+ /// <inheritdoc />
+ public override int GetHashCode()
+ {
+ return StrategyName.GetHashCode();
+ }
+
+ /// <inheritdoc />
+ public override string ToString()
+ {
+ return StrategyName;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ConnectiveStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ConnectiveStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ConnectiveStrategy.cs
new file mode 100644
index 0000000..2bca7c2
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ConnectiveStrategy.cs
@@ -0,0 +1,33 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ /// <summary>
+ /// ConnectiveStrategy rewrites the binary conjunction form of <c>a.and().b</c> into an AndStep of
+ /// <c>and(a, b)</c> (likewise for OrStep).
+ /// </summary>
+ public class ConnectiveStrategy : AbstractTraversalStrategy
+ {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ElementIdStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ElementIdStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ElementIdStrategy.cs
new file mode 100644
index 0000000..6079f58
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/ElementIdStrategy.cs
@@ -0,0 +1,32 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ /// <summary>
+ /// Provides a degree of control over element identifier assignment as some graphs don't provide that feature.
+ /// </summary>
+ public class ElementIdStrategy : AbstractTraversalStrategy
+ {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/HaltedTraverserStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/HaltedTraverserStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/HaltedTraverserStrategy.cs
new file mode 100644
index 0000000..98f949c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/HaltedTraverserStrategy.cs
@@ -0,0 +1,34 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ public class HaltedTraverserStrategy : AbstractTraversalStrategy
+ {
+ public HaltedTraverserStrategy(string haltedTraverserFactoryName = null)
+ {
+ if (haltedTraverserFactoryName != null)
+ Configuration["haltedTraverserFactory"] = haltedTraverserFactoryName;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/PartitionStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/PartitionStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/PartitionStrategy.cs
new file mode 100644
index 0000000..f89037b
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/PartitionStrategy.cs
@@ -0,0 +1,56 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ /// <summary>
+ /// Partitions the vertices, edges and vertex properties of a graph into String named partitions.
+ /// </summary>
+ public class PartitionStrategy : AbstractTraversalStrategy
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="PartitionStrategy" /> class.
+ /// </summary>
+ /// <param name="partitionKey">Specifies the partition key name.</param>
+ /// <param name="writePartition">
+ /// Specifies the name of the partition to write when adding vertices, edges and vertex
+ /// properties.
+ /// </param>
+ /// <param name="readPartitions">Specifies the partition of the graph to read from.</param>
+ /// <param name="includeMetaProperties">Set to true if vertex properties should get assigned to partitions.</param>
+ public PartitionStrategy(string partitionKey = null, string writePartition = null,
+ IEnumerable<string> readPartitions = null, bool? includeMetaProperties = null)
+ {
+ if (partitionKey != null)
+ Configuration["partitionKey"] = partitionKey;
+ if (writePartition != null)
+ Configuration["writePartition"] = writePartition;
+ if (readPartitions != null)
+ Configuration["readPartitions"] = readPartitions;
+ if (includeMetaProperties != null)
+ Configuration["includeMetaProperties"] = includeMetaProperties.Value;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/SubgraphStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/SubgraphStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/SubgraphStrategy.cs
new file mode 100644
index 0000000..2f0d23e
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/SubgraphStrategy.cs
@@ -0,0 +1,48 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ /// <summary>
+ /// Provides a way to limit the view of a <see cref="ITraversal" />.
+ /// </summary>
+ public class SubgraphStrategy : AbstractTraversalStrategy
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SubgraphStrategy" /> class.
+ /// </summary>
+ /// <param name="vertexCriterion">Constrains vertices for the <see cref="ITraversal" />.</param>
+ /// <param name="edgeCriterion">Constrains edges for the <see cref="ITraversal" />.</param>
+ /// <param name="vertexPropertyCriterion">Constrains vertex properties for the <see cref="ITraversal" />.</param>
+ public SubgraphStrategy(ITraversal vertexCriterion = null, ITraversal edgeCriterion = null,
+ ITraversal vertexPropertyCriterion = null)
+ {
+ if (vertexCriterion != null)
+ Configuration["vertices"] = vertexCriterion;
+ if (edgeCriterion != null)
+ Configuration["edges"] = edgeCriterion;
+ if (vertexPropertyCriterion != null)
+ Configuration["vertexProperties"] = vertexPropertyCriterion;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/VertexProgramStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/VertexProgramStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/VertexProgramStrategy.cs
new file mode 100644
index 0000000..1c5b5f2
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Decoration/VertexProgramStrategy.cs
@@ -0,0 +1,50 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Decoration
+{
+ public class VertexProgramStrategy : AbstractTraversalStrategy
+ {
+ public VertexProgramStrategy(string graphComputer = null, int? workers = null, string persist = null,
+ string result = null, ITraversal vertices = null, ITraversal edges = null,
+ Dictionary<string, dynamic> configuration = null)
+ {
+ if (graphComputer != null)
+ Configuration["graphComputer"] = graphComputer;
+ if (workers != null)
+ Configuration["workers"] = workers;
+ if (persist != null)
+ Configuration["persist"] = persist;
+ if (result != null)
+ Configuration["result"] = result;
+ if (vertices != null)
+ Configuration["vertices"] = vertices;
+ if (edges != null)
+ Configuration["edges"] = edges;
+ configuration?.ToList().ForEach(x => Configuration[x.Key] = x.Value);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Finalization/MatchAlgorithmStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Finalization/MatchAlgorithmStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Finalization/MatchAlgorithmStrategy.cs
new file mode 100644
index 0000000..11a9e2c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Finalization/MatchAlgorithmStrategy.cs
@@ -0,0 +1,34 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Finalization
+{
+ public class MatchAlgorithmStrategy : AbstractTraversalStrategy
+ {
+ public MatchAlgorithmStrategy(string matchAlgorithm = null)
+ {
+ if (matchAlgorithm != null)
+ Configuration["matchAlgorithm"] = matchAlgorithm;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/792fca27/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Optimization/AdjacentToIncidentStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Optimization/AdjacentToIncidentStrategy.cs b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Optimization/AdjacentToIncidentStrategy.cs
new file mode 100644
index 0000000..bae85d7
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net.Process/Traversal/Strategy/Optimization/AdjacentToIncidentStrategy.cs
@@ -0,0 +1,32 @@
+#region License
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#endregion
+
+namespace Gremlin.Net.Process.Traversal.Strategy.Optimization
+{
+ /// <summary>
+ /// Optimizes vertex- and value-emitting steps.
+ /// </summary>
+ public class AdjacentToIncidentStrategy : AbstractTraversalStrategy
+ {
+ }
+}
\ No newline at end of file