You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by ju...@apache.org on 2003/02/25 17:34:21 UTC

cvs commit: jakarta-slide/src/share/org/apache/slide/content NodeRevisionNumber.java

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 [Sven.Steiniger@newtron.net]
  
  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
  +     * {@link #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 {@link #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: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org