01: /*
02: * Copyright (c) 1998 - 2005 Versant Corporation
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * Versant Corporation - initial API and implementation
10: */
11: package com.versant.core.jdbc.sql.conv;
12:
13: import com.versant.core.jdbc.JdbcConverter;
14:
15: /**
16: * This converter converts float[] to and from SQL. It converts the float[]
17: * to and from a float[] and delegates to a nested converter.
18: * TODO This could be done much faster with java.nio buffers.
19: * @keep-all
20: */
21: public class FloatArrayConverter extends TypeAsBytesConverterBase {
22:
23: public static class Factory extends
24: TypeAsBytesConverterBase.Factory {
25:
26: protected JdbcConverter createConverter(JdbcConverter nested) {
27: return new FloatArrayConverter(nested);
28: }
29:
30: }
31:
32: public FloatArrayConverter(JdbcConverter nested) {
33: super (nested);
34: }
35:
36: /**
37: * Convert a byte[] into an instance of our value class.
38: */
39: protected Object fromByteArray(byte[] buf) {
40: int n = buf.length / 4;
41: float[] a = new float[n];
42: int i = 0, j = 0;
43: for (; i < n;) {
44: a[i++] = Float.intBitsToFloat(((buf[j++] & 0xFF) << 24)
45: + ((buf[j++] & 0xFF) << 16)
46: + ((buf[j++] & 0xFF) << 8) + (buf[j++] & 0xFF));
47: }
48: return a;
49: }
50:
51: /**
52: * Convert an instance of our value class into a byte[].
53: */
54: protected byte[] toByteArray(Object value) {
55: if (value == null)
56: return null;
57: float[] a = (float[]) value;
58: int n = a.length;
59: byte[] buf = new byte[n * 4];
60: int i = 0, j = 0;
61: for (; i < n;) {
62:
63: int x = Float.floatToRawIntBits(a[i++]);
64:
65: buf[j++] = (byte) ((x >>> 24) & 0xFF);
66: buf[j++] = (byte) ((x >>> 16) & 0xFF);
67: buf[j++] = (byte) ((x >>> 8) & 0xFF);
68: buf[j++] = (byte) (x & 0xFF);
69: }
70: return buf;
71: }
72:
73: /**
74: * Get the type of our expected value objects (e.g. java.util.Locale
75: * for a converter for Locale's).
76: */
77: public Class getValueType() {
78: return float[].class;
79: }
80:
81: }
|