/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/ package org.apache.tomcat.util.buf;
import java.io.Serializable;
import org.apache.tomcat.util.res.StringManager;
/** * Base class for the *Chunk implementation to reduce duplication.
*/ publicabstractclass AbstractChunk implements Cloneable, Serializable {
privatestaticfinallong serialVersionUID = 1L; protectedstaticfinal StringManager sm = StringManager.getManager(AbstractChunk.class);
/* * JVMs may limit the maximum array size to slightly less than Integer.MAX_VALUE. On markt's desktop the limit is * MAX_VALUE - 2. Comments in the JRE source code for ArrayList and other classes indicate that it may be as low as * MAX_VALUE - 8 on some systems.
*/ publicstaticfinalint ARRAY_MAX_SIZE = Integer.MAX_VALUE - 8;
/** * Maximum amount of data in this buffer. If -1 or not set, the buffer will grow to {{@link #ARRAY_MAX_SIZE}. Can be * smaller than the current buffer size ( which will not shrink ). When the limit is reached, the buffer will be * flushed (if out is set) or throw exception. * * @param limit The new limit
*/ publicvoid setLimit(int limit) { this.limit = limit;
}
publicint indexOf(String src, int srcOff, int srcLen, int myOff) { char first = src.charAt(srcOff);
// Look for first char int srcEnd = srcOff + srcLen;
mainLoop: for (int i = myOff + start; i <= (end - srcLen); i++) { if (getBufferElement(i) != first) { continue;
} // found first char, now look for a match int myPos = i + 1; for (int srcPos = srcOff + 1; srcPos < srcEnd;) { if (getBufferElement(myPos++) != src.charAt(srcPos++)) { continue mainLoop;
}
} return i - start; // found it
} return -1;
}
/** * Resets the chunk to an uninitialized state.
*/ publicvoid recycle() {
hasHashCode = false;
isSet = false;
start = 0;
end = 0;
}
@Override publicint hashCode() { if (hasHashCode) { return hashCode;
} int code = 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.