01: /*-
02: * See the file LICENSE for redistribution information.
03: *
04: * Copyright (c) 2000,2008 Oracle. All rights reserved.
05: *
06: * $Id: SortedDoubleBinding.java,v 1.4.2.2 2008/01/07 15:14:06 cwl Exp $
07: */
08:
09: package com.sleepycat.bind.tuple;
10:
11: import com.sleepycat.je.DatabaseEntry;
12:
13: /**
14: * A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
15: * wrapper or a <code>double</code> primitive.
16: *
17: * <p>This class produces byte array values that by default (without a custom
18: * comparator) sort correctly, including sorting of negative values.
19: * Therefore, this class should normally be used instead of {@link
20: * DoubleBinding} which does not by default support sorting of negative values.
21: * Please note that:</p>
22: * <ul>
23: * <li>The byte array (stored) formats used by {@link DoubleBinding} and
24: * {@link SortedDoubleBinding} are different and incompatible. They are not
25: * interchangable once data has been stored.</li>
26: * <li>An instance of {@link DoubleBinding}, not {@link SortedDoubleBinding},
27: * is returned by {@link TupleBinding#getPrimitiveBinding} method. Therefore,
28: * to use {@link SortedDoubleBinding}, {@link TupleBinding#getPrimitiveBinding}
29: * should not be called.</li>
30: * </ul>
31: *
32: * <p>There are two ways to use this class:</p>
33: * <ol>
34: * <li>When using the {@link com.sleepycat.je} package directly, the static
35: * methods in this class can be used to convert between primitive values and
36: * {@link DatabaseEntry} objects.</li>
37: * <li>When using the {@link com.sleepycat.collections} package, an instance of
38: * this class can be used with any stored collection.</li>
39: * </ol>
40: */
41: public class SortedDoubleBinding extends TupleBinding {
42:
43: /* javadoc is inherited */
44: public Object entryToObject(TupleInput input) {
45:
46: return new Double(input.readSortedDouble());
47: }
48:
49: /* javadoc is inherited */
50: public void objectToEntry(Object object, TupleOutput output) {
51:
52: output.writeSortedDouble(((Number) object).doubleValue());
53: }
54:
55: /* javadoc is inherited */
56: protected TupleOutput getTupleOutput(Object object) {
57:
58: return DoubleBinding.sizedOutput();
59: }
60:
61: /**
62: * Converts an entry buffer into a simple <code>double</code> value.
63: *
64: * @param entry is the source entry buffer.
65: *
66: * @return the resulting value.
67: */
68: public static double entryToDouble(DatabaseEntry entry) {
69:
70: return entryToInput(entry).readSortedDouble();
71: }
72:
73: /**
74: * Converts a simple <code>double</code> value into an entry buffer.
75: *
76: * @param val is the source value.
77: *
78: * @param entry is the destination entry buffer.
79: */
80: public static void doubleToEntry(double val, DatabaseEntry entry) {
81:
82: outputToEntry(DoubleBinding.sizedOutput()
83: .writeSortedDouble(val), entry);
84: }
85: }
|