6 modified files
GeomConverter/src/org/lcsim/detector/identifier
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
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
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
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
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
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