1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2000,2008 Oracle. All rights reserved. 5 * 6 * $Id: SortedDoubleBinding.java,v 12.6 2008/02/07 17:12:25 mark Exp $ 7 */ 8 9package com.sleepycat.bind.tuple; 10 11import com.sleepycat.db.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 * interchangeable 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.db} 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 */ 41public 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().writeSortedDouble(val), 83 entry); 84 } 85} 86