public int LastIndexOf(E o)
            {
                SubListReadData b   = read;
                int             ind = CopyOnWriteArrayList <E> .LastIndexOf(o, b.Data, start, b.Size) - start;

                return(ind < 0 ? -1 : ind);
            }
            public SubListImpl(CopyOnWriteArrayList <E> list, int fromIdx, int toIdx)
            {
                this.list = list;
                Object[] data = list.Data;
                int      size = toIdx - fromIdx;

                CheckIndexExlusive(fromIdx, data.Length);
                CheckIndexInclusive(toIdx, data.Length);
                read  = new SubListReadData(size, list.Data);
                start = fromIdx;
            }
 public void Clear()
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckModifications();
         list.RemoveRange(start, read.Size);
         read = new SubListReadData(0, list.Data);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public bool Add(E o)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckModifications();
         list.Add(start + read.Size, o);
         read = new SubListReadData(read.Size + 1, list.Data);
         return(true);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public void Add(int index, E element)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckIndexInclusive(index, read.Size);
         CheckModifications();
         list.Add(index + start, element);
         read = new SubListReadData(read.Size + 1, list.Data);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public E Remove(int index)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckIndexExlusive(index, read.Size);
         CheckModifications();
         E obj = list.Remove(index + start);
         read = new SubListReadData(read.Size - 1, list.Data);
         return(obj);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public E Set(int index, E obj)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckIndexExlusive(index, read.Size);
         CheckModifications();
         E result = list.Set(index + start, obj);
         read = new SubListReadData(read.Size, list.Data);
         return(result);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public bool AddAll(Collection <E> c)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckModifications();
         int d = list.Size();
         list.AddAll(start + read.Size, c);
         read = new SubListReadData(read.Size + (list.Size() - d), list.Data);
         return(true);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
 public bool AddAll(int index, Collection <E> collection)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckIndexInclusive(index, read.Size);
         CheckModifications();
         int  d  = list.Size();
         bool rt = list.AddAll(index + start, collection);
         read = new SubListReadData(read.Size + list.Size() - d, list
                                    .Data);
         return(rt);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
Esempio n. 10
0
 public bool RetainAll(Collection <E> c)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckModifications();
         int removed = list.RetainAll(c, start, read.Size);
         if (removed > 0)
         {
             read = new SubListReadData(read.Size - removed, list
                                        .Data);
             return(true);
         }
         return(false);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
Esempio n. 11
0
            public E Get(int index)
            {
                SubListReadData data = read;

                if (data.Data != list.Data)
                {
                    list.arrayLock.WaitOne();
                    try
                    {
                        data = read;
                        if (data.Data != list.Data)
                        {
                            throw new ConcurrentModificationException();
                        }
                    }
                    finally
                    {
                        list.arrayLock.ReleaseMutex();
                    }
                }
                CheckIndexExlusive(index, data.Size);
                return(data.Data[index + start]);
            }
Esempio n. 12
0
 public bool Remove(E o)
 {
     list.arrayLock.WaitOne();
     try
     {
         CheckModifications();
         int i = IndexOf(o);
         if (i == -1)
         {
             return(false);
         }
         bool result = list.Remove(i + start) != null;
         if (result)
         {
             read = new SubListReadData(read.Size - 1, list.Data);
         }
         return(result);
     }
     finally
     {
         list.arrayLock.ReleaseMutex();
     }
 }
Esempio n. 13
0
 public SubListIterator(SubListImpl parent, int index, SubListReadData d) :
     base(d.Data, index + parent.start)
 {
     this.parent = parent;
     this.dataR  = d;
 }
Esempio n. 14
0
            public E[] ToArray()
            {
                SubListReadData r = read;

                return(CopyOnWriteArrayList <E> .ToArray(r.Data, start, r.Size));
            }
Esempio n. 15
0
            public bool ContainsAll(Collection <E> c)
            {
                SubListReadData b = read;

                return(CopyOnWriteArrayList <E> .ContainsAll(c, b.Data, start, b.Size));
            }