costin      00/11/20 13:37:47

  Modified:    src/share/org/apache/tomcat/util MimeHeaders.java
  Log:
  Added a new method to MimeHeaders to do fast ( indexed ) searches
  for multi-value headers.
  
  The whole MimeHeaders will be re-written soon ( I have a first draft,
  but I want to make sure the base class will be usable for Parameters
  and Cookies too )
  
  Revision  Changes    Path
  1.17      +37 -0     jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaders.java
  
  Index: MimeHeaders.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaders.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- MimeHeaders.java  2000/11/01 21:43:28     1.16
  +++ MimeHeaders.java  2000/11/20 21:37:45     1.17
  @@ -89,6 +89,25 @@
    * of string values).
    */
   
  +/* Headers are first parsed and stored in the order they are
  +   received. This is based on the fact that most servlets will not
  +   directly access all headers, and most headers are single-valued.
  +   ( the alternative - a hash or similar data structure - will add
  +   an overhead that is not needed in most cases )
  +   
  +   Apache seems to be using a similar method for storing and manipulating
  +   headers.
  +       
  +   Future enhancements:
  +   - hash the headers the first time a header is requested ( i.e. if the
  +   servlet needs direct access to headers).
  +   - scan "common" values ( length, cookies, etc ) during the parse
  +   ( addHeader hook )
  +   
  +*/
  +    
  +
  +
   /**
    *  Memory-efficient repository for Mime Headers. When the object is recycled, it
    *  will keep the allocated headers[] and all the MimeHeaderField - no GC is 
generated.
  @@ -170,6 +189,24 @@
        return n >= 0 && n < count ? headers[n].getValue() : null;
       }
   
  +    /** Find the index of a header with the given name.
  +     */
  +    public int findHeader( String name, int starting ) {
  +     // We can use a hash - but it's not clear how much
  +     // benefit you can get - there is an  overhead 
  +     // and the number of headers is small (4-5 ?)
  +     // Another problem is that we'll pay the overhead
  +     // of constructing the hashtable
  +
  +     // A custom search tree may be better
  +        for (int i = starting; i < count; i++) {
  +         if (headers[i].getName().equalsIgnoreCase(name)) {
  +                return i;
  +            }
  +        }
  +        return -1;
  +    }
  +    
       // -------------------- --------------------
   
       /**
  
  
  

Reply via email to