Commit in GeomConverter/src/org/lcsim/detector/identifier on MAIN
IIdentifierField.java+8-111.5 -> 1.6
IdentifierField.java+40-431.4 -> 1.5
IdentifierUtil.java+9-111.6 -> 1.7
+57-65
3 modified files
JM: bug fixes for problems with id decoding report by RK

GeomConverter/src/org/lcsim/detector/identifier
IIdentifierField.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- IIdentifierField.java	25 May 2007 20:16:26 -0000	1.5
+++ IIdentifierField.java	1 Nov 2007 00:49:07 -0000	1.6
@@ -6,7 +6,7 @@
  * an ordered collection of these fields.
  *
  * @author Jeremy McCormick
- * @version $Id: IIdentifierField.java,v 1.5 2007/05/25 20:16:26 jeremy Exp $
+ * @version $Id: IIdentifierField.java,v 1.6 2007/11/01 00:49:07 jeremy Exp $
  */
 public interface IIdentifierField
 {
@@ -29,20 +29,17 @@
     public int getOffset();
     
     /**
-     * Get a bit mask for this field with all other bits set to 0.
-     * 
-     * @return The on mask for this field.
+     * Get mask on as long value.
+     * @return The on mask as a long.
      */
-    public long getMaskOn();
+    public long getLongMask();
     
     /**
-     * Get a zeroing bit mask for this field, with this fields bits
-     * set to 0, and all other bits set to 1.
-     * 
-     * @return The off bit mask.
+     * Get mask on as int value.
+     * @return The on mask on an int.
      */
-    public long getMaskOff();
-    
+    public int getIntegerMask();
+        
     /**
      * True if field is capable of holding signed values.
      * @return True if field is signed.

GeomConverter/src/org/lcsim/detector/identifier
IdentifierField.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- IdentifierField.java	19 May 2007 00:39:51 -0000	1.4
+++ IdentifierField.java	1 Nov 2007 00:49:07 -0000	1.5
@@ -4,7 +4,7 @@
  * Implementation of {@link IIdentifierField}.
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierField.java,v 1.4 2007/05/19 00:39:51 jeremy Exp $
+ * @version $Id: IdentifierField.java,v 1.5 2007/11/01 00:49:07 jeremy Exp $
  */
 
 public class IdentifierField implements IIdentifierField
@@ -14,14 +14,13 @@
     private boolean isSigned;
     private String label;
     private int order;
-    long maskOn;
-    long maskOff;
+    long longMask;
+    int intMask;
     
     private static final int MAX_OFFSET=64;
     private static final int MIN_OFFSET=0;
     private static final int MAX_BITS=32;
     private static final int MIN_BITS=1;
-    private static final long BITS32 = 0xFFFFFFFF;
            
     public IdentifierField(String label, int numberOfBits, int offset, boolean isSigned, int order)
     {
@@ -49,16 +48,17 @@
             throw new IllegalArgumentException(label + " - offset + numberOfBits <" + (offset + numberOfBits) + "> is greater than " + MAX_OFFSET);
         }
         
+        if (isSigned && numberOfBits < 2)
+        {
+            throw new IllegalArgumentException("The signed field " + label + " needs at least 2 bits.");
+        }
+        
         this.offset = offset;
-        this.isSigned = isSigned;
-                        
+        this.isSigned = isSigned;                        
         this.order = order;
         
-        // Compute the mask.
-        this.maskOn = ((1L<<numberOfBits) - 1) << offset;
-        
-        // Compute the zeroing mask.
-        this.maskOff = (maskOn) ^ BITS32;
+        this.intMask = (1 << numberOfBits) - 1;
+        this.longMask = ((1L<<numberOfBits) - 1);
     }
     
     public String getLabel()
@@ -66,16 +66,6 @@
         return label;
     }
 
-    public long getMaskOn()
-    {
-        return maskOn;
-    }
-    
-    public long getMaskOff()
-    {
-        return maskOff;
-    }
-
     public int getNumberOfBits()
     {
         return numberOfBits;
@@ -101,53 +91,50 @@
         return getOrder() + ":" + getLabel() + ":" + getOffset() + ":" + getNumberOfBits() + ":" + isSigned() + "\n";
     }
     
+    // FIXME: Move to IdentifierUtil.
     public int unpack( long value )
