You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2006/09/24 01:54:48 UTC
svn commit: r449335 - in
/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf:
ByteChunk.java CharChunk.java
Author: markt
Date: Sat Sep 23 16:54:47 2006
New Revision: 449335
URL: http://svn.apache.org/viewvc?view=rev&rev=449335
Log:
Tabs to 8 spaces. No functional change.
Modified:
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/ByteChunk.java
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/CharChunk.java
Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/ByteChunk.java
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/ByteChunk.java?view=diff&rev=449335&r1=449334&r2=449335
==============================================================================
--- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/ByteChunk.java (original)
+++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/ByteChunk.java Sat Sep 23 16:54:47 2006
@@ -90,8 +90,8 @@
// --------------------
/** Default encoding used to convert to strings. It should be UTF8,
- as most standards seem to converge, but the servlet API requires
- 8859_1, and this object is used mostly for servlets.
+ as most standards seem to converge, but the servlet API requires
+ 8859_1, and this object is used mostly for servlets.
*/
public static final String DEFAULT_CHARACTER_ENCODING="ISO-8859-1";
@@ -121,48 +121,48 @@
}
public ByteChunk( int initial ) {
- allocate( initial, -1 );
+ allocate( initial, -1 );
}
//--------------------
public ByteChunk getClone() {
- try {
- return (ByteChunk)this.clone();
- } catch( Exception ex) {
- return null;
- }
+ try {
+ return (ByteChunk)this.clone();
+ } catch( Exception ex) {
+ return null;
+ }
}
public boolean isNull() {
- return ! isSet; // buff==null;
+ return ! isSet; // buff==null;
}
/**
* Resets the message buff to an uninitialized state.
*/
public void recycle() {
- // buff = null;
- enc=null;
- start=0;
- end=0;
- isSet=false;
+ // buff = null;
+ enc=null;
+ start=0;
+ end=0;
+ isSet=false;
}
public void reset() {
- buff=null;
+ buff=null;
}
// -------------------- Setup --------------------
public void allocate( int initial, int limit ) {
- isOutput=true;
- if( buff==null || buff.length < initial ) {
- buff=new byte[initial];
- }
- this.limit=limit;
- start=0;
- end=0;
- isSet=true;
+ isOutput=true;
+ if( buff==null || buff.length < initial ) {
+ buff=new byte[initial];
+ }
+ this.limit=limit;
+ start=0;
+ end=0;
+ isSet=true;
}
/**
@@ -184,7 +184,7 @@
}
public void setEncoding( String enc ) {
- this.enc=enc;
+ this.enc=enc;
}
public String getEncoding() {
if (enc == null)
@@ -196,14 +196,14 @@
* Returns the message bytes.
*/
public byte[] getBytes() {
- return getBuffer();
+ return getBuffer();
}
/**
* Returns the message bytes.
*/
public byte[] getBuffer() {
- return buff;
+ return buff;
}
/**
@@ -211,16 +211,16 @@
* For output this is the end of the buffer.
*/
public int getStart() {
- return start;
+ return start;
}
public int getOffset() {
- return start;
+ return start;
}
public void setOffset(int off) {
if (end < off ) end=off;
- start=off;
+ start=off;
}
/**
@@ -228,7 +228,7 @@
* XXX need to clean this up
*/
public int getLength() {
- return end-start;
+ return end-start;
}
/** Maximum amount of data in this buffer.
@@ -239,11 +239,11 @@
* or throw exception.
*/
public void setLimit(int limit) {
- this.limit=limit;
+ this.limit=limit;
}
public int getLimit() {
- return limit;
+ return limit;
}
/**
@@ -254,20 +254,20 @@
}
/** When the buffer is full, write the data to the output channel.
- * Also used when large amount of data is appended.
+ * Also used when large amount of data is appended.
*
* If not set, the buffer will grow to the limit.
*/
public void setByteOutputChannel(ByteOutputChannel out) {
- this.out=out;
+ this.out=out;
}
public int getEnd() {
- return end;
+ return end;
}
public void setEnd( int i ) {
- end=i;
+ end=i;
}
// -------------------- Adding data to the buffer --------------------
@@ -277,44 +277,44 @@
* @throws IOException
*/
public void append( char c )
- throws IOException
+ throws IOException
{
- append( (byte)c);
+ append( (byte)c);
}
public void append( byte b )
- throws IOException
+ throws IOException
{
- makeSpace( 1 );
+ makeSpace( 1 );
- // couldn't make space
- if( limit >0 && end >= limit ) {
- flushBuffer();
- }
- buff[end++]=b;
+ // couldn't make space
+ if( limit >0 && end >= limit ) {
+ flushBuffer();
+ }
+ buff[end++]=b;
}
public void append( ByteChunk src )
- throws IOException
+ throws IOException
{
- append( src.getBytes(), src.getStart(), src.getLength());
+ append( src.getBytes(), src.getStart(), src.getLength());
}
/** Add data to the buffer
*/
public void append( byte src[], int off, int len )
- throws IOException
+ throws IOException
{
- // will grow, up to limit
- makeSpace( len );
+ // will grow, up to limit
+ makeSpace( len );
- // if we don't have limit: makeSpace can grow as it wants
- if( limit < 0 ) {
- // assert: makeSpace made enough space
- System.arraycopy( src, off, buff, end, len );
- end+=len;
- return;
- }
+ // if we don't have limit: makeSpace can grow as it wants
+ if( limit < 0 ) {
+ // assert: makeSpace made enough space
+ System.arraycopy( src, off, buff, end, len );
+ end+=len;
+ return;
+ }
// Optimize on a common case.
// If the buffer is empty and the source is going to fill up all the
@@ -324,19 +324,19 @@
out.realWriteBytes( src, off, len );
return;
}
- // if we have limit and we're below
- if( len <= limit - end ) {
- // makeSpace will grow the buffer to the limit,
- // so we have space
- System.arraycopy( src, off, buff, end, len );
- end+=len;
- return;
- }
+ // if we have limit and we're below
+ if( len <= limit - end ) {
+ // makeSpace will grow the buffer to the limit,
+ // so we have space
+ System.arraycopy( src, off, buff, end, len );
+ end+=len;
+ return;
+ }
- // need more space than we can afford, need to flush
- // buffer
+ // need more space than we can afford, need to flush
+ // buffer
- // the buffer is already at ( or bigger than ) limit
+ // the buffer is already at ( or bigger than ) limit
// We chunk the data into slices fitting in the buffer limit, although
// if the data is written directly if it doesn't fit
@@ -423,61 +423,61 @@
* @throws IOException
*/
public void flushBuffer()
- throws IOException
+ throws IOException
{
- //assert out!=null
- if( out==null ) {
- throw new IOException( "Buffer overflow, no sink " + limit + " " +
- buff.length );
- }
- out.realWriteBytes( buff, start, end-start );
- end=start;
+ //assert out!=null
+ if( out==null ) {
+ throw new IOException( "Buffer overflow, no sink " + limit + " " +
+ buff.length );
+ }
+ out.realWriteBytes( buff, start, end-start );
+ end=start;
}
/** Make space for len chars. If len is small, allocate
- * a reserve space too. Never grow bigger than limit.
+ * a reserve space too. Never grow bigger than limit.
*/
private void makeSpace(int count)
{
- byte[] tmp = null;
+ byte[] tmp = null;
- int newSize;
- int desiredSize=end + count;
+ int newSize;
+ int desiredSize=end + count;
+
+ // Can't grow above the limit
+ if( limit > 0 &&
+ desiredSize > limit) {
+ desiredSize=limit;
+ }
- // Can't grow above the limit
- if( limit > 0 &&
- desiredSize > limit) {
- desiredSize=limit;
- }
-
- if( buff==null ) {
- if( desiredSize < 256 ) desiredSize=256; // take a minimum
- buff=new byte[desiredSize];
- }
-
- // limit < buf.length ( the buffer is already big )
- // or we already have space XXX
- if( desiredSize <= buff.length ) {
- return;
- }
- // grow in larger chunks
- if( desiredSize < 2 * buff.length ) {
- newSize= buff.length * 2;
- if( limit >0 &&
- newSize > limit ) newSize=limit;
- tmp=new byte[newSize];
- } else {
- newSize= buff.length * 2 + count ;
- if( limit > 0 &&
- newSize > limit ) newSize=limit;
- tmp=new byte[newSize];
- }
-
- System.arraycopy(buff, start, tmp, 0, end-start);
- buff = tmp;
- tmp = null;
- end=end-start;
- start=0;
+ if( buff==null ) {
+ if( desiredSize < 256 ) desiredSize=256; // take a minimum
+ buff=new byte[desiredSize];
+ }
+
+ // limit < buf.length ( the buffer is already big )
+ // or we already have space XXX
+ if( desiredSize <= buff.length ) {
+ return;
+ }
+ // grow in larger chunks
+ if( desiredSize < 2 * buff.length ) {
+ newSize= buff.length * 2;
+ if( limit >0 &&
+ newSize > limit ) newSize=limit;
+ tmp=new byte[newSize];
+ } else {
+ newSize= buff.length * 2 + count ;
+ if( limit > 0 &&
+ newSize > limit ) newSize=limit;
+ tmp=new byte[newSize];
+ }
+
+ System.arraycopy(buff, start, tmp, 0, end-start);
+ buff = tmp;
+ tmp = null;
+ end=end-start;
+ start=0;
}
// -------------------- Conversion and getters --------------------
@@ -518,7 +518,7 @@
public int getInt()
{
- return Ascii.parseInt(buff, start,end-start);
+ return Ascii.parseInt(buff, start,end-start);
}
public long getLong() {
@@ -534,21 +534,21 @@
* @return true if the comparison succeeded, false otherwise
*/
public boolean equals(String s) {
- // XXX ENCODING - this only works if encoding is UTF8-compat
- // ( ok for tomcat, where we compare ascii - header names, etc )!!!
-
- byte[] b = buff;
- int blen = end-start;
- if (b == null || blen != s.length()) {
- return false;
- }
- int boff = start;
- for (int i = 0; i < blen; i++) {
- if (b[boff++] != s.charAt(i)) {
- return false;
- }
- }
- return true;
+ // XXX ENCODING - this only works if encoding is UTF8-compat
+ // ( ok for tomcat, where we compare ascii - header names, etc )!!!
+
+ byte[] b = buff;
+ int blen = end-start;
+ if (b == null || blen != s.length()) {
+ return false;
+ }
+ int boff = start;
+ for (int i = 0; i < blen; i++) {
+ if (b[boff++] != s.charAt(i)) {
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -557,63 +557,63 @@
* @return true if the comparison succeeded, false otherwise
*/
public boolean equalsIgnoreCase(String s) {
- byte[] b = buff;
- int blen = end-start;
- if (b == null || blen != s.length()) {
- return false;
- }
- int boff = start;
- for (int i = 0; i < blen; i++) {
- if (Ascii.toLower(b[boff++]) != Ascii.toLower(s.charAt(i))) {
- return false;
- }
- }
- return true;
+ byte[] b = buff;
+ int blen = end-start;
+ if (b == null || blen != s.length()) {
+ return false;
+ }
+ int boff = start;
+ for (int i = 0; i < blen; i++) {
+ if (Ascii.toLower(b[boff++]) != Ascii.toLower(s.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
}
public boolean equals( ByteChunk bb ) {
- return equals( bb.getBytes(), bb.getStart(), bb.getLength());
+ return equals( bb.getBytes(), bb.getStart(), bb.getLength());
}
public boolean equals( byte b2[], int off2, int len2) {
- byte b1[]=buff;
- if( b1==null && b2==null ) return true;
+ byte b1[]=buff;
+ if( b1==null && b2==null ) return true;
- int len=end-start;
- if ( len2 != len || b1==null || b2==null )
- return false;
-
- int off1 = start;
-
- while ( len-- > 0) {
- if (b1[off1++] != b2[off2++]) {
- return false;
- }
- }
- return true;
+ int len=end-start;
+ if ( len2 != len || b1==null || b2==null )
+ return false;
+
+ int off1 = start;
+
+ while ( len-- > 0) {
+ if (b1[off1++] != b2[off2++]) {
+ return false;
+ }
+ }
+ return true;
}
public boolean equals( CharChunk cc ) {
- return equals( cc.getChars(), cc.getStart(), cc.getLength());
+ return equals( cc.getChars(), cc.getStart(), cc.getLength());
}
public boolean equals( char c2[], int off2, int len2) {
- // XXX works only for enc compatible with ASCII/UTF !!!
- byte b1[]=buff;
- if( c2==null && b1==null ) return true;
-
- if (b1== null || c2==null || end-start != len2 ) {
- return false;
- }
- int off1 = start;
- int len=end-start;
-
- while ( len-- > 0) {
- if ( (char)b1[off1++] != c2[off2++]) {
- return false;
- }
- }
- return true;
+ // XXX works only for enc compatible with ASCII/UTF !!!
+ byte b1[]=buff;
+ if( c2==null && b1==null ) return true;
+
+ if (b1== null || c2==null || end-start != len2 ) {
+ return false;
+ }
+ int off1 = start;
+ int len=end-start;
+
+ while ( len-- > 0) {
+ if ( (char)b1[off1++] != c2[off2++]) {
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -621,19 +621,19 @@
* @param s the string
*/
public boolean startsWith(String s) {
- // Works only if enc==UTF
- byte[] b = buff;
- int blen = s.length();
- if (b == null || blen > end-start) {
- return false;
- }
- int boff = start;
- for (int i = 0; i < blen; i++) {
- if (b[boff++] != s.charAt(i)) {
- return false;
- }
- }
- return true;
+ // Works only if enc==UTF
+ byte[] b = buff;
+ int blen = s.length();
+ if (b == null || blen > end-start) {
+ return false;
+ }
+ int boff = start;
+ for (int i = 0; i < blen; i++) {
+ if (b[boff++] != s.charAt(i)) {
+ return false;
+ }
+ }
+ return true;
}
/* Returns true if the message bytes start with the specified byte array */
@@ -660,71 +660,71 @@
* @param pos The position
*/
public boolean startsWithIgnoreCase(String s, int pos) {
- byte[] b = buff;
- int len = s.length();
- if (b == null || len+pos > end-start) {
- return false;
- }
- int off = start+pos;
- for (int i = 0; i < len; i++) {
- if (Ascii.toLower( b[off++] ) != Ascii.toLower( s.charAt(i))) {
- return false;
- }
- }
- return true;
+ byte[] b = buff;
+ int len = s.length();
+ if (b == null || len+pos > end-start) {
+ return false;
+ }
+ int off = start+pos;
+ for (int i = 0; i < len; i++) {
+ if (Ascii.toLower( b[off++] ) != Ascii.toLower( s.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
}
public int indexOf( String src, int srcOff, int srcLen, int myOff ) {
- char first=src.charAt( srcOff );
+ char first=src.charAt( srcOff );
- // Look for first char
- int srcEnd = srcOff + srcLen;
+ // Look for first char
+ int srcEnd = srcOff + srcLen;
- for( int i=myOff+start; i <= (end - srcLen); i++ ) {
- if( buff[i] != first ) continue;
- // found first char, now look for a match
+ for( int i=myOff+start; i <= (end - srcLen); i++ ) {
+ if( buff[i] != first ) continue;
+ // found first char, now look for a match
int myPos=i+1;
- for( int srcPos=srcOff + 1; srcPos< srcEnd; ) {
+ for( int srcPos=srcOff + 1; srcPos< srcEnd; ) {
if( buff[myPos++] != src.charAt( srcPos++ ))
- break;
+ break;
if( srcPos==srcEnd ) return i-start; // found it
- }
- }
- return -1;
+ }
+ }
+ return -1;
}
// -------------------- Hash code --------------------
// normal hash.
public int hash() {
- return hashBytes( buff, start, end-start);
+ return hashBytes( buff, start, end-start);
}
// hash ignoring case
public int hashIgnoreCase() {
- return hashBytesIC( buff, start, end-start );
+ return hashBytesIC( buff, start, end-start );
}
private static int hashBytes( byte buff[], int start, int bytesLen ) {
- int max=start+bytesLen;
- byte bb[]=buff;
- int code=0;
- for (int i = start; i < max ; i++) {
- code = code * 37 + bb[i];
- }
- return code;
+ int max=start+bytesLen;
+ byte bb[]=buff;
+ int code=0;
+ for (int i = start; i < max ; i++) {
+ code = code * 37 + bb[i];
+ }
+ return code;
}
private static int hashBytesIC( byte bytes[], int start,
- int bytesLen )
+ int bytesLen )
{
- int max=start+bytesLen;
- byte bb[]=bytes;
- int code=0;
- for (int i = start; i < max ; i++) {
- code = code * 37 + Ascii.toLower(bb[i]);
- }
- return code;
+ int max=start+bytesLen;
+ byte bb[]=bytes;
+ int code=0;
+ for (int i = start; i < max ; i++) {
+ code = code * 37 + Ascii.toLower(bb[i]);
+ }
+ return code;
}
/**
@@ -733,51 +733,51 @@
* @param starting The start position
*/
public int indexOf(char c, int starting) {
- int ret = indexOf( buff, start+starting, end, c);
- return (ret >= start) ? ret - start : -1;
+ int ret = indexOf( buff, start+starting, end, c);
+ return (ret >= start) ? ret - start : -1;
}
public static int indexOf( byte bytes[], int off, int end, char qq )
{
- // Works only for UTF
- while( off < end ) {
- byte b=bytes[off];
- if( b==qq )
- return off;
- off++;
- }
- return -1;
+ // Works only for UTF
+ while( off < end ) {
+ byte b=bytes[off];
+ if( b==qq )
+ return off;
+ off++;
+ }
+ return -1;
}
/** Find a character, no side effects.
* @return index of char if found, -1 if not
*/
public static int findChar( byte buf[], int start, int end, char c ) {
- byte b=(byte)c;
- int offset = start;
- while (offset < end) {
- if (buf[offset] == b) {
- return offset;
- }
- offset++;
- }
- return -1;
+ byte b=(byte)c;
+ int offset = start;
+ while (offset < end) {
+ if (buf[offset] == b) {
+ return offset;
+ }
+ offset++;
+ }
+ return -1;
}
/** Find a character, no side effects.
* @return index of char if found, -1 if not
*/
public static int findChars( byte buf[], int start, int end, byte c[] ) {
- int clen=c.length;
- int offset = start;
- while (offset < end) {
- for( int i=0; i<clen; i++ )
- if (buf[offset] == c[i]) {
- return offset;
- }
- offset++;
- }
- return -1;
+ int clen=c.length;
+ int offset = start;
+ while (offset < end) {
+ for( int i=0; i<clen; i++ )
+ if (buf[offset] == c[i]) {
+ return offset;
+ }
+ offset++;
+ }
+ return -1;
}
/** Find the first character != c
@@ -785,29 +785,30 @@
*/
public static int findNotChars( byte buf[], int start, int end, byte c[] )
{
- int clen=c.length;
- int offset = start;
- boolean found;
-
- while (offset < end) {
- found=true;
- for( int i=0; i<clen; i++ ) {
- if (buf[offset] == c[i]) {
- found=false;
- break;
- }
- }
- if( found ) { // buf[offset] != c[0..len]
- return offset;
- }
- offset++;
- }
- return -1;
+ int clen=c.length;
+ int offset = start;
+ boolean found;
+
+ while (offset < end) {
+ found=true;
+ for( int i=0; i<clen; i++ ) {
+ if (buf[offset] == c[i]) {
+ found=false;
+ break;
+ }
+ }
+ if( found ) { // buf[offset] != c[0..len]
+ return offset;
+ }
+ offset++;
+ }
+ return -1;
}
/**
- * Convert specified String to a byte array. This ONLY WORKS for ascii, UTF chars will be truncated.
+ * Convert specified String to a byte array. This ONLY WORKS for ascii, UTF
+ * chars will be truncated.
*
* @param value to convert to byte array
* @return the byte array value
Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/CharChunk.java
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/CharChunk.java?view=diff&rev=449335&r1=449334&r2=449335
==============================================================================
--- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/CharChunk.java (original)
+++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/CharChunk.java Sat Sep 23 16:54:47 2006
@@ -47,9 +47,9 @@
* grow the buffer ( up to the limit ) or send it to a channel.
*/
public static interface CharOutputChannel {
- /** Send the bytes ( usually the internal conversion buffer ).
- * Expect 8k output if the buffer is full.
- */
+ /** Send the bytes ( usually the internal conversion buffer ).
+ * Expect 8k output if the buffer is full.
+ */
public void realWriteChars(char cbuf[], int off, int len)
throws IOException;
}
@@ -81,50 +81,50 @@
}
public CharChunk(int size) {
- allocate( size, -1 );
+ allocate( size, -1 );
}
// --------------------
public CharChunk getClone() {
- try {
- return (CharChunk)this.clone();
- } catch( Exception ex) {
- return null;
- }
+ try {
+ return (CharChunk)this.clone();
+ } catch( Exception ex) {
+ return null;
+ }
}
public boolean isNull() {
- if( end > 0 ) return false;
- return !isSet; //XXX
+ if( end > 0 ) return false;
+ return !isSet; //XXX
}
/**
* Resets the message bytes to an uninitialized state.
*/
public void recycle() {
- // buff=null;
- isSet=false; // XXX
- start=0;
- end=0;
+ // buff=null;
+ isSet=false; // XXX
+ start=0;
+ end=0;
}
public void reset() {
- buff=null;
+ buff=null;
}
// -------------------- Setup --------------------
public void allocate( int initial, int limit ) {
- isOutput=true;
- if( buff==null || buff.length < initial ) {
- buff=new char[initial];
- }
- this.limit=limit;
- start=0;
- end=0;
- isOutput=true;
- isSet=true;
+ isOutput=true;
+ if( buff==null || buff.length < initial ) {
+ buff=new char[initial];
+ }
+ this.limit=limit;
+ start=0;
+ end=0;
+ isOutput=true;
+ isSet=true;
}
@@ -147,11 +147,11 @@
* or throw exception.
*/
public void setLimit(int limit) {
- this.limit=limit;
+ this.limit=limit;
}
public int getLimit() {
- return limit;
+ return limit;
}
/**
@@ -162,23 +162,23 @@
}
/** When the buffer is full, write the data to the output channel.
- * Also used when large amount of data is appended.
+ * Also used when large amount of data is appended.
*
* If not set, the buffer will grow to the limit.
*/
public void setCharOutputChannel(CharOutputChannel out) {
- this.out=out;
+ this.out=out;
}
// compat
public char[] getChars()
{
- return getBuffer();
+ return getBuffer();
}
public char[] getBuffer()
{
- return buff;
+ return buff;
}
/**
@@ -186,71 +186,71 @@
* For output this is the end of the buffer.
*/
public int getStart() {
- return start;
+ return start;
}
public int getOffset() {
- return start;
+ return start;
}
/**
* Returns the start offset of the bytes.
*/
public void setOffset(int off) {
- start=off;
+ start=off;
}
/**
* Returns the length of the bytes.
*/
public int getLength() {
- return end-start;
+ return end-start;
}
public int getEnd() {
- return end;
+ return end;
}
public void setEnd( int i ) {
- end=i;
+ end=i;
}
// -------------------- Adding data --------------------
public void append( char b )
- throws IOException
+ throws IOException
{
- makeSpace( 1 );
+ makeSpace( 1 );
- // couldn't make space
- if( limit >0 && end >= limit ) {
- flushBuffer();
- }
- buff[end++]=b;
+ // couldn't make space
+ if( limit >0 && end >= limit ) {
+ flushBuffer();
+ }
+ buff[end++]=b;
}
public void append( CharChunk src )
- throws IOException
+ throws IOException
{
- append( src.getBuffer(), src.getOffset(), src.getLength());
+ append( src.getBuffer(), src.getOffset(), src.getLength());
}
/** Add data to the buffer
*/
public void append( char src[], int off, int len )
- throws IOException
+ throws IOException
{
- // will grow, up to limit
- makeSpace( len );
+ // will grow, up to limit
+ makeSpace( len );
- // if we don't have limit: makeSpace can grow as it wants
- if( limit < 0 ) {
- // assert: makeSpace made enough space
- System.arraycopy( src, off, buff, end, len );
- end+=len;
- return;
- }
+ // if we don't have limit: makeSpace can grow as it wants
+ if( limit < 0 ) {
+ // assert: makeSpace made enough space
+ System.arraycopy( src, off, buff, end, len );
+ end+=len;
+ return;
+ }
// Optimize on a common case.
// If the source is going to fill up all the space in buffer, may
@@ -259,82 +259,82 @@
out.realWriteChars( src, off, len );
return;
}
-
- // if we have limit and we're below
- if( len <= limit - end ) {
- // makeSpace will grow the buffer to the limit,
- // so we have space
- System.arraycopy( src, off, buff, end, len );
+
+ // if we have limit and we're below
+ if( len <= limit - end ) {
+ // makeSpace will grow the buffer to the limit,
+ // so we have space
+ System.arraycopy( src, off, buff, end, len );
+
+ end+=len;
+ return;
+ }
+
+ // need more space than we can afford, need to flush
+ // buffer
+
+ // the buffer is already at ( or bigger than ) limit
+
+ // Optimization:
+ // If len-avail < length ( i.e. after we fill the buffer with
+ // what we can, the remaining will fit in the buffer ) we'll just
+ // copy the first part, flush, then copy the second part - 1 write
+ // and still have some space for more. We'll still have 2 writes, but
+ // we write more on the first.
+
+ if( len + end < 2 * limit ) {
+ /* If the request length exceeds the size of the output buffer,
+ flush the output buffer and then write the data directly.
+ We can't avoid 2 writes, but we can write more on the second
+ */
+ int avail=limit-end;
+ System.arraycopy(src, off, buff, end, avail);
+ end += avail;
- end+=len;
- return;
- }
-
- // need more space than we can afford, need to flush
- // buffer
-
- // the buffer is already at ( or bigger than ) limit
-
- // Optimization:
- // If len-avail < length ( i.e. after we fill the buffer with
- // what we can, the remaining will fit in the buffer ) we'll just
- // copy the first part, flush, then copy the second part - 1 write
- // and still have some space for more. We'll still have 2 writes, but
- // we write more on the first.
-
- if( len + end < 2 * limit ) {
- /* If the request length exceeds the size of the output buffer,
- flush the output buffer and then write the data directly.
- We can't avoid 2 writes, but we can write more on the second
- */
- int avail=limit-end;
- System.arraycopy(src, off, buff, end, avail);
- end += avail;
-
- flushBuffer();
-
- System.arraycopy(src, off+avail, buff, end, len - avail);
- end+= len - avail;
-
- } else { // len > buf.length + avail
- // long write - flush the buffer and write the rest
- // directly from source
- flushBuffer();
-
- out.realWriteChars( src, off, len );
- }
+ flushBuffer();
+
+ System.arraycopy(src, off+avail, buff, end, len - avail);
+ end+= len - avail;
+
+ } else { // len > buf.length + avail
+ // long write - flush the buffer and write the rest
+ // directly from source
+ flushBuffer();
+
+ out.realWriteChars( src, off, len );
+ }
}
/** Add data to the buffer
*/
public void append( StringBuffer sb )
- throws IOException
+ throws IOException
{
- int len=sb.length();
+ int len=sb.length();
+
+ // will grow, up to limit
+ makeSpace( len );
- // will grow, up to limit
- makeSpace( len );
+ // if we don't have limit: makeSpace can grow as it wants
+ if( limit < 0 ) {
+ // assert: makeSpace made enough space
+ sb.getChars(0, len, buff, end );
+ end+=len;
+ return;
+ }
- // if we don't have limit: makeSpace can grow as it wants
- if( limit < 0 ) {
- // assert: makeSpace made enough space
- sb.getChars(0, len, buff, end );
- end+=len;
- return;
- }
-
- int off=0;
- int sbOff = off;
- int sbEnd = off + len;
- while (sbOff < sbEnd) {
- int d = min(limit - end, sbEnd - sbOff);
- sb.getChars( sbOff, sbOff+d, buff, end);
- sbOff += d;
- end += d;
- if (end >= limit)
- flushBuffer();
- }
+ int off=0;
+ int sbOff = off;
+ int sbEnd = off + len;
+ while (sbOff < sbEnd) {
+ int d = min(limit - end, sbEnd - sbOff);
+ sb.getChars( sbOff, sbOff+d, buff, end);
+ sbOff += d;
+ end += d;
+ if (end >= limit)
+ flushBuffer();
+ }
}
/** Append a string to the buffer
@@ -346,29 +346,29 @@
/** Append a string to the buffer
*/
public void append(String s, int off, int len) throws IOException {
- if (s==null) return;
-
- // will grow, up to limit
- makeSpace( len );
-
- // if we don't have limit: makeSpace can grow as it wants
- if( limit < 0 ) {
- // assert: makeSpace made enough space
- s.getChars(off, off+len, buff, end );
- end+=len;
- return;
- }
-
- int sOff = off;
- int sEnd = off + len;
- while (sOff < sEnd) {
- int d = min(limit - end, sEnd - sOff);
- s.getChars( sOff, sOff+d, buff, end);
- sOff += d;
- end += d;
- if (end >= limit)
- flushBuffer();
- }
+ if (s==null) return;
+
+ // will grow, up to limit
+ makeSpace( len );
+
+ // if we don't have limit: makeSpace can grow as it wants
+ if( limit < 0 ) {
+ // assert: makeSpace made enough space
+ s.getChars(off, off+len, buff, end );
+ end+=len;
+ return;
+ }
+
+ int sOff = off;
+ int sEnd = off + len;
+ while (sOff < sEnd) {
+ int d = min(limit - end, sEnd - sOff);
+ s.getChars( sOff, sOff+d, buff, end);
+ sOff += d;
+ end += d;
+ if (end >= limit)
+ flushBuffer();
+ }
}
// -------------------- Removing data from the buffer --------------------
@@ -429,59 +429,59 @@
public void flushBuffer()
- throws IOException
+ throws IOException
{
- //assert out!=null
- if( out==null ) {
- throw new IOException( "Buffer overflow, no sink " + limit + " " +
- buff.length );
- }
- out.realWriteChars( buff, start, end - start );
- end=start;
+ //assert out!=null
+ if( out==null ) {
+ throw new IOException( "Buffer overflow, no sink " + limit + " " +
+ buff.length );
+ }
+ out.realWriteChars( buff, start, end - start );
+ end=start;
}
/** Make space for len chars. If len is small, allocate
- * a reserve space too. Never grow bigger than limit.
+ * a reserve space too. Never grow bigger than limit.
*/
private void makeSpace(int count)
{
- char[] tmp = null;
+ char[] tmp = null;
- int newSize;
- int desiredSize=end + count;
+ int newSize;
+ int desiredSize=end + count;
+
+ // Can't grow above the limit
+ if( limit > 0 &&
+ desiredSize > limit) {
+ desiredSize=limit;
+ }
- // Can't grow above the limit
- if( limit > 0 &&
- desiredSize > limit) {
- desiredSize=limit;
- }
-
- if( buff==null ) {
- if( desiredSize < 256 ) desiredSize=256; // take a minimum
- buff=new char[desiredSize];
- }
-
- // limit < buf.length ( the buffer is already big )
- // or we already have space XXX
- if( desiredSize <= buff.length) {
- return;
- }
- // grow in larger chunks
- if( desiredSize < 2 * buff.length ) {
- newSize= buff.length * 2;
- if( limit >0 &&
- newSize > limit ) newSize=limit;
- tmp=new char[newSize];
- } else {
- newSize= buff.length * 2 + count ;
- if( limit > 0 &&
- newSize > limit ) newSize=limit;
- tmp=new char[newSize];
- }
-
- System.arraycopy(buff, start, tmp, start, end-start);
- buff = tmp;
- tmp = null;
+ if( buff==null ) {
+ if( desiredSize < 256 ) desiredSize=256; // take a minimum
+ buff=new char[desiredSize];
+ }
+
+ // limit < buf.length ( the buffer is already big )
+ // or we already have space XXX
+ if( desiredSize <= buff.length) {
+ return;
+ }
+ // grow in larger chunks
+ if( desiredSize < 2 * buff.length ) {
+ newSize= buff.length * 2;
+ if( limit >0 &&
+ newSize > limit ) newSize=limit;
+ tmp=new char[newSize];
+ } else {
+ newSize= buff.length * 2 + count ;
+ if( limit > 0 &&
+ newSize > limit ) newSize=limit;
+ tmp=new char[newSize];
+ }
+
+ System.arraycopy(buff, start, tmp, start, end-start);
+ buff = tmp;
+ tmp = null;
}
// -------------------- Conversion and getters --------------------
@@ -501,8 +501,8 @@
public int getInt()
{
- return Ascii.parseInt(buff, start,
- end-start);
+ return Ascii.parseInt(buff, start,
+ end-start);
}
// -------------------- equals --------------------
@@ -513,18 +513,18 @@
* @return true if the comparison succeeded, false otherwise
*/
public boolean equals(String s) {
- char[] c = buff;
- int len = end-start;
- if (c == null || len != s.length()) {
- return false;
- }
- int off = start;
- for (int i = 0; i < len; i++) {
- if (c[off++] != s.charAt(i)) {
- return false;
- }
- }
- return true;
+ char[] c = buff;
+ int len = end-start;
+ if (c == null || len != s.length()) {
+ return false;
+ }
+ int off = start;
+ for (int i = 0; i < len; i++) {
+ if (c[off++] != s.charAt(i)) {
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -533,57 +533,57 @@
* @return true if the comparison succeeded, false otherwise
*/
public boolean equalsIgnoreCase(String s) {
- char[] c = buff;
- int len = end-start;
- if (c == null || len != s.length()) {
- return false;
- }
- int off = start;
- for (int i = 0; i < len; i++) {
- if (Ascii.toLower( c[off++] ) != Ascii.toLower( s.charAt(i))) {
- return false;
- }
- }
- return true;
+ char[] c = buff;
+ int len = end-start;
+ if (c == null || len != s.length()) {
+ return false;
+ }
+ int off = start;
+ for (int i = 0; i < len; i++) {
+ if (Ascii.toLower( c[off++] ) != Ascii.toLower( s.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
}
public boolean equals(CharChunk cc) {
- return equals( cc.getChars(), cc.getOffset(), cc.getLength());
+ return equals( cc.getChars(), cc.getOffset(), cc.getLength());
}
public boolean equals(char b2[], int off2, int len2) {
- char b1[]=buff;
- if( b1==null && b2==null ) return true;
-
- if (b1== null || b2==null || end-start != len2) {
- return false;
- }
- int off1 = start;
- int len=end-start;
- while ( len-- > 0) {
- if (b1[off1++] != b2[off2++]) {
- return false;
- }
- }
- return true;
+ char b1[]=buff;
+ if( b1==null && b2==null ) return true;
+
+ if (b1== null || b2==null || end-start != len2) {
+ return false;
+ }
+ int off1 = start;
+ int len=end-start;
+ while ( len-- > 0) {
+ if (b1[off1++] != b2[off2++]) {
+ return false;
+ }
+ }
+ return true;
}
public boolean equals(byte b2[], int off2, int len2) {
- char b1[]=buff;
- if( b2==null && b1==null ) return true;
+ char b1[]=buff;
+ if( b2==null && b1==null ) return true;
- if (b1== null || b2==null || end-start != len2) {
- return false;
- }
- int off1 = start;
- int len=end-start;
-
- while ( len-- > 0) {
- if ( b1[off1++] != (char)b2[off2++]) {
- return false;
- }
- }
- return true;
+ if (b1== null || b2==null || end-start != len2) {
+ return false;
+ }
+ int off1 = start;
+ int len=end-start;
+
+ while ( len-- > 0) {
+ if ( b1[off1++] != (char)b2[off2++]) {
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -591,18 +591,18 @@
* @param s the string
*/
public boolean startsWith(String s) {
- char[] c = buff;
- int len = s.length();
- if (c == null || len > end-start) {
- return false;
- }
- int off = start;
- for (int i = 0; i < len; i++) {
- if (c[off++] != s.charAt(i)) {
- return false;
- }
- }
- return true;
+ char[] c = buff;
+ int len = s.length();
+ if (c == null || len > end-start) {
+ return false;
+ }
+ int off = start;
+ for (int i = 0; i < len; i++) {
+ if (c[off++] != s.charAt(i)) {
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -610,18 +610,18 @@
* @param s the string
*/
public boolean startsWithIgnoreCase(String s, int pos) {
- char[] c = buff;
- int len = s.length();
- if (c == null || len+pos > end-start) {
- return false;
- }
- int off = start+pos;
- for (int i = 0; i < len; i++) {
- if (Ascii.toLower( c[off++] ) != Ascii.toLower( s.charAt(i))) {
- return false;
- }
- }
- return true;
+ char[] c = buff;
+ int len = s.length();
+ if (c == null || len+pos > end-start) {
+ return false;
+ }
+ int off = start+pos;
+ for (int i = 0; i < len; i++) {
+ if (Ascii.toLower( c[off++] ) != Ascii.toLower( s.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
}
@@ -629,24 +629,24 @@
// normal hash.
public int hash() {
- int code=0;
- for (int i = start; i < start + end-start; i++) {
- code = code * 37 + buff[i];
- }
- return code;
+ int code=0;
+ for (int i = start; i < start + end-start; i++) {
+ code = code * 37 + buff[i];
+ }
+ return code;
}
// hash ignoring case
public int hashIgnoreCase() {
- int code=0;
- for (int i = start; i < end; i++) {
- code = code * 37 + Ascii.toLower(buff[i]);
- }
- return code;
+ int code=0;
+ for (int i = start; i < end; i++) {
+ code = code * 37 + Ascii.toLower(buff[i]);
+ }
+ return code;
}
public int indexOf(char c) {
- return indexOf( c, start);
+ return indexOf( c, start);
}
/**
@@ -654,45 +654,45 @@
* @param c the character
*/
public int indexOf(char c, int starting) {
- int ret = indexOf( buff, start+starting, end, c );
- return (ret >= start) ? ret - start : -1;
+ int ret = indexOf( buff, start+starting, end, c );
+ return (ret >= start) ? ret - start : -1;
}
public static int indexOf( char chars[], int off, int cend, char qq )
{
- while( off < cend ) {
- char b=chars[off];
- if( b==qq )
- return off;
- off++;
- }
- return -1;
+ while( off < cend ) {
+ char b=chars[off];
+ if( b==qq )
+ return off;
+ off++;
+ }
+ return -1;
}
public int indexOf( String src, int srcOff, int srcLen, int myOff ) {
- char first=src.charAt( srcOff );
+ char first=src.charAt( srcOff );
- // Look for first char
- int srcEnd = srcOff + srcLen;
+ // Look for first char
+ int srcEnd = srcOff + srcLen;
- for( int i=myOff+start; i <= (end - srcLen); i++ ) {
- if( buff[i] != first ) continue;
- // found first char, now look for a match
+ for( int i=myOff+start; i <= (end - srcLen); i++ ) {
+ if( buff[i] != first ) continue;
+ // found first char, now look for a match
int myPos=i+1;
- for( int srcPos=srcOff + 1; srcPos< srcEnd; ) {
+ for( int srcPos=srcOff + 1; srcPos< srcEnd; ) {
if( buff[myPos++] != src.charAt( srcPos++ ))
- break;
+ break;
if( srcPos==srcEnd ) return i-start; // found it
- }
- }
- return -1;
+ }
+ }
+ return -1;
}
// -------------------- utils
private int min(int a, int b) {
- if (a < b) return a;
- return b;
+ if (a < b) return a;
+ return b;
}
// Char sequence impl
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org