1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48:
49:
53: public final class Buffers
54: {
55:
62: public static DataBuffer createBuffer(int dataType, Object data,
63: int size)
64: {
65: if (data == null) return createBuffer(dataType, size, 1);
66:
67: return createBufferFromData(dataType, data, size);
68: }
69:
70:
71:
77: public static DataBuffer createBuffer(int dataType, int size) {
78: return createBuffer(dataType, size, 1);
79: }
80:
81:
88: public static DataBuffer createBuffer(int dataType, int size, int numBanks)
89: {
90: switch (dataType)
91: {
92: case DataBuffer.TYPE_BYTE:
93: return new DataBufferByte(size, numBanks);
94: case DataBuffer.TYPE_SHORT:
95: return new DataBufferShort(size, numBanks);
96: case DataBuffer.TYPE_USHORT:
97: return new DataBufferUShort(size, numBanks);
98: case DataBuffer.TYPE_INT:
99: return new DataBufferInt(size, numBanks);
100: case DataBuffer.TYPE_FLOAT:
101: return new DataBufferFloat(size, numBanks);
102: case DataBuffer.TYPE_DOUBLE:
103: return new DataBufferDouble(size, numBanks);
104: default:
105: throw new UnsupportedOperationException();
106: }
107: }
108:
109:
116: public static DataBuffer createBufferFromData(int dataType, Object data,
117: int size)
118: {
119: switch (dataType)
120: {
121: case DataBuffer.TYPE_BYTE:
122: return new DataBufferByte((byte[]) data, size);
123: case DataBuffer.TYPE_SHORT:
124: return new DataBufferShort((short[]) data, size);
125: case DataBuffer.TYPE_USHORT:
126: return new DataBufferUShort((short[]) data, size);
127: case DataBuffer.TYPE_INT:
128: return new DataBufferInt((int[]) data, size);
129: case DataBuffer.TYPE_FLOAT:
130: return new DataBufferFloat((float[]) data, size);
131: case DataBuffer.TYPE_DOUBLE:
132: return new DataBufferDouble((double[]) data, size);
133: default:
134: throw new UnsupportedOperationException();
135: }
136: }
137:
138:
145: public static Object getData(DataBuffer buffer)
146: {
147: if (buffer instanceof DataBufferByte)
148: return ((DataBufferByte) buffer).getData();
149:
150: if (buffer instanceof DataBufferShort)
151: return ((DataBufferShort) buffer).getData();
152:
153: if (buffer instanceof DataBufferUShort)
154: return ((DataBufferUShort) buffer).getData();
155:
156: if (buffer instanceof DataBufferInt)
157: return ((DataBufferInt) buffer).getData();
158:
159: if (buffer instanceof DataBufferFloat)
160: return ((DataBufferFloat) buffer).getData();
161:
162: if (buffer instanceof DataBufferDouble)
163: return ((DataBufferDouble) buffer).getData();
164:
165: throw new ClassCastException("Unknown data buffer type");
166: }
167:
168:
169:
174: public static Object getData(DataBuffer src, int srcOffset,
175: Object dest, int destOffset,
176: int length)
177: {
178: Object from;
179: if (src instanceof DataBufferByte)
180: {
181: from = ((DataBufferByte) src).getData();
182: if (dest == null) dest = new byte[length+destOffset];
183: }
184: else if (src instanceof DataBufferShort)
185: {
186: from = ((DataBufferShort) src).getData();
187: if (dest == null) dest = new short[length+destOffset];
188: }
189: else if (src instanceof DataBufferUShort)
190: {
191: from = ((DataBufferUShort) src).getData();
192: if (dest == null) dest = new short[length+destOffset];
193: }
194: else if (src instanceof DataBufferInt)
195: {
196: from = ((DataBufferInt) src).getData();
197: if (dest == null) dest = new int[length+destOffset];
198: }
199: else if (src instanceof DataBufferFloat)
200: {
201: from = ((DataBufferFloat) src).getData();
202: if (dest == null) dest = new float[length+destOffset];
203: }
204: else if (src instanceof DataBufferDouble)
205: {
206: from = ((DataBufferDouble) src).getData();
207: if (dest == null) dest = new double[length+destOffset];
208: }
209: else
210: {
211: throw new ClassCastException("Unknown data buffer type");
212: }
213:
214: System.arraycopy(from, srcOffset, dest, destOffset, length);
215: return dest;
216: }
217:
218:
224: public static int smallestAppropriateTransferType(int bits)
225: {
226: if (bits <= 8)
227: {
228: return DataBuffer.TYPE_BYTE;
229: }
230: else if (bits <= 16)
231: {
232: return DataBuffer.TYPE_USHORT;
233: }
234: else if (bits <= 32)
235: {
236: return DataBuffer.TYPE_INT;
237: }
238: else
239: {
240: return DataBuffer.TYPE_UNDEFINED;
241: }
242: }
243: }