001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The names "Xerces" and "Apache Software Foundation" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation and was
052: * originally based on software copyright (c) 2002, International
053: * Business Machines, Inc., http://www.apache.org. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057:
058: package com.sun.xml.stream.xerces.util;
059:
060: /**
061: * Shadowed symbol table.
062: *
063: * The table has a reference to the main symbol table and is
064: * not allowed to add new symbols to the main symbol table.
065: * New symbols are added to the shadow symbol table and are local
066: * to the component using this table.
067: *
068: * @author Andy Clark IBM
069: * @version $Id: ShadowedSymbolTable.java,v 1.2 2006/04/01 06:01:40 jeffsuttor Exp $
070: */
071:
072: public final class ShadowedSymbolTable extends SymbolTable {
073:
074: //
075: // Data
076: //
077:
078: /** Main symbol table. */
079: protected SymbolTable fSymbolTable;
080:
081: //
082: // Constructors
083: //
084:
085: /** Constructs a shadow of the specified symbol table. */
086: public ShadowedSymbolTable(SymbolTable symbolTable) {
087: fSymbolTable = symbolTable;
088: } // <init>(SymbolTable)
089:
090: //
091: // SymbolTable methods
092: //
093:
094: /**
095: * Adds the specified symbol to the symbol table and returns a
096: * reference to the unique symbol. If the symbol already exists,
097: * the previous symbol reference is returned instead, in order
098: * guarantee that symbol references remain unique.
099: *
100: * @param symbol The new symbol.
101: */
102: public String addSymbol(String symbol) {
103:
104: if (fSymbolTable.containsSymbol(symbol)) {
105: return fSymbolTable.addSymbol(symbol);
106: }
107: return super .addSymbol(symbol);
108:
109: } // addSymbol(String)
110:
111: /**
112: * Adds the specified symbol to the symbol table and returns a
113: * reference to the unique symbol. If the symbol already exists,
114: * the previous symbol reference is returned instead, in order
115: * guarantee that symbol references remain unique.
116: *
117: * @param buffer The buffer containing the new symbol.
118: * @param offset The offset into the buffer of the new symbol.
119: * @param length The length of the new symbol in the buffer.
120: */
121: public String addSymbol(char[] buffer, int offset, int length) {
122:
123: if (fSymbolTable.containsSymbol(buffer, offset, length)) {
124: return fSymbolTable.addSymbol(buffer, offset, length);
125: }
126: return super .addSymbol(buffer, offset, length);
127:
128: } // addSymbol(char[],int,int):String
129:
130: /**
131: * Returns a hashcode value for the specified symbol. The value
132: * returned by this method must be identical to the value returned
133: * by the <code>hash(char[],int,int)</code> method when called
134: * with the character array that comprises the symbol string.
135: *
136: * @param symbol The symbol to hash.
137: */
138: public int hash(String symbol) {
139: return fSymbolTable.hash(symbol);
140: } // hash(String):int
141:
142: /**
143: * Returns a hashcode value for the specified symbol information.
144: * The value returned by this method must be identical to the value
145: * returned by the <code>hash(String)</code> method when called
146: * with the string object created from the symbol information.
147: *
148: * @param buffer The character buffer containing the symbol.
149: * @param offset The offset into the character buffer of the start
150: * of the symbol.
151: * @param length The length of the symbol.
152: */
153: public int hash(char[] buffer, int offset, int length) {
154: return fSymbolTable.hash(buffer, offset, length);
155: } // hash(char[],int,int):int
156:
157: } // class ShadowedSymbolTable
|