package com.sleepycat.bind;
import com.sleepycat.compat.DbCompat;
import com.sleepycat.je.DatabaseEntry;
import de.ovgu.cide.jakutil.*;
/** 
 * An <code>EntryBinding</code> that treats a record number key entry as a
 * <code>Long</code> key object.
 * <p>
 * Record numbers are returned as <code>Long</code> objects, although on input
 * any <code>Number</code> object may be used.
 * </p>
 * @author Mark Hayes
 */
public class RecordNumberBinding implements EntryBinding {
  /** 
 * Creates a byte array binding.
 */
  public RecordNumberBinding(){
  }
  public Object entryToObject(  DatabaseEntry entry){
    return new Long(entryToRecordNumber(entry));
  }
  public void objectToEntry(  Object object,  DatabaseEntry entry){
    recordNumberToEntry(((Number)object).longValue(),entry);
  }
  /** 
 * Utility method for use by bindings to translate a entry buffer to an
 * record number integer.
 * @param entrythe entry buffer.
 * @return the record number.
 */
  public static long entryToRecordNumber(  DatabaseEntry entry){
    return DbCompat.getRecordNumber(entry) & 0xFFFFFFFFL;
  }
  /** 
 * Utility method for use by bindings to translate a record number integer
 * to a entry buffer.
 * @param recordNumberthe record number.
 * @param entrythe entry buffer to hold the record number.
 */
  public static void recordNumberToEntry(  long recordNumber,  DatabaseEntry entry){
    entry.setData(new byte[4],0,4);
    DbCompat.setRecordNumber(entry,(int)recordNumber);
  }
}
