1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 11:55:40 +02:00

Code streamlining.

Change-Id: I773eb373e6397260af6fd3815f1b16815500dabd
This commit is contained in:
Sergey Prigogin 2016-05-18 17:16:55 -07:00
parent 4376bec698
commit 2b3ab14082
3 changed files with 45 additions and 50 deletions

View file

@ -6,22 +6,19 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX - Initial API and implementation
* QNX - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom;
import org.eclipse.core.runtime.CoreException;
/**
* @author Doug Schaefer
*
*/
public interface IPDOMVisitor {
/**
* Walk the nodes in a PDOM. Return true to visit the children of
* this node, or false to skip to the next sibling of this node.
* Walks the nodes in a PDOM. Returns true to visit the children of
* the node, or false to skip to the next sibling of this node.
* Throw CoreException to stop the visit.
*
* @param node being visited
@ -36,5 +33,4 @@ public interface IPDOMVisitor {
* @throws CoreException
*/
public void leave(IPDOMNode node) throws CoreException;
}

View file

@ -47,7 +47,7 @@ public class BTree {
/**
* Constructor.
*
* @param db the database containing the btree
* @param db the database containing the B-tree
* @param rootPointer offset into database of the pointer to the root node
*/
public BTree(Database db, long rootPointer, int degree, IBTreeComparator cmp) {
@ -60,8 +60,8 @@ public class BTree {
this.DEGREE = degree;
this.MIN_RECORDS = DEGREE - 1;
this.MAX_RECORDS = 2*DEGREE - 1;
this.MAX_CHILDREN = 2*DEGREE;
this.MAX_RECORDS = 2 * DEGREE - 1;
this.MAX_CHILDREN = 2 * DEGREE;
this.OFFSET_CHILDREN = MAX_RECORDS * Database.INT_SIZE;
this.MEDIAN_RECORD = DEGREE - 1;
}
@ -157,7 +157,7 @@ public class BTree {
}
}
// Binary search to find the insert point.
// Binary search to find the insertion point.
int lower= 0;
int upper= MAX_RECORDS - 1;
while (lower < upper && getRecord(chunk, node, upper - 1) == 0) {
@ -165,7 +165,7 @@ public class BTree {
}
while (lower < upper) {
int middle= (lower + upper) / 2;
int middle= (lower + upper) >>> 1;
long checkRec= getRecord(chunk, node, middle);
if (checkRec == 0) {
upper= middle;
@ -414,7 +414,7 @@ public class BTree {
}
/**
* Merge node 'src' onto the right side of node 'dst' using node
* Merges node 'src' onto the right side of node 'dst' using node
* 'keyProvider' as the source of the median key. Bounds checking is not
* performed.
* @param src the key to merge into dst
@ -446,7 +446,7 @@ public class BTree {
}
/**
* Insert the key and (its predecessor) child at the left side of the specified node. Bounds checking
* Inserts the key and (its predecessor) child at the left side of the specified node. Bounds checking
* is not performed.
* @param node the node to prepend to
* @param key the new leftmost (least) key
@ -459,7 +459,7 @@ public class BTree {
}
/**
* Insert the key and (its successor) child at the right side of the specified node. Bounds
* Inserts the key and (its successor) child at the right side of the specified node. Bounds
* checking is not performed.
* @param node
* @param key
@ -471,7 +471,7 @@ public class BTree {
}
/**
* Overwrite a section of the specified node (dst) with the specified section of the source
* Overwrites a section of the specified node (dst) with the specified section of the source
* node. Bounds checking is not performed. To allow just copying of the final child (which has
* no corresponding key) the routine behaves as though there were a corresponding key existing
* with value zero.<p>
@ -500,7 +500,7 @@ public class BTree {
}
/**
* Delete a section of node content - (key, (predecessor)child) pairs. Bounds checking
* Deletes a section of node content - (key, (predecessor)child) pairs. Bounds checking
* is not performed. To allow deletion of the final child (which has no corresponding key)
* the routine behaves as though there were a corresponding key existing with value zero.<p>
* Content is deleted and remaining content is moved leftward the appropriate amount.
@ -522,7 +522,7 @@ public class BTree {
}
/**
* Visit all nodes beginning when the visitor comparator
* Visits all nodes beginning when the visitor comparator
* returns >= 0 until the visitor visit returns falls.
*
* @param visitor
@ -539,9 +539,7 @@ public class BTree {
if (node == 0) {
return true;
}
if (visitor instanceof IBTreeVisitor2) {
((IBTreeVisitor2) visitor).preNode(node);
}
visitor.preNode(node);
try {
Chunk chunk = db.getChunk(node);
@ -553,7 +551,7 @@ public class BTree {
upper--;
}
while (lower < upper) {
int middle= (lower + upper) / 2;
int middle= (lower + upper) >>> 1;
long checkRec = getRecord(chunk, node, middle);
if (checkRec == 0) {
upper= middle;
@ -578,7 +576,7 @@ public class BTree {
if (compare > 0) {
// Start point is to the left.
return accept(getChild(chunk, node, i), visitor);
} else if (compare == 0) {
} else if (compare == 0) {
if (!accept(getChild(chunk, node, i), visitor))
return false;
if (!visitor.visit(record))
@ -587,25 +585,14 @@ public class BTree {
}
return accept(getChild(chunk, node, i), visitor);
} finally {
if (visitor instanceof IBTreeVisitor2) {
((IBTreeVisitor2) visitor).postNode(node);
}
visitor.postNode(node);
}
}
/*
* TODO: It would be good to move these into IBTreeVisitor and eliminate
* IBTreeVisitor2 if this is acceptable.
*/
private interface IBTreeVisitor2 extends IBTreeVisitor {
void preNode(long node) throws CoreException;
void postNode(long node) throws CoreException;
}
/**
* Debugging method for checking B-tree invariants
* @return the empty String if B-tree invariants hold, otherwise
* a human readable report
* Debugging method for checking B-tree invariants.
*
* @return the empty String if B-tree invariants hold, otherwise a human readable report
* @throws CoreException
*/
public String getInvariantsErrorReport() throws CoreException {
@ -618,7 +605,7 @@ public class BTree {
* A B-tree visitor for checking some B-tree invariants.
* Note ordering invariants are not checked here.
*/
private class InvariantsChecker implements IBTreeVisitor2 {
private class InvariantsChecker implements IBTreeVisitor {
boolean valid = true;
String msg = ""; //$NON-NLS-1$
Integer leafDepth;

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2012 QNX Software Systems and others.
* Copyright (c) 2005, 2015 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -20,21 +20,33 @@ import org.eclipse.core.runtime.CoreException;
*/
public interface IBTreeVisitor {
/**
* Compare the record against an internally held key. The comparison must be
* compatible with the one used for the btree.
* Compares the record against an internally held key. The comparison must be
* compatible with the one used for the B-tree.
* Used for visiting.
*
* @param record
* @return -1 if record < key, 0 if record == key, 1 if record > key
* @throws CoreException
*/
public abstract int compare(long record) throws CoreException;
public int compare(long record) throws CoreException;
/**
* Visit a given record and return whether to continue or not.
* @return <code>true</code> to continue the visit, <code>false</code> to abort it.
* @throws CoreException
* Visits a given record and returns whether to continue or not.
*
* @return {@code true} to continue the visit, {@code false} to abort it.
*/
public abstract boolean visit(long record) throws CoreException;
public boolean visit(long record) throws CoreException;
/**
* Called before visiting a node.
*
* @param record the node being visited
*/
public default void preNode(long record) throws CoreException {}
/**
* Called after visiting a node.
*
* @param record the node being visited
*/
public default void postNode(long record) throws CoreException {}
}