/// <summary>
 /// Adds the dedup step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Dedup <S, E>(this ISchemaBoundTraversal <S, E> traversal, params string[] dedupLabels)
 {
     return(traversal.AsGraphTraversal().Dedup(dedupLabels).AsSchemaBound());
 }
 /// <summary>
 /// Adds the drop step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Drop <S, E>(this ISchemaBoundTraversal <S, E> traversal)
 {
     return(traversal.AsGraphTraversal().Drop().AsSchemaBound());
 }
 /// <summary>
 /// Adds the addE step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static GraphTraversal <S, Edge> AddE <S, E>(this ISchemaBoundTraversal <S, E> traversal, ITraversal edgeLabelTraversal)
 {
     return(traversal.AsGraphTraversal().AddE(edgeLabelTraversal));
 }
 /// <summary>
 /// Adds the cyclicPath step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> CyclicPath <S, E>(this ISchemaBoundTraversal <S, E> traversal)
 {
     return(traversal.AsGraphTraversal().CyclicPath().AsSchemaBound());
 }
 /// <summary>
 /// Adds the fold step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static GraphTraversal <S, IList <E> > Fold <S, E>(this ISchemaBoundTraversal <S, E> traversal)
 {
     return(traversal.AsGraphTraversal().Fold());
 }
 /// <summary>
 /// Adds the "outV()" step to the traversal, returning all outbound adjacent vertices
 /// </summary>
 /// <typeparam name="S">The source of the traversal</typeparam>
 /// <typeparam name="ToutVertex">The type of the vertex.</typeparam>
 /// <param name="traversal">The traversal.</param>
 /// <returns>Returns the resulting traversal</returns>
 public static ISchemaBoundTraversal <S, ToutVertex> OutV <S, ToutVertex>(this ISchemaBoundTraversal <S, IHasOutVertex <ToutVertex> > traversal)
     where ToutVertex : VertexBase
 {
     return(traversal.AsGraphTraversal().OutV().AsSchemaBound <S, ToutVertex>());
 }
 /// <summary>
 /// Adds the by step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> By <S, E>(this ISchemaBoundTraversal <S, E> traversal, T token)
 {
     return(traversal.AsGraphTraversal().By(token).AsSchemaBound());
 }
 /// <summary>
 /// Adds the filter step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Filter <S, E>(this ISchemaBoundTraversal <S, E> traversal, P predicate)
 {
     return(traversal.AsGraphTraversal().Filter(predicate).AsSchemaBound());
 }
 /// <summary>
 /// Adds the by step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> By <S, E>(this ISchemaBoundTraversal <S, E> traversal, Order order)
 {
     return(traversal.AsGraphTraversal().By(order).AsSchemaBound());
 }
 /// <summary>
 /// Adds the by step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> By <S, E>(this ISchemaBoundTraversal <S, E> traversal, string key)
 {
     return(traversal.AsGraphTraversal().By(key).AsSchemaBound());
 }
 /// <summary>
 /// Adds the bothE step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static GraphTraversal <S, Edge> BothE <S, E>(this ISchemaBoundTraversal <S, E> traversal, params string[] edgeLabels)
 {
     return(traversal.AsGraphTraversal().BothE(edgeLabels));
 }
        /// <summary>
        /// Adds the "has()" step to the traversal, removing traversers that do not satisfy the given
        /// predicate for the property selected
        /// </summary>
        /// <typeparam name="S">The source of the traversal</typeparam>
        /// <typeparam name="TElement">The type of the element.</typeparam>
        /// <typeparam name="TProperty">The type of the property.</typeparam>
        /// <param name="traversal">The traversal.</param>
        /// <param name="propertySelector">The property selector.</param>
        /// <param name="predicate">The value predicate to test.</param>
        /// <returns>Returns the resulting traversal</returns>
        public static ISchemaBoundTraversal <S, TElement> Has <S, TElement, TProperty>(this ISchemaBoundTraversal <S, TElement> traversal, Expression <Func <TElement, TProperty> > propertySelector, P predicate)
        {
            var propName = GetPropertyName(typeof(TElement), propertySelector);

            return(traversal.AsGraphTraversal().Has(propName, predicate).AsSchemaBound());
        }
        /// <summary>
        /// Adds the "property()" step to the traversal, adding a new value to an enumerable property list
        /// </summary>
        /// <typeparam name="S">The source of the traversal</typeparam>
        /// <typeparam name="TElement">The type of the element.</typeparam>
        /// <typeparam name="TValue">The type of the value being added</typeparam>
        /// <param name="traversal">The traversal.</param>
        /// <param name="propertySelector">The property selector.</param>
        /// <param name="value">The value to set.</param>
        /// <returns>Returns the resulting traversal</returns>
        public static ISchemaBoundTraversal <S, TElement> Property <S, TElement, TValue>(this ISchemaBoundTraversal <S, TElement> traversal, Expression <Func <TElement, IEnumerable <TValue> > > propertySelector, TValue value)
        {
            var propName = GetPropertyName(typeof(TElement), propertySelector);

            return(traversal.AsGraphTraversal().Property(Cardinality.List, propName, value).AsSchemaBound());
        }
 /// <summary>
 /// Adds the emit step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Emit <S, E>(this ISchemaBoundTraversal <S, E> traversal, P emitPredicate)
 {
     return(traversal.AsGraphTraversal().Emit(emitPredicate).AsSchemaBound());
 }
 /// <summary>
 /// Adds the by step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> By <S, E>(this ISchemaBoundTraversal <S, E> traversal, ITraversal byTraversal, IComparator comparator)
 {
     return(traversal.AsGraphTraversal().By(byTraversal, comparator).AsSchemaBound());
 }
 /// <summary>
 /// Adds the emit step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Emit <S, E>(this ISchemaBoundTraversal <S, E> traversal, ITraversal emitTraversal)
 {
     return(traversal.AsGraphTraversal().Emit(emitTraversal).AsSchemaBound());
 }
 /// <summary>
 /// Adds the coin step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Coin <S, E>(this ISchemaBoundTraversal <S, E> traversal, double probability)
 {
     return(traversal.AsGraphTraversal().Coin(probability).AsSchemaBound());
 }
 /// <summary>
 /// Adds the filter step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static ISchemaBoundTraversal <S, E> Filter <S, E>(this ISchemaBoundTraversal <S, E> traversal, ITraversal filterTraversal)
 {
     return(traversal.AsGraphTraversal().Filter(filterTraversal).AsSchemaBound());
 }
 /// <summary>
 /// Adds the count step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static GraphTraversal <S, long> Count <S, E>(this ISchemaBoundTraversal <S, E> traversal, Scope scope)
 {
     return(traversal.AsGraphTraversal().Count(scope));
 }
 /// <summary>
 /// Adds the addV step to this <see cref="GraphTraversal{SType, EType}"/>.
 /// </summary>
 public static GraphTraversal <S, Vertex> AddV <S, E>(this ISchemaBoundTraversal <S, E> traversal)
 {
     return(traversal.AsGraphTraversal().AddV());
 }
 /// <summary>
 /// Adds the "inV()" step to the traversal, returning all inbound adjacent vertices
 /// </summary>
 /// <typeparam name="S">The source of the traversal</typeparam>
 /// <typeparam name="TinVertex">The type of the vertex.</typeparam>
 /// <param name="traversal">The traversal.</param>
 /// <returns>Returns the resulting traversal</returns>
 public static ISchemaBoundTraversal <S, TinVertex> InV <S, TinVertex>(this ISchemaBoundTraversal <S, IHasInVertex <TinVertex> > traversal)
     where TinVertex : VertexBase
 {
     return(traversal.AsGraphTraversal().InV().AsSchemaBound <S, TinVertex>());
 }