GeomConverter/src/org/lcsim/geometry/util
diff -u -r1.3 -r1.4
--- IDDecoder.java 10 May 2005 18:25:13 -0000 1.3
+++ IDDecoder.java 13 Jul 2005 23:38:13 -0000 1.4
@@ -6,63 +6,76 @@
*/
public class IDDecoder
{
- private IDDescriptor desc;
- private long id;
- /** Creates a new instance of IIDecoder */
- public IDDecoder(IDDescriptor desc)
- {
- this.desc = desc;
- }
- public void setID(long id)
- {
- this.id = id;
- }
- public int getValue(String name)
- {
- return getValue(desc.indexOf(name));
- }
- public int getValue(int index)
- {
- int start = desc.fieldStart(index);
- int length = desc.fieldLength(index);
- int mask = (1<<length) - 1;
-
- int result = (int) ((id >> start) & mask);
- if (desc.isSigned(index))
- {
- int signBit = 1<<(length-1);
- if ((result & signBit) != 0) result -= (1<<length);
- }
- return result;
- }
- public int[] getValues(int[] buffer)
- {
- if (buffer.length != desc.fieldCount()) throw new IllegalArgumentException("Invalid buffer length");
- for (int i=0; i<buffer.length; i++)
- {
- buffer[i] = getValue(i);
- }
- return buffer;
- }
- public int getFieldCount()
- {
- return desc.fieldCount();
- }
- public String getFieldName(int index)
- {
- return desc.fieldName(index);
- }
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- for (int i=0; i<desc.fieldCount();)
- {
- sb.append(desc.fieldName(i));
- sb.append(':');
- sb.append(getValue(i));
- if (++i >= desc.fieldCount()) break;
- sb.append(',');
- }
- return sb.toString();
- }
+ private IDDescriptor desc;
+ private long id;
+
+ /** Creates a new instance of IIDecoder */
+ public IDDecoder(IDDescriptor desc)
+ {
+ this.desc = desc;
+ }
+
+ public void setID(long id)
+ {
+ this.id = id;
+ }
+
+ public int getFieldIndex(String name)
+ {
+ return desc.indexOf(name);
+ }
+
+ public int getValue(String name)
+ {
+ return getValue(desc.indexOf(name));
+ }
+
+ public int getValue(int index)
+ {
+ int start = desc.fieldStart(index);
+ int length = desc.fieldLength(index);
+ int mask = (1<<length) - 1;
+
+ int result = (int) ((id >> start) & mask);
+ if (desc.isSigned(index))
+ {
+ int signBit = 1<<(length-1);
+ if ((result & signBit) != 0) result -= (1<<length);
+ }
+ return result;
+ }
+
+ public int[] getValues(int[] buffer)
+ {
+ if (buffer.length != desc.fieldCount()) throw new IllegalArgumentException("Invalid buffer length");
+ for (int i=0; i<buffer.length; i++)
+ {
+ buffer[i] = getValue(i);
+ }
+ return buffer;
+ }
+
+ public int getFieldCount()
+ {
+ return desc.fieldCount();
+ }
+
+ public String getFieldName(int index)
+ {
+ return desc.fieldName(index);
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+ for (int i=0; i<desc.fieldCount();)
+ {
+ sb.append(desc.fieldName(i));
+ sb.append(':');
+ sb.append(getValue(i));
+ if (++i >= desc.fieldCount()) break;
+ sb.append(',');
+ }
+ return sb.toString();
+ }
}