001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 2000-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) 1999, 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.xni;
059:
060: /**
061: * This class is used as a structure to pass text contained in the underlying
062: * character buffer of the scanner. The offset and length fields allow the
063: * buffer to be re-used without creating new character arrays.
064: * <p>
065: * <strong>Note:</strong> Methods that are passed an XMLString structure
066: * should consider the contents read-only and not make any modifications
067: * to the contents of the buffer. The method receiving this structure
068: * should also not modify the offset and length if this structure (or
069: * the values of this structure) are passed to another method.
070: * <p>
071: * <strong>Note:</strong> Methods that are passed an XMLString structure
072: * are required to copy the information out of the buffer if it is to be
073: * saved for use beyond the scope of the method. The contents of the
074: * structure are volatile and the contents of the character buffer cannot
075: * be assured once the method that is passed this structure returns.
076: * Therefore, methods passed this structure should not save any reference
077: * to the structure or the character array contained in the structure.
078: *
079: * @author Eric Ye, IBM
080: * @author Andy Clark, IBM
081: *
082: * @version $Id: XMLString.java,v 1.2 2006/04/01 06:01:45 jeffsuttor Exp $
083: */
084: public class XMLString {
085:
086: //
087: // Data
088: //
089:
090: /** The character array. */
091: public char[] ch;
092:
093: /** The offset into the character array. */
094: public int offset;
095:
096: /** The length of characters from the offset. */
097: public int length;
098:
099: //
100: // Constructors
101: //
102:
103: /** Default constructor. */
104: public XMLString() {
105: } // <init>()
106:
107: /**
108: * Constructs an XMLString structure preset with the specified
109: * values.
110: *
111: * @param ch The character array.
112: * @param offset The offset into the character array.
113: * @param length The length of characters from the offset.
114: */
115: public XMLString(char[] ch, int offset, int length) {
116: setValues(ch, offset, length);
117: } // <init>(char[],int,int)
118:
119: /**
120: * Constructs an XMLString structure with copies of the values in
121: * the given structure.
122: * <p>
123: * <strong>Note:</strong> This does not copy the character array;
124: * only the reference to the array is copied.
125: *
126: * @param string The XMLString to copy.
127: */
128: public XMLString(XMLString string) {
129: setValues(string);
130: } // <init>(XMLString)
131:
132: //
133: // Public methods
134: //
135:
136: /**
137: * Initializes the contents of the XMLString structure with the
138: * specified values.
139: *
140: * @param ch The character array.
141: * @param offset The offset into the character array.
142: * @param length The length of characters from the offset.
143: */
144: public void setValues(char[] ch, int offset, int length) {
145: this .ch = ch;
146: this .offset = offset;
147: this .length = length;
148: } // setValues(char[],int,int)
149:
150: /**
151: * Initializes the contents of the XMLString structure with copies
152: * of the given string structure.
153: * <p>
154: * <strong>Note:</strong> This does not copy the character array;
155: * only the reference to the array is copied.
156: *
157: * @param s
158: */
159: public void setValues(XMLString s) {
160: setValues(s.ch, s.offset, s.length);
161: } // setValues(XMLString)
162:
163: /** Resets all of the values to their defaults. */
164: public void clear() {
165: this .ch = null;
166: this .offset = 0;
167: this .length = -1;
168: } // clear()
169:
170: /**
171: * Returns true if the contents of this XMLString structure and
172: * the specified array are equal.
173: *
174: * @param ch The character array.
175: * @param offset The offset into the character array.
176: * @param length The length of characters from the offset.
177: */
178: public boolean equals(char[] ch, int offset, int length) {
179: if (ch == null) {
180: return false;
181: }
182: if (this .length != length) {
183: return false;
184: }
185:
186: for (int i = 0; i < length; i++) {
187: if (this .ch[this .offset + i] != ch[offset + i]) {
188: return false;
189: }
190: }
191: return true;
192: } // equals(char[],int,int):boolean
193:
194: /**
195: * Returns true if the contents of this XMLString structure and
196: * the specified string are equal.
197: *
198: * @param s The string to compare.
199: */
200: public boolean equals(String s) {
201: if (s == null) {
202: return false;
203: }
204: if (length != s.length()) {
205: return false;
206: }
207:
208: // is this faster than call s.toCharArray first and compare the
209: // two arrays directly, which will possibly involve creating a
210: // new char array object.
211: for (int i = 0; i < length; i++) {
212: if (ch[offset + i] != s.charAt(i)) {
213: return false;
214: }
215: }
216:
217: return true;
218: } // equals(String):boolean
219:
220: //
221: // Object methods
222: //
223:
224: /** Returns a string representation of this object. */
225: public String toString() {
226: return length > 0 ? new String(ch, offset, length) : "";
227: } // toString():String
228:
229: } // class XMLString
|