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(); } }
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(); } }
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]); }
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(); } }
public SubListIterator(SubListImpl parent, int index, SubListReadData d) : base(d.Data, index + parent.start) { this.parent = parent; this.dataR = d; }
public E[] ToArray() { SubListReadData r = read; return(CopyOnWriteArrayList <E> .ToArray(r.Data, start, r.Size)); }
public bool ContainsAll(Collection <E> c) { SubListReadData b = read; return(CopyOnWriteArrayList <E> .ContainsAll(c, b.Data, start, b.Size)); }