Ejemplo n.º 1
0
        /// <summary>
        /// Ctor
        /// </summary>
        internal Lst(IEnumerable <T> initial)
        {
            var lst = new List <T>(initial);

            Root = ListModule.FromList(lst, 0, lst.Count());
            Rev  = false;
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 /// <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;
     }
 }
Ejemplo n.º 5
0
        /// <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));
        }
Ejemplo n.º 6
0
 /// <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;
     }
 }
Ejemplo n.º 7
0
        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));
        }