1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2000,2008 Oracle. All rights reserved. 5 * 6 * $Id: RecordNumberBinding.java,v 12.6 2008/01/08 20:58:35 bostic Exp $ 7 */ 8 9package com.sleepycat.bind; 10 11import com.sleepycat.compat.DbCompat; 12import com.sleepycat.db.DatabaseEntry; 13 14/** 15 * An <code>EntryBinding</code> that treats a record number key entry as a 16 * <code>Long</code> key object. 17 * 18 * <p>Record numbers are returned as <code>Long</code> objects, although on 19 * input any <code>Number</code> object may be used.</p> 20 * 21 * @author Mark Hayes 22 */ 23public class RecordNumberBinding implements EntryBinding { 24 25 /** 26 * Creates a byte array binding. 27 */ 28 public RecordNumberBinding() { 29 } 30 31 // javadoc is inherited 32 public Object entryToObject(DatabaseEntry entry) { 33 34 return new Long(entryToRecordNumber(entry)); 35 } 36 37 // javadoc is inherited 38 public void objectToEntry(Object object, DatabaseEntry entry) { 39 40 recordNumberToEntry(((Number) object).longValue(), entry); 41 } 42 43 /** 44 * Utility method for use by bindings to translate a entry buffer to an 45 * record number integer. 46 * 47 * @param entry the entry buffer. 48 * 49 * @return the record number. 50 */ 51 public static long entryToRecordNumber(DatabaseEntry entry) { 52 53 return DbCompat.getRecordNumber(entry) & 0xFFFFFFFFL; 54 } 55 56 /** 57 * Utility method for use by bindings to translate a record number integer 58 * to a entry buffer. 59 * 60 * @param recordNumber the record number. 61 * 62 * @param entry the entry buffer to hold the record number. 63 */ 64 public static void recordNumberToEntry(long recordNumber, 65 DatabaseEntry entry) { 66 entry.setData(new byte[4], 0, 4); 67 DbCompat.setRecordNumber(entry, (int) recordNumber); 68 } 69} 70