Subversion Repositories Code-Repo

Rev

Blame | Last modification | View Log | RSS feed


// Internal node for the PRQuadTree
public class PRQuadTreeNodeInternal implements PRQuadTreeNode {
        // Node in each quadrant
        private Handle NW;
        private Handle NE;
        private Handle SW;
        private Handle SE;
        
        private Handle flyweight;
        
        private NodeSerializer serializer;

        // Constructor to initialize the node with flyweights
        public PRQuadTreeNodeInternal(Handle flyweight, NodeSerializer mem) {
                serializer = mem;
                // Initialize all subnodes with the flyweight
                NW = NE = SW = SE = flyweight;
                this.flyweight = flyweight;
        }
        
        // Queries if all subnodes are flyweights
        public boolean isEmpty() {
                return (NW == flyweight)&&(NE == flyweight)&&
                                (SW == flyweight)&&(SE == flyweight);
        }
        
        // Test if node contains other internal nodes
        public boolean containsAllLeavesOrFlyweight() {
                // Queries if all subnodes are either leaves or flyweights
                return (serializer.handleToNode(NW) instanceof PRQuadTreeNodeLeaf || serializer.handleToNode(NW) instanceof PRQuadTreeNodeFlyweight) &&
                                (serializer.handleToNode(NE) instanceof PRQuadTreeNodeLeaf || serializer.handleToNode(NE) instanceof PRQuadTreeNodeFlyweight) &&
                                (serializer.handleToNode(SW) instanceof PRQuadTreeNodeLeaf || serializer.handleToNode(SW) instanceof PRQuadTreeNodeFlyweight) &&
                                (serializer.handleToNode(SE) instanceof PRQuadTreeNodeLeaf || serializer.handleToNode(SE) instanceof PRQuadTreeNodeFlyweight);
        }
        
        // Returns the number of all records in all subleaves
        public int countOfAllLeafNodes() {
                int ret = 0;
                if (serializer.handleToNode(NW) instanceof PRQuadTreeNodeLeaf)
                        ret += ((PRQuadTreeNodeLeaf) serializer.handleToNode(NW)).getCount();
                if (serializer.handleToNode(NE) instanceof PRQuadTreeNodeLeaf)
                        ret += ((PRQuadTreeNodeLeaf) serializer.handleToNode(NE)).getCount();
                if (serializer.handleToNode(SW) instanceof PRQuadTreeNodeLeaf)
                        ret += ((PRQuadTreeNodeLeaf) serializer.handleToNode(SW)).getCount();
                if (serializer.handleToNode(SE) instanceof PRQuadTreeNodeLeaf)
                        ret += ((PRQuadTreeNodeLeaf) serializer.handleToNode(SE)).getCount();
                return ret;
        }
        
        // Returns the number of records in a node if it is a leaf node
        public int countOfLeafNode(PRQuadTreeNode node) {
                if (node instanceof PRQuadTreeNodeLeaf)
                        return ((PRQuadTreeNodeLeaf) node).getCount();
                else
                        return 0;
        }
        
        // Encapsulation functions
        public Handle getNW() {
                return NW;
        }
        public void setNW(Handle nW) {
                NW = nW;
        }
        public Handle getNE() {
                return NE;
        }
        public void setNE(Handle nE) {
                NE = nE;
        }
        public Handle getSW() {
                return SW;
        }
        public void setSW(Handle sW) {
                SW = sW;
        }
        public Handle getSE() {
                return SE;
        }
        public void setSE(Handle sE) {
                SE = sE;
        }
}