/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.internal.dtree; import org.eclipse.core.runtime.IPath; /** * The result of doing a lookup() in a data tree. Uses an instance * pool that assumes no more than POOL_SIZE instance will ever be * needed concurrently. Reclaims and reuses instances on an LRU basis. */ public class DataTreeLookup { public IPath key; public boolean isPresent; public Object data; public boolean foundInFirstDelta; private static final int POOL_SIZE = 100; /** * The array of lookup instances available for use. */ private static DataTreeLookup[] instancePool; /** * The index of the next available lookup instance. */ private static int nextFree = 0; static { instancePool = new DataTreeLookup[POOL_SIZE]; //fill the pool with objects for (int i = 0; i < POOL_SIZE; i++) { instancePool[i] = new DataTreeLookup(); } } /** * Constructors for internal use only. Use factory methods. */ private DataTreeLookup() { super(); } /** * Factory method for creating a new lookup object. */ public static DataTreeLookup newLookup(IPath nodeKey, boolean isPresent, Object data) { DataTreeLookup instance; synchronized (instancePool) { instance = instancePool[nextFree]; nextFree = ++nextFree % POOL_SIZE; } instance.key = nodeKey; instance.isPresent = isPresent; instance.data = data; instance.foundInFirstDelta = false; return instance; } /** * Factory method for creating a new lookup object. */ public static DataTreeLookup newLookup(IPath nodeKey, boolean isPresent, Object data, boolean foundInFirstDelta) { DataTreeLookup instance; synchronized (instancePool) { instance = instancePool[nextFree]; nextFree = ++nextFree % POOL_SIZE; } instance.key = nodeKey; instance.isPresent = isPresent; instance.data = data; instance.foundInFirstDelta = foundInFirstDelta; return instance; } }