All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.oscim.utils.pool.Pool Maven / Gradle / Ivy

/*
 * Copyright 2013 Hannes Janetzek
 *
 * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
 *
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * This program 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with
 * this program. If not, see .
 */
package org.oscim.utils.pool;

import javax.annotation.CheckReturnValue;

@SuppressWarnings({"rawtypes", "unchecked"})
public abstract class Pool> {
    protected T mPool;
    protected int mLimit;
    protected int mFill;

    /**
     * @param item release resources
     * @return whether item should be added to
     * pool. use to manage pool size manually
     */
    protected boolean clearItem(T item) {
        return true;
    }

    /**
     * Release 'item' to pool.
     * 

* Usage item = pool.release(item), to ensure to not keep a reference to * item! */ @CheckReturnValue public T release(T item) { if (item == null) return null; if (!clearItem(item)) return null; ((Inlist) item).next = mPool; mPool = item; return null; } /** * Release 'list' to pool. *

* Usage list = pool.releaseAll(list), to ensure to not keep a reference to * list! */ @CheckReturnValue public T releaseAll(T list) { if (list == null) return null; while (list != null) { T next = (T) list.next; clearItem(list); ((Inlist) list).next = mPool; mPool = list; list = next; } return null; } /** * remove 'item' from 'list' and add back to pool */ public T release(T list, T item) { if (item == null) return list; clearItem(item); return (T) Inlist.remove((Inlist) list, item); } /** * get an item from pool */ public T get() { if (mPool == null) return createItem(); Inlist ret = mPool; mPool = (T) mPool.next; ret.next = null; return (T) ret; } protected abstract T createItem(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy