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