/// <summary> /// Ctor /// </summary> internal Lst(IEnumerable <T> initial) { var lst = new List <T>(initial); Root = ListModule.FromList(lst, 0, lst.Count()); Rev = false; }
public LstInternal <A> AddRange(IEnumerable <A> items) { if (items == null) { return(this); } var lst = new List <A>(Rev ? items.Reverse() : items); var tree = ListModule.FromList(lst, 0, lst.Count); return(Wrap(ListModule.Insert(Root, tree, Rev ? 0 : Root.Count), Rev)); }
public LstInternal <A> Filter(Func <A, bool> pred) { var filtered = new List <A>(); foreach (var item in this) { if (pred(item)) { filtered.Add(item); } } var root = ListModule.FromList(filtered, 0, filtered.Count); return(Wrap(root, Rev)); }
/// <summary> /// Ctor /// </summary> internal Lst(IEnumerable <T> initial) { if (initial is Lst <T> ) { var lst = (Lst <T>)initial; Root = lst.Root; Rev = lst.Rev; } else { var lst = new List <T>(initial); Root = ListModule.FromList(lst, 0, lst.Count()); Rev = false; } }
/// <summary> /// Insert range of values at specified index /// </summary> public Lst <T> InsertRange(int index, IEnumerable <T> items) { if (items == null) { return(this); } if (index < 0 || index > Root.Count) { throw new IndexOutOfRangeException(); } var lst = new List <T>(Rev ? items.Reverse() : items); var tree = ListModule.FromList(lst, 0, lst.Count); return(new Lst <T>(ListModule.Insert(Root, tree, Rev ? Count - index - 1 : index), Rev)); }
/// <summary> /// Ctor /// </summary> internal LstInternal(IEnumerable <A> initial, Pred <A> pred) { hashCode = 0; this.root = ListItem <A> .Empty; if (initial is Lst <A> ) { var lst = (Lst <A>)initial; this.root = lst.Value.Root; Rev = lst.Value.Rev; } else { var lst = new List <A>(initial); foreach (var item in lst) { if (!pred.True(item)) { throw new ArgumentOutOfRangeException("item in list"); } } this.root = ListModule.FromList(lst, 0, lst.Count()); Rev = false; } }
public LstInternal <A> InsertRange(int index, IEnumerable <A> items, Pred <A> pred) { if (items == null) { return(this); } if (index < 0 || index > Root.Count) { throw new IndexOutOfRangeException(); } var lst = new List <A>(Rev ? items.Reverse() : items); foreach (var item in items) { if (!pred.True(item)) { throw new ArgumentOutOfRangeException(nameof(items)); } } var tree = ListModule.FromList(lst, 0, lst.Count); return(Wrap(ListModule.Insert(Root, tree, Rev ? Count - index - 1 : index), Rev)); }