juergen     2003/02/25 08:34:21

  Modified:    src/share/org/apache/slide/content NodeRevisionNumber.java
  Log:
  mini cache for toString. Thanks to Sven Steiniger [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.7       +33 -7     
jakarta-slide/src/share/org/apache/slide/content/NodeRevisionNumber.java
  
  Index: NodeRevisionNumber.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionNumber.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NodeRevisionNumber.java   11 Jul 2002 14:56:53 -0000      1.6
  +++ NodeRevisionNumber.java   25 Feb 2003 16:34:21 -0000      1.7
  @@ -162,6 +162,8 @@
       
       /**
        * Number storage.
  +     * <b>Note: when this array or it's content is modified, you must reset
  +     * [EMAIL PROTECTED] #cachedToString} to null!</b>
        */
       private int[] number;
       
  @@ -228,10 +230,12 @@
               for (int i=0; i<nbDigits; i++) {
                   number[i] = (new Integer(tokenizer.nextToken())).intValue();
               }
  +            cachedToString=null;  // reset cache
           } else {
               number = new int[2];
               number[MAJOR] = 1;
               number[MINOR] = 0;
  +            cachedToString=null;  // reset cache
           }
       }
       
  @@ -242,25 +246,47 @@
       private void next() {
           if (number.length > 0) {
               number[number.length - 1] += 1;
  +            cachedToString=null;  // reset cache
           }
       }
       
       
       // --------------------------------------------------------- Public Methods
  -    
  -    
  +
  +
  +    /**
  +     * Caches the result of last toString()-call. This will also heavily improve
  +     * hashCode() as the String.hashCode() method is also buffered.
  +     * This imust be resetet to null whenever the [EMAIL PROTECTED] #number} array 
changes.
  +     */
  +    private String cachedToString;
  +
       /**
        * Get a String representation of the revision number.
        * 
        * @return String 
        */
       public String toString() {
  +        if(cachedToString!=null) return cachedToString;
  +        int count=number.length;
  +        if(count==2) cachedToString=(number[MAJOR]+"."+number[MINOR]);
  +        else
  +        {
  +          StringBuffer buf = new StringBuffer();
  +          buf.append(number[MAJOR]);
  +          for (int i=1; i<count; i++) {
  +              buf.append('.').append(number[i]);
  +          }
  +          cachedToString=buf.toString();
  +        }
  +        return cachedToString;
  +        /* old code being replaced by the cached one
           StringBuffer buf = new StringBuffer();
           buf.append(number[MAJOR]);
           for (int i=1; i<number.length; i++) {
               buf.append(".").append(number[i]);
           }
  -        return buf.toString();
  +        return buf.toString();*/
       }
       
       
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to