KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > xni > XMLString


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2000-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) 1999, 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.xni;
59
60 /**
61  * This class is used as a structure to pass text contained in the underlying
62  * character buffer of the scanner. The offset and length fields allow the
63  * buffer to be re-used without creating new character arrays.
64  * <p>
65  * <strong>Note:</strong> Methods that are passed an XMLString structure
66  * should consider the contents read-only and not make any modifications
67  * to the contents of the buffer. The method receiving this structure
68  * should also not modify the offset and length if this structure (or
69  * the values of this structure) are passed to another method.
70  * <p>
71  * <strong>Note:</strong> Methods that are passed an XMLString structure
72  * are required to copy the information out of the buffer if it is to be
73  * saved for use beyond the scope of the method. The contents of the
74  * structure are volatile and the contents of the character buffer cannot
75  * be assured once the method that is passed this structure returns.
76  * Therefore, methods passed this structure should not save any reference
77  * to the structure or the character array contained in the structure.
78  *
79  * @author Eric Ye, IBM
80  * @author Andy Clark, IBM
81  *
82  * @version $Id: XMLString.java,v 1.4 2002/01/29 01:15:19 lehors Exp $
83  */

84 public class XMLString {
85
86     //
87
// Data
88
//
89

90     /** The character array. */
91     public char[] ch;
92
93     /** The offset into the character array. */
94     public int offset;
95
96     /** The length of characters from the offset. */
97     public int length;
98
99     //
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 JavaDoc 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 JavaDoc toString() {
226         return length > 0 ? new String JavaDoc(ch, offset, length) : "";
227     } // toString():String
228

229 } // class XMLString
230
Popular Tags