Print

Print


Commit in GeomConverter/src/org/lcsim/detector/identifier on MAIN
IdentifierUtil.java+59added 1.1
JM: Move packing and unpacking methods to utility class.

GeomConverter/src/org/lcsim/detector/identifier
IdentifierUtil.java added at 1.1
diff -N IdentifierUtil.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IdentifierUtil.java	2 May 2007 23:44:57 -0000	1.1
@@ -0,0 +1,59 @@
+package org.lcsim.detector.identifier;
+
+/**
+ * Identifier utility methods.
+ *
+ * @author Jeremy McCormick
+ * @version $Id: IdentifierUtil.java,v 1.1 2007/05/02 23:44:57 jeremy Exp $
+ */
+
+public final class IdentifierUtil
+{
+    private IdentifierUtil()
+    {}
+    
+    public static IIdentifier pack( IExpandedIdentifier id, IIdentifierDictionary iddict )
+    {        
+        long result = 0;
+        int idx = 0;
+        for ( int value : id.getValues() )
+        {                       
+            IIdentifierField field = iddict.getField(idx);
+                        
+            int start = field.getOffset();
+            int length = field.getNumberOfBits();
+            long mask = ((1L<<length) - 1) << start;
+            result &= ~mask;
+            result |= (((long) value)<<start) & mask;
+                        
+            ++idx;
+        }              
+       
+        return new Identifier( result );
+    }
+
+    public static IExpandedIdentifier unpack( IIdentifier compact, IIdentifierDictionary iddict )
+    {        
+        ExpandedIdentifier buffer = new ExpandedIdentifier();
+
+        long id = compact.getValue();
+        
+        for ( IIdentifierField field : iddict.getFields().values() )
+        {                       
+            int start = field.getOffset();
+            int length = field.getNumberOfBits();
+            int mask = (1<<length) - 1;
+            
+            int result = (int) ((id >> start) & mask);
+            if (field.isSigned())
+            {
+                int signBit = 1<<(length-1);
+                if ((result & signBit) != 0) result -= (1<<length);
+            }
+                        
+            buffer.addValue(result);                       
+        }
+               
+        return buffer;
+    }              
+}
\ No newline at end of file
CVSspam 0.2.8