comparison src/treecms/collections/CopyOnWriteArrayList.java @ 25:c1e7ec6b3d44

commit
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Tue, 12 Jul 2011 14:39:35 +0900
parents
children
comparison
equal deleted inserted replaced
24:68021f7091e1 25:c1e7ec6b3d44
1 package treecms.collections;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collection;
6 import java.util.Collections;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.ListIterator;
10 import java.util.RandomAccess;
11 import java.util.concurrent.locks.ReentrantLock;
12
13
14 public class CopyOnWriteArrayList<E> implements List<E> , RandomAccess
15 {
16 private volatile Object[] m_array;
17 private final ReentrantLock m_lock;
18
19 public CopyOnWriteArrayList()
20 {
21 m_array = new Object[0];
22 m_lock = new ReentrantLock();
23 }
24
25 public CopyOnWriteArrayList(List<E> _list)
26 {
27 this();
28 if(_list instanceof CopyOnWriteArrayList){
29 CopyOnWriteArrayList<E> list = (CopyOnWriteArrayList<E>)_list;
30 m_array = list.m_array;
31 }
32 }
33
34 @Override
35 public int size()
36 {
37 return m_array.length;
38 }
39
40 @Override
41 public boolean isEmpty()
42 {
43 return (size() == 0) ? true : false;
44 }
45
46 @Override
47 public boolean contains(Object _o)
48 {
49 Object[] array = m_array;
50 for(Object item : array){
51 if(item.equals(_o)){
52 return true;
53 }
54 }
55 return false;
56 }
57
58 @Override
59 public Iterator<E> iterator()
60 {
61 List<E> list = (List<E>)Arrays.asList(m_array);
62 return Collections.unmodifiableList(list).iterator();
63 }
64
65 @Override
66 public Object[] toArray()
67 {
68 return Arrays.copyOf(m_array,size());
69 }
70
71 @Override
72 public <T> T[] toArray(T[] _a)
73 {
74 final Object[] ret;
75 int size = size();
76 if(_a.length < size){
77 ret = Arrays.copyOf(m_array,size);
78 }else{
79 System.arraycopy(m_array,0,_a,0,size);
80 ret = _a;
81 }
82
83 return (T[])ret;
84 }
85
86 @Override
87 public synchronized boolean add(E e)
88 {
89 int size = m_array.length;
90 Object[] newArray = new Object[size + 1];
91 System.arraycopy(m_array,0,newArray,0,size);
92 newArray[size] = e;
93 m_array = newArray;
94 return true;
95 }
96
97 @Override
98 public synchronized boolean remove(Object o)
99 {
100 int size = size();
101 Object[] array = new Object[size - 1];
102
103 for(int i = 0;i < size;i ++){
104 Object item = m_array[i];
105 if(item.equals(o)){
106 for(i = i + 1;i < size;i ++){
107 array[i - 1] = m_array[i];
108 }
109
110 m_array = array;
111 return true;
112 }
113 array[i] = item;
114 }
115
116 return false;
117 }
118
119 @Override
120 public boolean containsAll(Collection<?> c)
121 {
122 boolean ret = true;
123 for(Object e1 : c){
124 ret = ret & contains(e1);
125 }
126 return ret;
127 }
128
129 @Override
130 public synchronized boolean addAll(Collection<? extends E> c)
131 {
132 Object[] array = new Object[size() + c.size()];
133 System.arraycopy(m_array,0,array,0,m_array.length);
134
135 int i = m_array.length + 1;
136 for(Object e : c){
137 array[i] = e;
138 i++;
139 }
140 return true;
141 }
142
143 @Override
144 public synchronized boolean addAll(int index, Collection<? extends E> c)
145 {
146 Object[] array = new Object[size() + c.size()];
147 System.arraycopy(m_array,0,array,0,index);
148
149 int i = index + 1;
150 for(Object e : c){
151 array[i] = e;
152 i ++;
153 }
154
155 System.arraycopy(m_array,index + 1,array,i + 1,size() - index);
156 m_array = array;
157 return true;
158 }
159
160 @Override
161 public boolean removeAll(Collection<?> c)
162 {
163 Object[] array = new Object[size() - c.size()];
164
165 return false;
166 }
167
168 @Override
169 public boolean retainAll(Collection<?> c)
170 {
171 // TODO Auto-generated method stub
172 return false;
173 }
174
175 @Override
176 public void clear() {
177 // TODO Auto-generated method stub
178
179 }
180
181 @Override
182 public E get(int index) {
183 // TODO Auto-generated method stub
184 return null;
185 }
186
187 @Override
188 public E set(int index, E element) {
189 // TODO Auto-generated method stub
190 return null;
191 }
192
193 @Override
194 public void add(int index, E element) {
195 // TODO Auto-generated method stub
196
197 }
198
199 @Override
200 public E remove(int index) {
201 // TODO Auto-generated method stub
202 return null;
203 }
204
205 @Override
206 public int indexOf(Object o) {
207 // TODO Auto-generated method stub
208 return 0;
209 }
210
211 @Override
212 public int lastIndexOf(Object o) {
213 // TODO Auto-generated method stub
214 return 0;
215 }
216
217 @Override
218 public ListIterator<E> listIterator()
219 {
220 // TODO Auto-generated method stub
221 return null;
222 }
223
224 @Override
225 public ListIterator<E> listIterator(int index)
226 {
227 // TODO Auto-generated method stub
228 return null;
229 }
230
231 @Override
232 public List<E> subList(int fromIndex, int toIndex)
233 {
234 return null;
235 }
236
237 }