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 int[] to and from SQL. It converts the int[]
17: * to and from a byte[] 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 IntArrayConverter extends TypeAsBytesConverterBase {
22:
23: public static class Factory extends
24: TypeAsBytesConverterBase.Factory {
25:
26: protected JdbcConverter createConverter(JdbcConverter nested) {
27: return new IntArrayConverter(nested);
28: }
29:
30: }
31:
32: public IntArrayConverter(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: int[] a = new int[n];
42: int i = 0, j = 0;
43: for (; i < n;) {
44: a[i++] = ((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: int[] a = (int[]) value;
58: int n = a.length;
59: byte[] buf = new byte[n * 4];
60: int i = 0, j = 0;
61: for (; i < n;) {
62: int x = a[i++];
63: buf[j++] = (byte) ((x >>> 24) & 0xFF);
64: buf[j++] = (byte) ((x >>> 16) & 0xFF);
65: buf[j++] = (byte) ((x >>> 8) & 0xFF);
66: buf[j++] = (byte) (x & 0xFF);
67: }
68: return buf;
69: }
70:
71: /**
72: * Get the type of our expected value objects (e.g. java.util.Locale
73: * for a converter for Locale's).
74: */
75: public Class getValueType() {
76: return int[].class;
77: }
78:
79: }
|