/*
 * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
 * Copyright (c) 2018 Payara Services Ltd.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.grizzly.memory;

A thread local pool used by a MemoryManager to create and modify Buffers
Type parameters:
  • <E> – Type of Buffer that will be created
See Also:
/** * A thread local pool used by a {@link MemoryManager} to create and modify Buffers * * @param <E> Type of Buffer that will be created * @see java.nio.Buffer * @see org.glassfish.grizzly.Buffer */
public interface ThreadLocalPool<E> {
Resets the Buffer to empty values and empties the pool
Params:
  • pool – the buffer to reset
/** * Resets the Buffer to empty values and empties the pool * * @param pool the buffer to reset */
void reset(E pool);
Creates a buffer with a given capacity and limit
Params:
  • size – maximum number of elements
See Also:
Returns:the new buffer
/** * Creates a buffer with a given capacity and limit * * @param size maximum number of elements * @return the new buffer * @see java.nio.ByteBuffer#allocate(int) */
E allocate(int size);
Creates a new Buffer with a set size and assigns it the data that was held in the old one as long as the given size is not smaller than the data held.
Params:
  • oldBuffer – Old Buffer containing data
  • newSize – The size the new Buffer should be.
Returns:the new Buffer or null if the buffer could not be resized
/** * Creates a new Buffer with a set size and assigns it the data that was held in the old one as long as the given size * is not smaller than the data held. * * @param oldBuffer Old Buffer containing data * @param newSize The size the new Buffer should be. * @return the new Buffer or null if the buffer could not be resized */
E reallocate(E oldBuffer, int newSize);
deallocates the data in the buffer
Params:
  • underlyingBuffer – the buffer to release
Returns:true if operation successfully completed, false otherwise
/** * deallocates the data in the buffer * * @param underlyingBuffer the buffer to release * @return true if operation successfully completed, false otherwise */
boolean release(E underlyingBuffer);
Whether the last element in the buffer has been set
Params:
  • oldBuffer – the buffer to check
Returns:true if the end of the buffer has been allocated, false otherwise
/** * Whether the last element in the buffer has been set * * @param oldBuffer the buffer to check * @return true if the end of the buffer has been allocated, false otherwise */
boolean isLastAllocated(E oldBuffer);
Reduces the buffer to the last data allocated
Params:
  • buffer –
Returns:the old buffer data that was removed. This may be null.
/** * Reduces the buffer to the last data allocated * * @param buffer * @return the old buffer data that was removed. This may be null. */
E reduceLastAllocated(E buffer);
Checks if the size of the Buffer should be reset.
Params:
  • size – the desired size of the buffer. If this is less than the current size ofthe buffer then this will return false
Returns:true if the the buffer should be enlarged to hold the desired size
/** * Checks if the size of the Buffer should be reset. * * @param size the desired size of the buffer. If this is less than the current size ofthe buffer then this will return * false * @return true if the the buffer should be enlarged to hold the desired size */
boolean wantReset(int size);
Gets the number of elements between the current position and the limit
Returns:number of elements
/** * Gets the number of elements between the current position and the limit * * @return number of elements */
int remaining();
Whether there are elements between the current position and the end
Returns:true if there are unused elements, false otherwise
/** * Whether there are elements between the current position and the end * * @return true if there are unused elements, false otherwise */
boolean hasRemaining(); }