KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > inside > marshall > ArrayMarshaller1


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

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 JavaDoc 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 JavaDoc[] 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(); // length
53
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 JavaDoc read(YapArray arrayHandler, YapWriter reader) throws CorruptionException{
79         int linkOffSet = reader.preparePayloadRead();
80         Object JavaDoc 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 JavaDoc 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 JavaDoc writeNew(YapArray arrayHandler, Object JavaDoc 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