1 21 package com.db4o.inside.marshall; 22 23 import com.db4o.*; 24 25 26 class ArrayMarshaller1 extends ArrayMarshaller{ 27 28 public void calculateLengths(Transaction trans, ObjectHeaderAttributes header, YapArray arrayHandler, Object obj, boolean topLevel){ 29 30 TypeHandler4 typeHandler = arrayHandler.i_handler; 31 32 if(topLevel){ 33 header.addBaseLength(arrayHandler.linkLength()); 34 } else{ 35 header.addPayLoadLength(arrayHandler.linkLength()); 36 } 37 38 if(typeHandler.hasFixedLength()){ 39 header.addPayLoadLength(arrayHandler.objectLength(obj)); 40 }else{ 41 header.addPayLoadLength(arrayHandler.ownLength(obj)); 42 Object [] all = arrayHandler.allElements(obj); 43 for (int i = 0; i < all.length; i++) { 44 typeHandler.calculateLengths(trans, header, false, all[i], true); 45 } 46 } 47 } 48 49 public void deleteEmbedded(YapArray arrayHandler, YapWriter reader) { 50 51 int address = reader.readInt(); 52 reader.readInt(); if (address <= 0) { 54 return; 55 } 56 57 int linkOffSet = reader._offset; 58 59 Transaction trans = reader.getTransaction(); 60 TypeHandler4 typeHandler = arrayHandler.i_handler; 61 62 if (reader.cascadeDeletes() > 0 && typeHandler instanceof YapClass) { 63 reader._offset = address; 64 if (Deploy.debug) { 65 reader.readBegin(arrayHandler.identifier()); 66 } 67 reader.setCascadeDeletes(reader.cascadeDeletes()); 68 for (int i = arrayHandler.elementCount(trans, reader); i > 0; i--) { 69 arrayHandler.i_handler.deleteEmbedded(_family, reader); 70 } 71 } 72 73 if(linkOffSet > 0){ 74 reader._offset = linkOffSet; 75 } 76 } 77 78 public Object read(YapArray arrayHandler, YapWriter reader) throws CorruptionException{ 79 int linkOffSet = reader.preparePayloadRead(); 80 Object array = arrayHandler.read1(_family, reader); 81 reader._offset = linkOffSet; 82 return array; 83 } 84 85 public void readCandidates(YapArray arrayHandler, YapReader reader, QCandidates candidates) { 86 reader._offset = reader.readInt(); 87 arrayHandler.read1Candidates(_family, reader, candidates); 88 } 89 90 public final Object readQuery(YapArray arrayHandler, Transaction trans, YapReader reader) throws CorruptionException{ 91 reader._offset = reader.readInt(); 92 return arrayHandler.read1Query(trans,_family, reader); 93 } 94 95 public Object writeNew(YapArray arrayHandler, Object obj, boolean restoreLinkOffset, YapWriter writer) { 96 if (obj == null) { 97 writer.writeEmbeddedNull(); 98 return null; 99 } 100 int length = arrayHandler.objectLength(obj); 101 int linkOffset = writer.reserveAndPointToPayLoadSlot(length); 102 arrayHandler.writeNew1(obj, writer); 103 if(restoreLinkOffset){ 104 writer._offset = linkOffset; 105 } 106 return obj; 107 } 108 109 protected YapReader prepareIDReader(Transaction trans,YapReader reader) { 110 reader._offset = reader.readInt(); 111 return reader; 112 } 113 114 public void defragIDs(YapArray arrayHandler,ReaderPair readers) { 115 int offset=readers.preparePayloadRead(); 116 arrayHandler.defrag1(_family, readers); 117 readers.offset(offset); 118 } 119 } 120 | Popular Tags |