/// <summary>現在位置より後方に条件を満たす要素が存在する場合はその位置へ移動する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> /// <param name="predicate">条件</param> /// <returns>結果</returns> public static ResultWithValue <IElementScroller <T> > MaybeNext <T>(this IElementScroller <T> scroller, Predicate <T> predicate) { if (scroller.HasNext(predicate)) { return(new ResultWithValue <IElementScroller <T> >(true, scroller.Next(predicate))); } else { return(new ResultWithValue <IElementScroller <T> >(false, scroller)); } }
/// <summary>現在位置から後方へ指定した距離だけ移動可能な場合は移動する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> /// <param name="count">移動距離</param> /// <returns>結果</returns> public static ResultWithValue <IElementScroller <T> > MaybeNext <T>(this IElementScroller <T> scroller, int count) { if (scroller.HasNext(count)) { return(new ResultWithValue <IElementScroller <T> >(true, scroller.Next(count))); } else { return(new ResultWithValue <IElementScroller <T> >(false, scroller)); } }
///// <summary>スタックが存在する場合は取り出し、その位置へ移動する。</summary> ///// <typeparam name="T">要素の型</typeparam> ///// <param name="scroller">対象インスタンス</param> ///// <returns>結果</returns> //public static ResultWithValue<IElementScroller<T>> TryPop<T>(this IElementScroller<T> scroller) { // if (0 < scroller.StackCount) // return new ResultWithValue<IElementScroller<T>>(scroller.Pop()); // else // return new ResultWithValue<IElementScroller<T>>(false, scroller); //} #endregion 移動 #region 判定 /// <summary>現在の位置の次に要素が存在するかどうかを示す値を取得する。</summary> /// <typeparam name="T">要素の型</typeparam> /// <param name="scroller">対象インスタンス</param> public static bool HasNext <T>(this IElementScroller <T> scroller) { return(scroller.HasNext(1)); }