001: /* Copyright (c) 1995-2000, The Hypersonic SQL Group.
002: * All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * Redistributions of source code must retain the above copyright notice, this
008: * list of conditions and the following disclaimer.
009: *
010: * Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * Neither the name of the Hypersonic SQL Group nor the names of its
015: * contributors may be used to endorse or promote products derived from this
016: * software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP,
022: * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
025: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
026: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
027: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
028: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: *
030: * This software consists of voluntary contributions made by many individuals
031: * on behalf of the Hypersonic SQL Group.
032: *
033: *
034: * For work added by the HSQL Development Group:
035: *
036: * Copyright (c) 2001-2005, The HSQL Development Group
037: * All rights reserved.
038: *
039: * Redistribution and use in source and binary forms, with or without
040: * modification, are permitted provided that the following conditions are met:
041: *
042: * Redistributions of source code must retain the above copyright notice, this
043: * list of conditions and the following disclaimer.
044: *
045: * Redistributions in binary form must reproduce the above copyright notice,
046: * this list of conditions and the following disclaimer in the documentation
047: * and/or other materials provided with the distribution.
048: *
049: * Neither the name of the HSQL Development Group nor the names of its
050: * contributors may be used to endorse or promote products derived from this
051: * software without specific prior written permission.
052: *
053: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
054: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
055: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
056: * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
057: * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
058: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
059: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
060: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
061: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
062: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
063: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
064: */
065:
066: package org.hsqldb;
067:
068: import java.io.IOException;
069:
070: import org.hsqldb.rowio.RowOutputInterface;
071:
072: /**
073: * Common MEMORY and TEXT table node implementation. Nodes are always in
074: * memory so an Object reference is used to access the other Nodes in the
075: * AVL tree.
076: *
077: * New class derived from the Hypersonic code
078: *
079: * @author Thomas Mueller (Hypersonic SQL Group)
080: * @version 1.7.2
081: * @since Hypersonic SQL
082: */
083: abstract class BaseMemoryNode extends Node {
084:
085: protected Node nLeft;
086: protected Node nRight;
087: protected Node nParent;
088:
089: void delete() {
090: iBalance = -2;
091: nLeft = nRight = nParent = null;
092: }
093:
094: Node getLeft() throws HsqlException {
095:
096: if (Trace.DOASSERT) {
097: Trace.doAssert(iBalance != -2);
098: }
099:
100: return nLeft;
101: }
102:
103: void setLeft(Node n) throws HsqlException {
104:
105: if (Trace.DOASSERT) {
106: Trace.doAssert(iBalance != -2);
107: }
108:
109: nLeft = n;
110: }
111:
112: boolean isLeft(Node node) throws HsqlException {
113: return nLeft == node;
114: }
115:
116: boolean isRight(Node node) throws HsqlException {
117: return nRight == node;
118: }
119:
120: Node getRight() throws HsqlException {
121:
122: if (Trace.DOASSERT) {
123: Trace.doAssert(iBalance != -2);
124: }
125:
126: return nRight;
127: }
128:
129: void setRight(Node n) throws HsqlException {
130:
131: if (Trace.DOASSERT) {
132: Trace.doAssert(iBalance != -2);
133: }
134:
135: nRight = n;
136: }
137:
138: Node getParent() throws HsqlException {
139:
140: if (Trace.DOASSERT) {
141: Trace.doAssert(iBalance != -2);
142: }
143:
144: return nParent;
145: }
146:
147: boolean isRoot() {
148: return nParent == null;
149: }
150:
151: void setParent(Node n) throws HsqlException {
152:
153: if (Trace.DOASSERT) {
154: Trace.doAssert(iBalance != -2);
155: }
156:
157: nParent = n;
158: }
159:
160: void setBalance(int b) throws HsqlException {
161:
162: if (Trace.DOASSERT) {
163: Trace.doAssert(iBalance != -2);
164: }
165:
166: iBalance = b;
167: }
168:
169: boolean isFromLeft() throws HsqlException {
170:
171: if (this .isRoot()) {
172: return true;
173: }
174:
175: Node parent = getParent();
176:
177: if (Trace.DOASSERT) {
178: Trace.doAssert(parent != null);
179: }
180:
181: return equals(parent.getLeft());
182: }
183:
184: boolean equals(Node n) {
185: return n == this ;
186: }
187:
188: void write(RowOutputInterface out) throws IOException {
189: }
190: }
|