package bboss.org.apache.velocity.util; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * Simple object pool. Based on ThreadPool and few other classes * * The pool will ignore overflow and return null if empty. * * @author Gal Shachor * @author Costin * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a> * @version $Id: SimplePool.java 463298 2006-10-12 16:10:32Z henning $ */ public final class SimplePool { /* * Where the objects are held. */ private Object pool[]; /** * max amount of objects to be managed * set via CTOR */ private int max; /** * index of previous to next * free slot */ private int current=-1; /** * @param max */ public SimplePool(int max) { this.max = max; pool = new Object[max]; } /** * Add the object to the pool, silent nothing if the pool is full * @param o */ public void put(Object o) { int idx=-1; synchronized(this) { /* * if we aren't full */ if (current < max - 1) { /* * then increment the * current index. */ idx = ++current; } if (idx >= 0) { pool[idx] = o; } } } /** * Get an object from the pool, null if the pool is empty. * @return The object from the pool. */ public Object get() { synchronized(this) { /* * if we have any in the pool */ if( current >= 0 ) { /* * remove the current one */ Object o = pool[current]; pool[current] = null; current--; return o; } } return null; } /** * Return the size of the pool * @return The pool size. */ public int getMax() { return max; } /** * for testing purposes, so we can examine the pool * * @return Array of Objects in the pool. */ Object[] getPool() { return pool; } }