Author: mturk
Date: Sat Jun 20 10:02:46 2009
New Revision: 786785

URL: http://svn.apache.org/viewvc?rev=786785&view=rev
Log:
Fix alignment calculation

Modified:
    
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/AbstractStructure.java
    
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestStructure.java

Modified: 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/AbstractStructure.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/AbstractStructure.java?rev=786785&r1=786784&r2=786785&view=diff
==============================================================================
--- 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/AbstractStructure.java
 (original)
+++ 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/AbstractStructure.java
 Sat Jun 20 10:02:46 2009
@@ -76,10 +76,9 @@
                     for (i = 0; i < count; i++) {
                         if (offset[i] == o.value()) {
                             fields[i] = f;
-                            int rsize = getElementSize(f, this);
-                            align     = Math.max(align, Math.min(8, rsize));
-                            esizes[i] = rsize;
+                            esizes[i] = getElementSize(f, this);
                             asizes[i] = getArrayElementLength(f, this);
+                            align     = Math.max(align, esizes[i]);
                         }
                     }
                 }
@@ -93,6 +92,12 @@
                 else
                     sizeof += esizes[i];
             }
+            if (align > Pointer.SIZEOF) {
+               // Align to the pointer size except
+               // for the structures which elements are not
+               // larger the size of a pointer.
+               align = Pointer.SIZEOF;
+                       }
             sizeof = align(sizeof, align);
         }
     }

Modified: 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestStructure.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestStructure.java?rev=786785&r1=786784&r2=786785&view=diff
==============================================================================
--- 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestStructure.java
 (original)
+++ 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestStructure.java
 Sat Jun 20 10:02:46 2009
@@ -118,7 +118,7 @@
     {
         MyUStructure s = new MyUStructure();
         assertEquals("Fields",  4, s.count());
-        assertEquals("Sizeof", 32, s.sizeof());
+        assertEquals("Sizeof", 28, s.sizeof());
     }
 
     public void testOffset()


Reply via email to