1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.mavibot.btree;
21
22
23 import java.io.IOException;
24 import java.nio.ByteBuffer;
25
26 import org.apache.directory.mavibot.btree.exception.SerializerCreationException;
27 import org.apache.directory.mavibot.btree.serializer.AbstractElementSerializer;
28 import org.apache.directory.mavibot.btree.serializer.BufferHandler;
29 import org.apache.directory.mavibot.btree.serializer.LongArraySerializer;
30 import org.apache.directory.mavibot.btree.serializer.LongSerializer;
31
32
33
34
35
36
37
38
39 class RevisionOffsetSerializer extends AbstractElementSerializer<RevisionOffset>
40 {
41
42 final static RevisionOffsetSerializer INSTANCE = new RevisionOffsetSerializer();
43
44
45
46
47 private RevisionOffsetSerializer()
48 {
49 super( RevisionOffsetComparator.INSTANCE );
50 }
51
52
53
54
55
56
57
58
59 static RevisionOffset deserialize( byte[] in )
60 {
61 return deserialize( in, 0 );
62 }
63
64
65
66
67
68
69
70
71
72 static RevisionOffset deserialize( byte[] in, int start )
73 {
74
75 if ( ( in == null ) || ( in.length < 8 + start ) )
76 {
77 throw new SerializerCreationException( "Cannot extract a RevisionOffset from a buffer with not enough bytes" );
78 }
79
80 long revision = LongSerializer.deserialize( in, start );
81
82 try
83 {
84 long[] offsets = LongArraySerializer.INSTANCE.fromBytes( in, 8 + start );
85
86 RevisionOffset RevisionOffset = new RevisionOffset( revision, offsets );
87
88 return RevisionOffset;
89 }
90 catch( IOException e )
91 {
92 throw new RuntimeException( e );
93 }
94 }
95
96
97
98
99
100
101
102
103 public RevisionOffset fromBytes( byte[] in )
104 {
105 return deserialize( in, 0 );
106 }
107
108
109
110
111
112
113
114
115
116 public RevisionOffset fromBytes( byte[] in, int start )
117 {
118
119 if ( ( in == null ) || ( in.length < 8 + start ) )
120 {
121 throw new SerializerCreationException( "Cannot extract a RevisionOffset from a buffer with not enough bytes" );
122 }
123
124 return deserialize( in, start );
125 }
126
127
128
129
130
131 @Override
132 public byte[] serialize( RevisionOffset RevisionOffset )
133 {
134 if ( RevisionOffset == null )
135 {
136 throw new SerializerCreationException( "The RevisionOffset instance should not be null " );
137 }
138
139 byte[] result = null;
140
141 byte[] offsets = LongArraySerializer.INSTANCE.serialize( RevisionOffset.getOffsets() );
142 result = new byte[8 + offsets.length];
143 LongSerializer.serialize( result, 0, RevisionOffset.getRevision() );
144
145 System.arraycopy( offsets, 0, result, 8, offsets.length );
146
147 return result;
148 }
149
150
151
152
153
154
155
156
157
158
159 static byte[] serialize( byte[] buffer, int start, RevisionOffset RevisionOffset )
160 {
161 LongSerializer.serialize( buffer, start, RevisionOffset.getRevision() );
162
163 byte[] offsets = LongArraySerializer.INSTANCE.serialize( RevisionOffset.getOffsets() );
164
165 System.arraycopy( offsets, 0, buffer, 8 + start, offsets.length );
166
167 return buffer;
168 }
169
170
171
172
173
174 @Override
175 public RevisionOffset deserialize( BufferHandler bufferHandler ) throws IOException
176 {
177 byte[] revisionBytes = bufferHandler.read( 8 );
178 long revision = LongSerializer.deserialize( revisionBytes );
179
180 long[] offsets = LongArraySerializer.INSTANCE.deserialize( bufferHandler );
181
182 return new RevisionOffset( revision, offsets );
183 }
184
185
186
187
188
189 @Override
190 public RevisionOffset deserialize( ByteBuffer buffer ) throws IOException
191 {
192
193 long revision = buffer.getLong();
194
195 long[] offsets = LongArraySerializer.INSTANCE.deserialize( buffer );
196
197 return new RevisionOffset( revision, offsets );
198 }
199 }