KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > util > ShadowedSymbolTable


1 /*
2 * The Apache Software License, Version 1.1
3 *
4 *
5 * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
6 * reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. The end-user documentation included with the redistribution,
21 * if any, must include the following acknowledgment:
22 * "This product includes software developed by the
23 * Apache Software Foundation (http://www.apache.org/)."
24 * Alternately, this acknowledgment may appear in the software itself,
25 * if and wherever such third-party acknowledgments normally appear.
26 *
27 * 4. The names "Xerces" and "Apache Software Foundation" must
28 * not be used to endorse or promote products derived from this
29 * software without prior written permission. For written
30 * permission, please contact apache@apache.org.
31 *
32 * 5. Products derived from this software may not be called "Apache",
33 * nor may "Apache" appear in their name, without prior written
34 * permission of the Apache Software Foundation.
35 *
36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 * SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This software consists of voluntary contributions made by many
51 * individuals on behalf of the Apache Software Foundation and was
52 * originally based on software copyright (c) 2002, International
53 * Business Machines, Inc., http://www.apache.org. For more
54 * information on the Apache Software Foundation, please see
55 * <http://www.apache.org/>.
56 */

57
58 package com.sun.org.apache.xerces.internal.util;
59
60
61 /**
62  * Shadowed symbol table.
63  *
64  * The table has a reference to the main symbol table and is
65  * not allowed to add new symbols to the main symbol table.
66  * New symbols are added to the shadow symbol table and are local
67  * to the component using this table.
68  *
69  * @author Andy Clark IBM
70  * @version $Id: ShadowedSymbolTable.java,v 1.2 2002/08/09 15:18:19 neilg Exp $
71  */

72
73 public final class ShadowedSymbolTable
74 extends SymbolTable {
75
76     //
77
// Data
78
//
79

80     /** Main symbol table. */
81     protected SymbolTable fSymbolTable;
82
83     //
84
// Constructors
85
//
86

87     /** Constructs a shadow of the specified symbol table. */
88     public ShadowedSymbolTable(SymbolTable symbolTable) {
89         fSymbolTable = symbolTable;
90     } // <init>(SymbolTable)
91

92     //
93
// SymbolTable methods
94
//
95

96     /**
97      * Adds the specified symbol to the symbol table and returns a
98      * reference to the unique symbol. If the symbol already exists,
99      * the previous symbol reference is returned instead, in order
100      * guarantee that symbol references remain unique.
101      *
102      * @param symbol The new symbol.
103      */

104     public String JavaDoc addSymbol(String JavaDoc symbol) {
105
106         if (fSymbolTable.containsSymbol(symbol)) {
107             return fSymbolTable.addSymbol(symbol);
108         }
109         return super.addSymbol(symbol);
110
111     } // addSymbol(String)
112

113     /**
114      * Adds the specified symbol to the symbol table and returns a
115      * reference to the unique symbol. If the symbol already exists,
116      * the previous symbol reference is returned instead, in order
117      * guarantee that symbol references remain unique.
118      *
119      * @param buffer The buffer containing the new symbol.
120      * @param offset The offset into the buffer of the new symbol.
121      * @param length The length of the new symbol in the buffer.
122      */

123     public String JavaDoc addSymbol(char[] buffer, int offset, int length) {
124
125         if (fSymbolTable.containsSymbol(buffer, offset, length)) {
126             return fSymbolTable.addSymbol(buffer, offset, length);
127         }
128         return super.addSymbol(buffer, offset, length);
129
130     } // addSymbol(char[],int,int):String
131

132     /**
133      * Returns a hashcode value for the specified symbol. The value
134      * returned by this method must be identical to the value returned
135      * by the <code>hash(char[],int,int)</code> method when called
136      * with the character array that comprises the symbol string.
137      *
138      * @param symbol The symbol to hash.
139      */

140     public int hash(String JavaDoc symbol) {
141         return fSymbolTable.hash(symbol);
142     } // hash(String):int
143

144     /**
145      * Returns a hashcode value for the specified symbol information.
146      * The value returned by this method must be identical to the value
147      * returned by the <code>hash(String)</code> method when called
148      * with the string object created from the symbol information.
149      *
150      * @param buffer The character buffer containing the symbol.
151      * @param offset The offset into the character buffer of the start
152      * of the symbol.
153      * @param length The length of the symbol.
154      */

155     public int hash(char[] buffer, int offset, int length) {
156         return fSymbolTable.hash(buffer, offset, length);
157     } // hash(char[],int,int):int
158

159 } // class ShadowedSymbolTable
160
Popular Tags