From: Peter Bernard West Date: Wed, 14 Jan 2004 15:39:23 +0000 (+0000) Subject: Generalized support for pools of the type used for XMLEventPool X-Git-Tag: Alt-Design_pre_awt_renderer_import~157 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=326fa2164d0948b159f8742e739d3a99c3f3c326;p=xmlgraphics-fop.git Generalized support for pools of the type used for XMLEventPool git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/FOP_0-20-0_Alt-Design@197175 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/pool/FopPool.java b/src/java/org/apache/fop/pool/FopPool.java new file mode 100644 index 000000000..239672920 --- /dev/null +++ b/src/java/org/apache/fop/pool/FopPool.java @@ -0,0 +1,148 @@ +/* + * $Id$ + * + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999-2004 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "FOP" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation and was originally created by + * James Tauber . For more information on the Apache + * Software Foundation, please see . + * + * @author Peter B. West + * @version $Revision$ $Name$ + */ +package org.apache.fop.pool; + +import java.util.ArrayList; +import java.util.BitSet; + +import org.apache.fop.messaging.MessageHandler; + +/** + * This class provides a pool of Poolable objects. + */ + +public abstract class FopPool { + + private static final String tag = "$Name$"; + private static final String revision = "$Revision$"; + + /** The pool realized as a ArrayList. */ + protected final ArrayList pool; + /** The number of events in the list. */ + protected int poolSize = 0; + /** The maximum number of events in the list. */ + protected int maxPoolSize = 0; + + /** + * Set of currently pooled events. The size of this set is limited by + * the range of values that the Poolable id field can + * assume. + * If there is a significant disparity between the frequency of + * pool acquire and surrender invocations, an id clash may arise in + * the current set. + */ + protected final BitSet eventSet; + + /** + * The zero-argument constructor + */ + public FopPool() { + pool = new ArrayList(); + eventSet = new BitSet(); + } + + /** + * Construct a pool with a given initial size. + * @param initialSize - the initial size of the pool. + */ + public FopPool(int initialSize) { + pool = new ArrayList(initialSize); + eventSet = new BitSet(initialSize); + } + + /** + * Acquire a Poolable object. + * @return a Poolable object from the current pool, or null + * if no obect is available. The clear() method is + * invoked on the object before it is returned. + */ + public synchronized Poolable acquirePoolable() { + if (poolSize == 0) + return null; + Poolable ev = ((Poolable)(pool.get(--poolSize))).clear(); + eventSet.clear(ev.id); + return ev; + } + + /** + * Return an Poolable to the pool. + * @param ev - the event being returned. + */ + public synchronized void surrenderPoolable(Poolable ev) { + //System.out.println("surrenderEvent " + ev.id + //+ " poolSize " + poolSize); + if (ev == null) return; + if (eventSet.get(ev.id)) { + //System.out.println("Event clash: " + ev); + MessageHandler.logln + ("Event clash in Poolable pool. Id " + ev.id); + return; + } + eventSet.set(ev.id); + if (pool.size() > poolSize) + pool.set(poolSize++, ev); + else { + pool.add(ev); + poolSize++; + maxPoolSize = poolSize; + } + } + + /** + * Get the size of the event pool. + * @return pool size. + */ + public int getPoolSize() { return pool.size(); } + +} diff --git a/src/java/org/apache/fop/pool/Poolable.java b/src/java/org/apache/fop/pool/Poolable.java new file mode 100644 index 000000000..540a3e75e --- /dev/null +++ b/src/java/org/apache/fop/pool/Poolable.java @@ -0,0 +1,89 @@ +/* + * $Id$ + * + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999-2004 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "FOP" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation and was originally created by + * James Tauber . For more information on the Apache + * Software Foundation, please see . + * + * @author Peter B. West + * @version $Revision$ $Name$ + */ +package org.apache.fop.pool; + +/** + * This is a data class to encapsulate the data of an individual + * poolable event. The current version, while defining accessor methods, + * leaves the component data of the event as protected. + */ + +public abstract class Poolable extends Sequenced { + + private static final String tag = "$Name$"; + private static final String revision = "$Revision$"; + + + /** + * The one-argument constructor uses the default initialization values: + * NOEVENT for the event type, and null references for all others + * except namespaces. + * @param sequence the sequence number of this object + */ + public Poolable (int sequence) { + super(sequence); + } + + /** + * Clear the fields of this event. Provided for pool operations. + * Neither the namespaces nor the id field is cleared. + * @return the cleared event. + */ + public abstract Poolable clear(); + + public String toString() { + return "\nSeq " + id; + } + +} diff --git a/src/java/org/apache/fop/pool/Sequenced.java b/src/java/org/apache/fop/pool/Sequenced.java new file mode 100644 index 000000000..48b185fa4 --- /dev/null +++ b/src/java/org/apache/fop/pool/Sequenced.java @@ -0,0 +1,69 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999-2004 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "FOP" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation and was originally created by + * James Tauber . For more information on the Apache + * Software Foundation, please see . + * + * Created on 11/01/2004 + * $Id$ + */ +package org.apache.fop.pool; + +/** + * Base class for objects which require a fixed sequence number. + * @author Peter B. West + * @version $Revision$ $Name$ + */ +public class Sequenced { + + private static final String tag = "$Name$"; + private static final String revision = "$Revision$"; + + public final int id; + + public Sequenced (int sequence) { + id = sequence; + } +} diff --git a/src/java/org/apache/fop/pool/UriLocalNamePool.java b/src/java/org/apache/fop/pool/UriLocalNamePool.java new file mode 100644 index 000000000..d29e884ce --- /dev/null +++ b/src/java/org/apache/fop/pool/UriLocalNamePool.java @@ -0,0 +1,89 @@ +/* + * $Id$ + * + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999-2004 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "FOP" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation and was originally created by + * James Tauber . For more information on the Apache + * Software Foundation, please see . + * + * @author Peter B. West + * @version $Revision$ $Name$ + */ +package org.apache.fop.pool; + +import org.apache.fop.xml.UriLocalName; + +/** + * This class provides a pool of UriLocalName objects. + */ + +public class UriLocalNamePool extends FopPool { + + private static final String tag = "$Name$"; + private static final String revision = "$Revision$"; + + /** + * The zero-argument constructor + */ + public UriLocalNamePool() { + } + + /** + * Construct a pool with a given initial size. + * @param initialSize - the initial size of the pool. + */ + public UriLocalNamePool(int initialSize) { + super(initialSize); + } + + /** + * Acquire a UriLocalName object. + * @return a UriLocalName. + */ + public synchronized UriLocalName acquireUriLocalName() { + return (UriLocalName)acquirePoolable(); + } + +}