Commit in GeomConverter on MAIN
src/org/lcsim/detector/identifier/ExpandedIdentifier.java+5-21.4 -> 1.5
                                 /IIdentifierField.java+19-41.3 -> 1.4
                                 /IdentifierField.java+28-71.3 -> 1.4
                                 /IdentifierHelper.java+2-21.7 -> 1.8
                                 /IdentifierUtil.java+7-341.4 -> 1.5
test/org/lcsim/detector/identifier/IdentifierHelperTest.java+21-111.4 -> 1.5
+82-60
6 modified files


GeomConverter/src/org/lcsim/detector/identifier
ExpandedIdentifier.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- ExpandedIdentifier.java	18 May 2007 23:47:33 -0000	1.4
+++ ExpandedIdentifier.java	19 May 2007 00:39:51 -0000	1.5
@@ -7,7 +7,7 @@
  * Implementation of {@link IExpandedIdentifier}.
  *
  * @author Jeremy McCormick
- * @version $Id: ExpandedIdentifier.java,v 1.4 2007/05/18 23:47:33 jeremy Exp $
+ * @version $Id: ExpandedIdentifier.java,v 1.5 2007/05/19 00:39:51 jeremy Exp $
  */
 
 public class ExpandedIdentifier
@@ -62,7 +62,10 @@
         String[] buffer = values.split("/");
         for ( String value : buffer )
         {
-            addValue( Integer.parseInt( value ) );
+            if ( !value.equals("")) 
+            {
+                addValue( Integer.parseInt( value ) );
+            }
         }
     }
 

GeomConverter/src/org/lcsim/detector/identifier
IIdentifierField.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- IIdentifierField.java	18 May 2007 23:47:33 -0000	1.3
+++ IIdentifierField.java	19 May 2007 00:39:51 -0000	1.4
@@ -6,7 +6,7 @@
  * an ordered collection of these fields.
  *
  * @author Jeremy McCormick
- * @version $Id: IIdentifierField.java,v 1.3 2007/05/18 23:47:33 jeremy Exp $
+ * @version $Id: IIdentifierField.java,v 1.4 2007/05/19 00:39:51 jeremy Exp $
  */
 public interface IIdentifierField
 {
@@ -56,16 +56,22 @@
      * @return The order this field in the id.
      */
     public int getOrder();
-    
+         
     /**
-     * Given a 64-bit {@link IIdentifier}, unpack and return 
-     * the value of this field to an <code>int</code>.
+     * Unpack and return the value of this field from a 64-bit {@link IIdentifier}.
      * 
      * @return Field's int value. 
      */
     public int unpack(IIdentifier id);
     
     /**
+     * Unpack and return the value of this field from a raw long.
+     * 
+     * @return Field's int value. 
+     */    
+    public int unpack( long value );    
+    
+    /**
      * Pack a single value of this field into a {@link IIdentifier}.
      * 
      * @param value
@@ -74,6 +80,15 @@
     public IIdentifier pack( int value );
     
     /**
+     * Pack a single value this field into an existing {@link IIdentifier},
+     * preserving the other field values that may be present.
+     * 
+     * @param value  The field value.
+     * @param id     An Identifier.
+     */    
+    public void pack( int value, IIdentifier id );    
+            
+    /**
      * Get the field value from an {@link IExpandedIdentifier}.
      * 
      * @param id The <code>ExpandedIdentifier</code>.

GeomConverter/src/org/lcsim/detector/identifier
IdentifierField.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- IdentifierField.java	18 May 2007 23:47:33 -0000	1.3
+++ IdentifierField.java	19 May 2007 00:39:51 -0000	1.4
@@ -4,7 +4,7 @@
  * Implementation of {@link IIdentifierField}.
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierField.java,v 1.3 2007/05/18 23:47:33 jeremy Exp $
+ * @version $Id: IdentifierField.java,v 1.4 2007/05/19 00:39:51 jeremy Exp $
  */
 
 public class IdentifierField implements IIdentifierField
@@ -101,32 +101,53 @@
         return getOrder() + ":" + getLabel() + ":" + getOffset() + ":" + getNumberOfBits() + ":" + isSigned() + "\n";
     }
     
