public RequestCloneCollection(ScorocodeSdkStateHolder stateHolder, string collectionId,
                               string newCollectionName) : base(stateHolder)
 {
     //this.collection = new ScorocodeCollection()
     //        .setCollectionId(collectionId)
     //        .setCollectionName(newCollectionName);
     collection = new CloneCollection(collectionId, newCollectionName);
 }
Exemple #2
0
 public void InsertRange(int index, ReadOnlySpan <T> items)
 {
     lock (SyncRoot)
     {
         using (var xs = new CloneCollection <T>(items))
         {
             list.InsertRange(index, xs.AsEnumerable());
             CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Add(xs.Span, index));
         }
     }
 }
Exemple #3
0
 public void AddRange(IEnumerable <T> items)
 {
     lock (SyncRoot)
     {
         var index = list.Count;
         using (var xs = new CloneCollection <T>(items))
         {
             // to avoid iterate twice, require copy before insert.
             list.AddRange(xs.AsEnumerable());
             CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Add(xs.Span, index));
         }
     }
 }
 public void PushRange(IEnumerable <T> items)
 {
     lock (SyncRoot)
     {
         using (var xs = new CloneCollection <T>(items))
         {
             foreach (var item in xs.Span)
             {
                 stack.Push(item);
             }
             CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Add(xs.Span, 0));
         }
     }
 }
Exemple #5
0
        // AddFirstRange is not exists.

        public void AddLastRange(IEnumerable <T> items)
        {
            lock (SyncRoot)
            {
                var index = buffer.Count;
                using (var xs = new CloneCollection <T>(items))
                {
                    foreach (var item in xs.Span)
                    {
                        buffer.AddLast(item);
                    }
                    CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Add(xs.Span, index));
                }
            }
        }
Exemple #6
0
        public void RemoveRange(int index, int count)
        {
            lock (SyncRoot)
            {
#if NET5_0_OR_GREATER
                var range = CollectionsMarshal.AsSpan(list).Slice(index, count);
#else
                var range = list.GetRange(index, count);
#endif

                // require copy before remove
                using (var xs = new CloneCollection <T>(range))
                {
                    list.RemoveRange(index, count);
                    CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Remove(xs.Span, index));
                }
            }
        }
Exemple #7
0
        // AddFirstRange is not exists.

        public void AddLastRange(IEnumerable <T> items)
        {
            lock (SyncRoot)
            {
                using (var xs = new CloneCollection <T>(items))
                {
                    if (capacity <= buffer.Count + xs.Span.Length)
                    {
                        // calc remove count
                        var remCount = Math.Min(buffer.Count, buffer.Count + xs.Span.Length - capacity);
                        using (var ys = new ResizableArray <T>(remCount))
                        {
                            for (int i = 0; i < remCount; i++)
                            {
                                ys.Add(buffer.RemoveFirst());
                            }

                            CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Remove(ys.Span, 0));
                        }
                    }

                    var index = buffer.Count;
                    var span  = xs.Span;
                    if (span.Length > capacity)
                    {
                        span = span.Slice(span.Length - capacity);
                    }

                    foreach (var item in span)
                    {
                        buffer.AddLast(item);
                    }
                    CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs <T> .Add(span, index));
                }
            }
        }