// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.pooling; import org.pmw.tinylog.Logger; import java.nio.ByteBuffer; public class ByteBufferPool extends LinkedObjectPool { private final int defaultBufferSize; public ByteBufferPool(int defaultBufferSize) { super(ObjectPool.DEFAULT_SIZE); this.defaultBufferSize = defaultBufferSize; } public ByteBufferPool(int size, int defaultBufferSize) { super(size); this.defaultBufferSize = defaultBufferSize; } @Override protected ByteBuffer makeNewObject() { return ByteBuffer.allocate(defaultBufferSize); } @Override protected void resetObject(ByteBuffer obj) { obj.clear(); } @Override public ByteBuffer get() { // Logger.debug("ByteBufferPool.get() BB.capacity(): " + bb.capacity() // + ", bb.pos(): " + bb.position() + ". Pool.size() is now: " // + this.getPoolSize()); return super.get(); } @Override public void put(ByteBuffer bb) { if(bb.isDirect()) super.put(bb); // Logger.debug("ByteBufferPool.put() BB.capacity(): " + bb.capacity() // + ", bb.pos(): " + bb.position() + ". Pool.size() is now: " // + this.getPoolSize()); } @Override protected void handlePoolExhaustion() { Logger.debug("ByteBufferPool(" + defaultBufferSize + ") exhausted, making more objects."); // If none exist, make (and pool) a few // Dont sync the loop, let the makeNewObject() // call return before locking the pool object for (int i = 0; i < 5; ++i) this.makeAndAdd(); } }