-    public int unpack( IIdentifier compact )
-    {                
+    public int unpack( long value )
+    {
         int length = getNumberOfBits();
         long mask = getMaskOn();
                 
-        int result = (int) ((compact.getValue()) & mask) >> offset;
+        int result = (int) ((value) & mask) >> offset;
         
         if ( isSigned() ) 
         {
             int signBit = 1<<(length-1);
             if ((result & signBit) != 0) result -= (1<<length);
         }
-        return result;        
+        return result;
+    }
+    
+    public int unpack( IIdentifier compact )
+    {    
+        return unpack( compact.getValue());
     }    
     
     public IIdentifier pack( int value )
     {
         long result=0;
         int offset = getOffset();
-        int length = getNumberOfBits();
-        long mask = ((1L<<length) - 1) << offset;
+        long mask = getMaskOn();
         result &= ~mask;
         result |= (((long) value )<<offset) & mask;
         return new Identifier( result );
     }
     
+    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;
+        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();
+    }
+    
     public int getFieldValue( IExpandedIdentifier id )
     {
         if ( !id.isValidIndex(order))

GeomConverter/src/org/lcsim/detector/identifier
IdentifierHelper.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- IdentifierHelper.java	11 May 2007 00:21:09 -0000	1.7
+++ IdentifierHelper.java	19 May 2007 00:39:51 -0000	1.8
@@ -5,7 +5,7 @@
  *  Implementation of {@link IIdentifierHelper}.
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierHelper.java,v 1.7 2007/05/11 00:21:09 jeremy Exp $
+ * @version $Id: IdentifierHelper.java,v 1.8 2007/05/19 00:39:51 jeremy Exp $
  */
 
 public class IdentifierHelper
@@ -45,7 +45,7 @@
     
     public int getValue( IIdentifier compact, IIdentifierField desc )
     {
-        return IdentifierUtil.getValue( iddict, compact, desc );
+        return IdentifierUtil.getValue( compact, desc );
     }
     
     public int getValue( IIdentifier compact, int field )

GeomConverter/src/org/lcsim/detector/identifier
IdentifierUtil.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- IdentifierUtil.java	18 May 2007 23:47:33 -0000	1.4
+++ IdentifierUtil.java	19 May 2007 00:39:51 -0000	1.5
@@ -15,7 +15,7 @@
  * @see IExpandedIdentifier
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierUtil.java,v 1.4 2007/05/18 23:47:33 jeremy Exp $
+ * @version $Id: IdentifierUtil.java,v 1.5 2007/05/19 00:39:51 jeremy Exp $
  */
 public final class IdentifierUtil
 {
@@ -68,31 +68,21 @@
         for ( int i=0; i<iddict.getNumberOfFields(); i++)
         {            
             if ( i >= startIndex  && i <= endIndex )
-            {
-                //System.out.println(iddict.getField(i).getLabel());
-                                                
+            {                                                
                 IIdentifierField field = iddict.getField(i);
                 
-                int checkVal = field.unpack(compact);
-                //System.out.println("checkVal="+checkVal);
-
                 int start = field.getOffset();
                 int length = field.getNumberOfBits();
-                int mask = (1<<length) - 1;
-                //long mask = field.getMaskOn();
+                long mask = field.getMaskOn();
                 
-                //int result = (int) (( id ) & mask) >> start;
+                int result = (int) (( id ) & mask) >> start;
 
-                int result = (int) ((id >> start) & mask);
                 if (field.isSigned())
                 {
                     int signBit = 1<<(length-1);
                     if ((result & signBit) != 0) result -= (1<<length);
                 }
                 
-                //System.out.println("result="+result);
-                //System.out.println();
-
                 buffer.addValue(result);
             }
             else
@@ -105,34 +95,19 @@
     }           
     
     
-    public static int getValue( IIdentifierDictionary iddict, IIdentifier compact, IIdentifierField desc )
+    public static int getValue( IIdentifier compact, IIdentifierField desc )
     {             
         return desc.unpack(compact);
-        /*
-        int start = desc.getOffset();
-        int length = desc.getNumberOfBits();
-        long mask = desc.getMaskOn();
-                
-        int result = (int) ((compact.getValue() >> start) & mask);
-        
-        if ( desc.isSigned() ) 
-        {
-            int signBit = 1<<(length-1);
-            if ((result & signBit) != 0) result -= (1<<length);
-        }
-        return result;
-        */        
     }
     
     public static int getValue( IIdentifierDictionary iddict, IIdentifier compact, int field )
     {        
-        return IdentifierUtil.getValue( iddict, compact, iddict.getField( field ) );
+        return IdentifierUtil.getValue( compact, iddict.getField( field ) );
     }
     
     public static int getValue( IIdentifierDictionary iddict, IIdentifier compact, String field )
     {
-        int idx = iddict.getFieldIndex( field );
-        return IdentifierUtil.getValue( iddict, compact, idx );
+        return IdentifierUtil.getValue( compact, iddict.getField(field) );
     }
     
     public static IIdentifier pack( IIdentifierDictionary iddict, IExpandedIdentifier id, int startIndex, int endIndex )
@@ -171,8 +146,6 @@
             IIdentifierField field = iddict.getField(i);
             
             int offset = field.getOffset();
-            //int length = field.getNumberOfBits();
-            //long mask = ((1L<<length) - 1) << offset;
             long mask = field.getMaskOn();
             result &= ~mask;
             result |= (((long) id.getValue(i))<<offset) & mask;

GeomConverter/test/org/lcsim/detector/identifier
IdentifierHelperTest.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- IdentifierHelperTest.java	18 May 2007 23:47:34 -0000	1.4
+++ IdentifierHelperTest.java	19 May 2007 00:39:51 -0000	1.5
@@ -10,7 +10,7 @@
  * on {@link IIdentifierHelper}.
  *
  * @author Jeremy McCormick
- * @version $Id: IdentifierHelperTest.java,v 1.4 2007/05/18 23:47:34 jeremy Exp $
+ * @version $Id: IdentifierHelperTest.java,v 1.5 2007/05/19 00:39:51 jeremy Exp $
  */
 
 public class IdentifierHelperTest
@@ -27,9 +27,7 @@
     }
     
     public void testGetValue()
-    {        
-        System.out.println("testGetValue");
-        
+    {                
         IIdentifierDictionary iddict = new IdentifierDictionary("test1");
         iddict.addField(new IdentifierField("field1",8, 0,  false,  0 ));
         iddict.addField(new IdentifierField("field2",8, 8,  true,   1 ));
@@ -70,9 +68,7 @@
     }
     
     public void testUnpack()
-    {
-        System.out.println("testUnpack");
-        
+    {        
         IIdentifierDictionary iddict = new IdentifierDictionary("test2");
         iddict.addField(new IdentifierField("field1",8,0,false, 0));
         iddict.addField(new IdentifierField("field2",8,8,true, 1));
@@ -98,9 +94,7 @@
     }
     
     public void testPack()
-    {
-        System.out.println("testPack");
-        
+    {        
         IIdentifierDictionary iddict = new IdentifierDictionary("test3");
         
         iddict.addField(new IdentifierField("field1",8, 0,  false,  0 ));
@@ -124,7 +118,23 @@
         
         compactId = helper.pack(expId);
         expIdCheck = helper.unpack( compactId );
-        
+                
         assertTrue( "ExpandedIdentifiers do not match!", expId.equals( expIdCheck ));        
     }
+    
+    public void testFieldPack()
+    {
+        IIdentifierDictionary iddict = new IdentifierDictionary("test3");
+        
+        iddict.addField(new IdentifierField("field1", 16, 0,  false, 0 ));
+        iddict.addField(new IdentifierField("field2", 16, 16, true, 1 ));
+        IdentifierHelper helper = new IdentifierHelper(iddict);
+        IIdentifier check = helper.pack( new ExpandedIdentifier( "/10/-11" ) );
+        
+        IIdentifier id = new Identifier();
+        iddict.getField(0).pack(10,id);
+        iddict.getField(1).pack(-11,id);
+        
+        assertEquals( "Field packed id does not match compact!", id, check);
+    }
 }
\ No newline at end of file
CVSspam 0.2.8