1 21 package com.db4o.inside.btree; 22 23 import com.db4o.*; 24 import com.db4o.foundation.*; 25 import com.db4o.inside.ix.*; 26 27 28 31 public class FieldIndexKeyHandler implements Indexable4{ 32 33 private final Indexable4 _valueHandler; 34 35 private final YInt _parentIdHandler; 36 37 public FieldIndexKeyHandler(YapStream stream, Indexable4 delegate_) { 38 _parentIdHandler = new IDHandler(stream); 39 _valueHandler = delegate_; 40 } 41 42 public Object comparableObject(Transaction trans, Object indexEntry) { 43 throw new NotImplementedException(); 44 } 45 46 public int linkLength() { 47 return _valueHandler.linkLength() + YapConst.INT_LENGTH; 48 } 49 50 public Object readIndexEntry(YapReader a_reader) { 51 int parentID = readParentID(a_reader); 53 Object objPart = _valueHandler.readIndexEntry(a_reader); 54 if (parentID < 0){ 55 objPart = null; 56 parentID = - parentID; 57 } 58 return new FieldIndexKey(parentID, objPart); 59 } 60 61 private int readParentID(YapReader a_reader) { 62 return ((Integer )_parentIdHandler.readIndexEntry(a_reader)).intValue(); 63 } 64 65 public void writeIndexEntry(YapReader writer, Object obj) { 66 FieldIndexKey composite = (FieldIndexKey)obj; 67 int parentID = composite.parentID(); 68 Object value = composite.value(); 69 if (value == null){ 70 parentID = - parentID; 71 } 72 _parentIdHandler.write(parentID, writer); 73 _valueHandler.writeIndexEntry(writer, composite.value()); 74 } 75 76 public YapComparable prepareComparison(Object obj) { 77 FieldIndexKey composite = (FieldIndexKey)obj; 78 _valueHandler.prepareComparison(composite.value()); 79 _parentIdHandler.prepareComparison(composite.parentID()); 80 return this; 81 } 82 83 public int compareTo(Object obj) { 84 if (null == obj) { 85 throw new ArgumentNullException(); 86 } 87 FieldIndexKey composite = (FieldIndexKey)obj; 88 int delegateResult = _valueHandler.compareTo(composite.value()); 89 if(delegateResult != 0 ){ 90 return delegateResult; 91 } 92 return _parentIdHandler.compareTo(composite.parentID()); 93 } 94 95 public boolean isEqual(Object obj) { 96 throw new NotImplementedException(); 97 } 98 99 public boolean isGreater(Object obj) { 100 throw new NotImplementedException(); 101 } 102 103 public boolean isSmaller(Object obj) { 104 throw new NotImplementedException(); 105 } 106 107 public Object current() { 108 return new FieldIndexKey(_parentIdHandler.currentInt(), _valueHandler.current()); 109 } 110 111 public void defragIndexEntry(ReaderPair readers) { 112 _parentIdHandler.defragIndexEntry(readers); 113 _valueHandler.defragIndexEntry(readers); 114 } 115 } 116 117 | Popular Tags |