Package fiftyone.mobile.detection.entities.stream

Source Code of fiftyone.mobile.detection.entities.stream.TriePool

package fiftyone.mobile.detection.entities.stream;

import fiftyone.mobile.detection.Disposable;
import fiftyone.mobile.detection.readers.TrieReader;
import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;

/* *********************************************************************
* This Source Code Form is copyright of 51Degrees Mobile Experts Limited.
* Copyright 2014 51Degrees Mobile Experts Limited, 5 Charlotte Close,
* Caversham, Reading, Berkshire, United Kingdom RG4 7BY
*
* This Source Code Form is the subject of the following patent
* applications, owned by 51Degrees Mobile Experts Limited of 5 Charlotte
* Close, Caversham, Reading, Berkshire, United Kingdom RG4 7BY:
* European Patent Application No. 13192291.6; and
* United States Patent Application Nos. 14/085,223 and 14/085,301.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0.
*
* If a copy of the MPL was not distributed with this file, You can obtain
* one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
* defined by the Mozilla Public License, v. 2.0.
* ********************************************************************* */
/**
* As multiple threads need to read from the Source concurrently this class
* provides a mechanism for readers to be recycled across threads and requests.
* <p> Used by the BaseList<T> to provide multiple readers for the list. <p> The
* DetectorDataSet must be disposed of to ensure the readers in the pool are
* closed.
*/
public class TriePool implements Disposable {

    // List of readers available to be used.
    private final Queue<TrieReader> readers = new LinkedBlockingDeque<TrieReader>();
    // A pool of file readers to use to read data from the file.
    private final TrieSource source;

    /**
     * Constructs a new pool of readers for the source provided.
     *
     **** @param source The data source for the list
     */
    public TriePool(TrieSource source) {
        this.source = source;
    }

    /**
     * Returns a reader to the temp file for exclusive use. Release method must
     * be called to return the reader to the pool when finished.
     *
     * @return Reader open and ready to read from the temp file
     */
    public TrieReader getReader() throws IOException {
        TrieReader reader = readers.poll();
        if (reader == null) {
            reader = source.createReader();
        }
        return reader;
    }

    /**
     * Returns the reader to the pool to be used by another process later.
     *
     **** @param reader Reader open and ready to read from the temp file
     */
    public void release(TrieReader reader) {
        readers.add(reader);
    }

    @Override
    public void dispose() {
        source.dispose();
    }
}
TOP

Related Classes of fiftyone.mobile.detection.entities.stream.TriePool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.