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.util.concurrent.atomic.AtomicInteger;
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 class BTreeHeader<K, V> implements Cloneable
51 {
52
53 private long revision = 0L;
54
55
56 private Long nbElems = 0L;
57
58
59 private long rootPageOffset;
60
61
62 private long btreeHeaderOffset = RecordManager.NO_PAGE;
63
64
65
66 private Page<K, V> rootPage;
67
68
69 private AtomicInteger nbUsers = new AtomicInteger( 0 );
70
71
72 private BTree<K, V> btree;
73
74
75
76
77
78 public BTreeHeader()
79 {
80 }
81
82
83
84
85
86 public long getBTreeInfoOffset()
87 {
88 return ( ( PersistedBTree<K, V> ) btree ).getBtreeInfoOffset();
89 }
90
91
92
93
94
95 public long getBTreeHeaderOffset()
96 {
97 return btreeHeaderOffset;
98 }
99
100
101
102
103
104
105
106 public BTreeHeader<K, V> clone()
107 {
108 try
109 {
110 BTreeHeader<K, V> copy = ( BTreeHeader<K, V> ) super.clone();
111
112 return copy;
113 }
114 catch ( CloneNotSupportedException cnse )
115 {
116 return null;
117 }
118 }
119
120
121
122
123
124
125 BTreeHeader<K, V> copy()
126 {
127 BTreeHeader<K, V> copy = clone();
128
129
130 copy.rootPage = null;
131 copy.rootPageOffset = -1L;
132 copy.btreeHeaderOffset = -1L;
133 copy.nbUsers.set( 0 );
134
135 return copy;
136 }
137
138
139
140
141
142
143
144 void setBTreeHeaderOffset( long btreeHeaderOffset )
145 {
146 this.btreeHeaderOffset = btreeHeaderOffset;
147 }
148
149
150
151
152
153 public long getRootPageOffset()
154 {
155 return rootPageOffset;
156 }
157
158
159
160
161
162
163
164 void setRootPageOffset( long rootPageOffset )
165 {
166 this.rootPageOffset = rootPageOffset;
167 }
168
169
170
171
172
173 public long getRevision()
174 {
175 return revision;
176 }
177
178
179
180
181
182
183
184 void setRevision( long revision )
185 {
186 this.revision = revision;
187 }
188
189
190
191
192
193 public long getNbElems()
194 {
195 return nbElems;
196 }
197
198
199
200
201
202 void setNbElems( long nbElems )
203 {
204 this.nbElems = nbElems;
205 }
206
207
208
209
210
211 void incrementNbElems()
212 {
213 nbElems++;
214 }
215
216
217
218
219
220 void decrementNbElems()
221 {
222 nbElems--;
223 }
224
225
226
227
228
229
230 Page<K, V> getRootPage()
231 {
232 return rootPage;
233 }
234
235
236
237
238
239
240 void setRootPage( Page<K, V> rootPage )
241 {
242 this.rootPage = rootPage;
243 this.rootPageOffset = ( ( AbstractPage<K, V> ) rootPage ).getOffset();
244 }
245
246
247
248
249
250
251
252 int getNbUsers()
253 {
254 return nbUsers.get();
255 }
256
257
258
259
260
261 void incrementNbUsers()
262 {
263 nbUsers.incrementAndGet();
264 }
265
266
267
268
269
270 void decrementNbUsers()
271 {
272 nbUsers.decrementAndGet();
273 }
274
275
276
277
278
279 BTree<K, V> getBtree()
280 {
281 return btree;
282 }
283
284
285
286
287
288
289
290 void setBtree( BTree<K, V> btree )
291 {
292 this.btree = btree;
293 }
294
295
296
297
298
299 public String toString()
300 {
301 StringBuilder sb = new StringBuilder();
302
303 sb.append( "B-treeHeader " );
304 sb.append( ", offset[0x" ).append( Long.toHexString( btreeHeaderOffset ) ).append( "]" );
305 sb.append( ", name[" ).append( btree.getName() ).append( "]" );
306 sb.append( ", revision[" ).append( revision ).append( "]" );
307 sb.append( ", btreeInfoOffset[0x" )
308 .append( Long.toHexString( ( ( PersistedBTree<K, V> ) btree ).getBtreeInfoOffset() ) ).append( "]" );
309 sb.append( ", rootPageOffset[0x" ).append( Long.toHexString( rootPageOffset ) ).append( "]" );
310 sb.append( ", nbElems[" ).append( nbElems ).append( "]" );
311 sb.append( ", nbUsers[" ).append( nbUsers.get() ).append( "]" );
312
313 return sb.toString();
314 }
315 }