package org.postgresql.core; /* * A simple and efficient class to pool one dimensional byte arrays * of different sizes. */ public class BytePoolDim1 { /* * The maximum size of the array we manage. */ int maxsize = 256; /* * The pools not currently in use */ ObjectPool notusemap[] = new ObjectPool[maxsize + 1]; /* * The pools currently in use */ ObjectPool inusemap[] = new ObjectPool[maxsize + 1]; /* * */ byte binit[][] = new byte[maxsize + 1][0]; /* * Construct a new pool */ public BytePoolDim1() { for (int i = 0; i <= maxsize; i++) { binit[i] = new byte[i]; inusemap[i] = new SimpleObjectPool(); notusemap[i] = new SimpleObjectPool(); } } /* * Allocate a byte[] of a specified size and put it in the pool. If it's * larger than maxsize then it is not pooled. * @return the byte[] allocated */ public byte[] allocByte(int size) { // for now until the bug can be removed return new byte[size]; /* // Don't pool if >maxsize if (size > maxsize){ return new byte[size]; } ObjectPool not_usel = notusemap[size]; ObjectPool in_usel = inusemap[size]; byte b[] = null; // Fetch from the unused pool if available otherwise allocate a new // now array if (!not_usel.isEmpty()) { Object o = not_usel.remove(); b = (byte[]) o; } else b = new byte[size]; in_usel.add(b); return b; */ } /* * Release an array * @param b byte[] to release */ public void release(byte[] b) { // If it's larger than maxsize then we don't touch it if (b.length > maxsize) return ; ObjectPool not_usel = notusemap[b.length]; ObjectPool in_usel = inusemap[b.length]; in_usel.remove(b); not_usel.add(b); } /* * Deallocate all * @deprecated Real bad things happen if this is called! */ public void deallocate() { //for(int i = 0; i <= maxsize; i++){ // notusemap[i].addAll(inusemap[i]); // inusemap[i].clear(); //} } }