001package org.maltparser.core.pool; 002 003import java.util.ArrayList; 004 005import org.maltparser.core.exception.MaltChainedException; 006 007public abstract class ObjectPoolList<T> extends ObjectPool<T> { 008 private final ArrayList<T> objectList; 009 private int currentSize; 010 011 public ObjectPoolList() { 012 this(Integer.MAX_VALUE); 013 } 014 015 public ObjectPoolList(int keepThreshold) { 016 super(keepThreshold); 017 objectList = new ArrayList<T>(); 018 } 019 020 protected abstract T create() throws MaltChainedException; 021 public abstract void resetObject(T o) throws MaltChainedException; 022 023 public synchronized T checkOut() throws MaltChainedException { 024 T t = null; 025 if (currentSize >= objectList.size()) { 026 t = create(); 027 objectList.add(t); 028 currentSize++; 029 } else { 030 t = objectList.get(currentSize); 031 currentSize++; 032 } 033 return t; 034 } 035 036 public synchronized void checkIn(T o) throws MaltChainedException { 037 resetObject(o); 038 } 039 040 public synchronized void checkInAll() throws MaltChainedException { 041 for (int i = currentSize-1; i >= 0 && i < objectList.size(); i--) { 042 resetObject(objectList.get(i)); 043 if (currentSize >= keepThreshold) { 044 objectList.remove(i); 045 } 046 } 047 currentSize = 0; 048 } 049 050 public int getCurrentSize() { 051 return currentSize; 052 } 053 054 public void setCurrentSize(int currentSize) { 055 this.currentSize = currentSize; 056 } 057 058 public int size() { 059 return objectList.size(); 060 } 061 062 public String toString() { 063 final StringBuilder sb = new StringBuilder(); 064 for (int i = 0; i < currentSize; i++) { 065 sb.append(objectList.get(i)); 066 sb.append(", "); 067 } 068 return sb.toString(); 069 } 070}