/* * Copyright 2009-2016 Tilmann Zaeschke. All rights reserved. * * This file is part of ZooDB. * * ZooDB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ZooDB is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ZooDB. If not, see <http://www.gnu.org/licenses/>. * * See the README and COPYING files for further information. */ package org.zoodb.api; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import org.zoodb.api.impl.ZooPC; public class DBArrayList<E> extends ZooPC implements List<E>, DBCollection { private transient ArrayList<E> v; public DBArrayList() { v = new ArrayList<E>(); } public DBArrayList(int size) { v = new ArrayList<E>(size); } @Override public boolean add(E e) { zooActivateWrite(); return v.add(e); } @Override public void add(int index, E element) { zooActivateWrite(); v.add(index, element); } @Override public boolean addAll(Collection<? extends E> c) { zooActivateWrite(); return v.addAll(c); } @Override public boolean addAll(int index, Collection<? extends E> c) { zooActivateWrite(); return v.addAll(index, c); } @Override public void clear() { zooActivateWrite(); v.clear(); } @Override public boolean contains(Object o) { zooActivateRead(); return v.contains(o); } @Override public boolean containsAll(Collection<?> c) { zooActivateRead(); return v.containsAll(c); } @Override public E get(int index) { zooActivateRead(); return v.get(index); } @Override public int indexOf(Object o) { zooActivateRead(); return v.indexOf(o); } @Override public boolean isEmpty() { zooActivateRead(); return v.isEmpty(); } @Override public Iterator<E> iterator() { zooActivateRead(); return new DBIterator(v.iterator()); } @Override public int lastIndexOf(Object o) { zooActivateRead(); return v.lastIndexOf(o); } @Override public ListIterator<E> listIterator() { zooActivateRead(); return new DBListIterator(v.listIterator()); } @Override public ListIterator<E> listIterator(int index) { zooActivateRead(); return new DBListIterator(v.listIterator(index)); } @Override public boolean remove(Object o) { zooActivateWrite(); return v.remove(o); } @Override public E remove(int index) { zooActivateWrite(); return v.remove(index); } @Override public boolean removeAll(Collection<?> c) { zooActivateWrite(); return v.removeAll(c); } @Override public boolean retainAll(Collection<?> c) { zooActivateWrite(); return v.retainAll(c); } @Override public E set(int index, E element) { zooActivateWrite(); return v.set(index, element); } @Override public int size() { zooActivateRead(); return v.size(); } @Override public List<E> subList(int fromIndex, int toIndex) { zooActivateRead(); return v.subList(fromIndex, toIndex); } @Override public Object[] toArray() { zooActivateRead(); return v.toArray(); } @Override public <T> T[] toArray(T[] a) { zooActivateRead(); return v.toArray(a); } public void setBatchSize(int i) { System.out.println("STUB: DBVector.setBatchSize()"); } public void resize(int size) { System.out.println("STUB: DBVector.resize()"); } private class DBIterator implements Iterator<E> { private final Iterator<E> iter; private DBIterator(Iterator<E> iter) { this.iter = iter; } @Override public boolean hasNext() { return iter.hasNext(); } @Override public E next() { return iter.next(); } @Override public void remove() { zooActivateWrite(); iter.remove(); } } private class DBListIterator extends DBArrayList<E>.DBIterator implements ListIterator<E> { private final ListIterator<E> iter; private DBListIterator(ListIterator<E> iter) { super(iter); this.iter = iter; } @Override public boolean hasPrevious() { return iter.hasPrevious(); } @Override public E previous() { return iter.previous(); } @Override public int nextIndex() { return iter.nextIndex(); } @Override public int previousIndex() { return iter.previousIndex(); } @Override public void set(E e) { zooActivateWrite(); iter.set(e); } @Override public void add(E e) { zooActivateWrite(); iter.add(e); } } @Override public int hashCode() { return (int) (jdoZooGetOid()*10000) | size(); } @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof DBArrayList)) { return false; } DBArrayList<?> o = (DBArrayList<?>) obj; if (size() != o.size() || jdoZooGetOid() != o.jdoZooGetOid()) { return false; } for (int i = 0; i < size(); i++) { if (!get(i).equals(o.get(i))) { return false; } } return true; } }