KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > inside > btree > BTreeNodeSearchResult


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.btree;
22
23 import com.db4o.*;
24 import com.db4o.foundation.ArgumentNullException;
25
26
27 /**
28  * @exclude
29  */

30 public class BTreeNodeSearchResult {
31     
32     private final Transaction _transaction;
33
34     private final BTree _btree;
35     
36     private final BTreePointer _pointer;
37     
38     private final boolean _foundMatch;
39     
40     BTreeNodeSearchResult(Transaction transaction, BTree btree, BTreePointer pointer, boolean foundMatch) {
41         if (null == transaction || null == btree) {
42             throw new ArgumentNullException();
43         }
44         _transaction = transaction;
45         _btree = btree;
46         _pointer = pointer;
47         _foundMatch = foundMatch;
48     }
49
50     BTreeNodeSearchResult(Transaction trans, YapReader nodeReader, BTree btree, BTreeNode node, int cursor, boolean foundMatch) {
51         this(trans, btree, pointerOrNull(trans, nodeReader, node, cursor), foundMatch);
52     }
53
54     BTreeNodeSearchResult(Transaction trans, YapReader nodeReader, BTree btree, Searcher searcher, BTreeNode node) {
55         this(trans,
56             btree,
57             nextPointerIf(pointerOrNull(trans, nodeReader, node, searcher.cursor()), searcher.isGreater()),
58             searcher.foundMatch());
59     }
60     
61     private static BTreePointer nextPointerIf(BTreePointer pointer, boolean condition) {
62         if (null == pointer) {
63             return null;
64         }
65         if (condition) {
66             return pointer.next();
67         }
68         return pointer;
69     }
70     
71     private static BTreePointer pointerOrNull(Transaction trans, YapReader nodeReader, BTreeNode node, int cursor) {
72         return node == null ? null : new BTreePointer(trans, nodeReader, node, cursor);
73     }
74     
75     public BTreeRange createIncludingRange(BTreeNodeSearchResult end) {
76         BTreePointer firstPointer = firstValidPointer();
77         BTreePointer endPointer = end._foundMatch ? end._pointer.next() : end.firstValidPointer();
78         return new BTreeRangeSingle(_transaction, _btree, firstPointer, endPointer);
79     }
80
81     private BTreePointer firstValidPointer() {
82         if (null == _pointer) {
83             return null;
84         }
85         if (_pointer.isValid()) {
86             return _pointer;
87         }
88         return _pointer.next();
89     }
90    
91 }
92
Popular Tags