This implements the missing TextLayout.hashCode() method to be in sync
with the equals() method.

2006-11-22  Roman Kennke  <[EMAIL PROTECTED]>

        * java/awt/font/TextLayout.java
        (hash): New field. Caches the hash code.
        (hashCode): Implemented.

/Roman

Index: java/awt/font/TextLayout.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/awt/font/TextLayout.java,v
retrieving revision 1.18
diff -u -1 -5 -r1.18 TextLayout.java
--- java/awt/font/TextLayout.java	22 Nov 2006 14:39:36 -0000	1.18
+++ java/awt/font/TextLayout.java	22 Nov 2006 16:05:05 -0000
@@ -152,30 +152,35 @@
   private Bidi bidi;
 
   /**
    * Mpas the logical position of each individual character in the original
    * string to its visual position.
    */
   private int[] logicalToVisual;
 
   /**
    * Maps visual positions of a character to its logical position
    * in the original string.
    */
   private int[] visualToLogical;
 
   /**
+   * The cached hashCode.
+   */
+  private int hash;
+
+  /**
    * The default caret policy.
    */
   public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY =
     new CaretPolicy();
 
   /**
    * Constructs a TextLayout.
    */
   public TextLayout (String str, Font font, FontRenderContext frc) 
   {
     this.font = font;
     this.frc = frc;
     string = str.toCharArray();
     offset = 0;
     length = this.string.length;
@@ -1079,33 +1084,39 @@
       }
     return hitInfo;
   }
 
   public boolean isLeftToRight ()
   {
     return leftToRight;
   }
 
   public boolean isVertical ()
   {
     return false; // FIXME: How do you create a vertical layout?
   }
 
   public int hashCode ()
-    throws NotImplementedException
   {
-    throw new Error ("not implemented");
+    // This is implemented in sync to equals().
+    if (hash == 0 && runs.length > 0)
+      {
+        hash = runs.length;
+        for (int i = 0; i < runs.length; i++)
+          hash ^= runs[i].glyphVector.hashCode();
+      }
+    return hash;
   }
 
   public String toString ()
   {
     return "TextLayout [string:"+ new String(string, offset, length)
     +", Font:"+font+" Rendercontext:"+
       frc+"]";
   }
 
   /**
    * Returns the natural bounds of that text layout. This is made up
    * of the ascent plus descent and the text advance.
    *
    * @return the natural bounds of that text layout
    */

Reply via email to