-    {
+    {        
+        int start = getOffset();
         int length = getNumberOfBits();
-        long mask = getMaskOn();
-                
-        int result = (int) ((value) & mask) >> offset;
+        int mask = getIntegerMask();
         
-        if ( isSigned() ) 
+        int result = (int) ((value >> start) & mask);
+        if (isSigned())
         {
             int signBit = 1<<(length-1);
             if ((result & signBit) != 0) result -= (1<<length);
         }
+               
         return result;
     }
     
+    // FIXME: Move to IdentifierUtil.
     public int unpack( IIdentifier compact )
     {    
         return unpack( compact.getValue());
     }    
     
+    // FIXME: Move to IdentifierUtil.
     public IIdentifier pack( int value )
     {
-        long result=0;
-        int offset = getOffset();
-        long mask = getMaskOn();
-        result &= ~mask;
-        result |= (((long) value )<<offset) & mask;
-        return new Identifier( result );
+        long result = 0;
+        int start = getOffset(); 
+        long mask = getLongMask();
+        result |= (mask & value) << start;
+        return new Identifier(result);        
     }
     
+    // FIXME: Move to IdentifierUtil.
     public void pack( int value, IIdentifier id )
     {
         long result = id.getValue();
-        int offset = getOffset();
-        long mask = getMaskOn();
-        result &= ~mask;
-        long shifted_val = ((long)value) << offset;
-        long masked_val = shifted_val & mask;
-        result |= masked_val;
+        int start = getOffset(); 
+        long mask = getLongMask();
+        result |= (mask & value) << start;
         id.setValue(result);
-        
-        //System.out.println("shifted="+Long.toHexString(shifted_val));
-        //System.out.println("masked="+Long.toHexString(masked_val));
-        //System.out.println("result="+Long.toHexString(result));
-        //System.out.println();
     }
     
+    // FIXME: Move to IdentifierUtil.
     public int getFieldValue( IExpandedIdentifier id )
     {
         if ( !id.isValidIndex(order))
@@ -156,4 +143,14 @@
         }
         return id.getValue(order);
     }
+
+    public int getIntegerMask()
+    {
+        return this.intMask;
+    }
+
+    public long getLongMask()
+    {
+        return this.longMask;
+    }
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/detector/identifier
IdentifierUtil.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- IdentifierUtil.java	28 Aug 2007 22:25:46 -0000	1.6
+++ IdentifierUtil.java	1 Nov 2007 00:49:07 -0000	1.7
@@ -18,7 +18,7 @@
  * @see IExpandedIdentifier
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierUtil.java,v 1.6 2007/08/28 22:25:46 jeremy Exp $
+ * @version $Id: IdentifierUtil.java,v 1.7 2007/11/01 00:49:07 jeremy Exp $
  */
 public final class IdentifierUtil
 {
@@ -67,7 +67,7 @@
                 throw new IllegalArgumentException("Start index <" + startIndex + "> is bigger than end index <" + endIndex + ">.");
             }
         }            
-        
+                       
         for ( int i=0; i<iddict.getNumberOfFields(); i++)
         {            
             if ( i >= startIndex  && i <= endIndex )
@@ -76,10 +76,9 @@
                 
                 int start = field.getOffset();
                 int length = field.getNumberOfBits();
-                long mask = field.getMaskOn();
+                int mask = field.getIntegerMask();
                 
-                int result = (int) (( id ) & mask) >> start;
-
+                int result = (int) ((id >> start) & mask);
                 if (field.isSigned())
                 {
                     int signBit = 1<<(length-1);
@@ -142,16 +141,15 @@
             {
                 throw new IllegalArgumentException("Start index <" + startIndex + "> is bigger than end index <" + endIndex + ">.");
             }
-        }            
-                
+        }           
+                             
         for ( int i=startIndex; i<=endIndex; i++ )
         {            
             IIdentifierField field = iddict.getField(i);
             
-            int offset = field.getOffset();
-            long mask = field.getMaskOn();
-            result &= ~mask;
-            result |= (((long) id.getValue(i))<<offset) & mask;
+            int start = field.getOffset(); 
+            long mask = field.getLongMask();
+            result |= (mask & id.getValue(i)) << start;
         }
         
         return new Identifier( result );
CVSspam 0.2.8