001: /*
002: * Copyright (c) xsocket.org, 2006 - 2008. All rights reserved.
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2.1 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: *
018: * Please refer to the LGPL license at: http://www.gnu.org/copyleft/lesser.txt
019: * The latest copy of this software may be found on http://www.xsocket.org/
020: */
021: package org.xsocket.connection.spi;
022:
023: import java.nio.ByteBuffer;
024:
025: /**
026: * memory manager
027: *
028: * @author grro
029: */
030: interface IMemoryManager {
031:
032: /**
033: * acquire ByteBuffer with free memory
034: *
035: * @param standardsize the standard size
036: * @return the ByteBuffer with free memory
037: */
038: public ByteBuffer acquireMemoryStandardSizeOrPreallocated(
039: int standardsize);
040:
041: /**
042: * returns true, if memory manager runs in preallocation mode
043: * @return the preallocation mode
044: */
045: public boolean isPreallocationMode();
046:
047: /**
048: * sets the preallocation mode
049: * @param mode the mode
050: */
051: public void setPreallocationMode(boolean mode);
052:
053: /**
054: * sets the minimum size of a preallocated buffer
055: * @param minSize the min size of a preallocated buffer
056: */
057: public void setPreallocatedMinBufferSize(Integer minSize);
058:
059: /**
060: * gets the minimum size of a preallocated buffer
061: * @return the min size of a preallocated buffer
062: */
063: public Integer getPreallocatedMinBufferSize();
064:
065: /**
066: * set the preallocation size
067: * @param preallocationSize the preallocation size
068: */
069: public void setPreallocationBufferSize(Integer preallocationSize);
070:
071: /**
072: * gets the preallocation size
073: * @return the preallocation size
074: */
075: public Integer gettPreallocationBufferSize();
076:
077: /**
078: * sets if direct buffer should be allocated
079: * @param isDirect true, if buffer is direct
080: */
081: public void setDirect(boolean isDirect);
082:
083: /**
084: * returns if direct buffer should be allocated
085: * @return true, if is direct
086: */
087: public boolean isDirect();
088:
089: /**
090: * acquire ByteBuffer with free memory
091: *
092: * @param minSize minimal buffer size
093: * @return the ByteBuffer with free memory
094: */
095: public ByteBuffer acquireMemoryMinSize(int minSize);
096:
097: /**
098: * recycle a ByteBuffer.
099: *
100: * @param buffer the ByteBuffer to recycle
101: */
102: public void recycleMemory(ByteBuffer buffer);
103:
104: /**
105: * extract the read data and recycle the remaining ByteBuffer (if remaining larger than min size)
106: *
107: * @param buffer the ByteBuffer to recycle
108: * @param read the readSize
109: * @return the read data
110: */
111: public ByteBuffer extractAndRecycleMemory(ByteBuffer buffer,
112: int read);
113:
114: /**
115: * preallocate, if preallocated size is smaller the given minSize
116: */
117: public void preallocate();
118:
119: /**
120: * get the current free preallocated buffer size
121: * @return the current free preallocated buffer size
122: */
123: public int getCurrentSizePreallocatedBuffer();
124: }
|