View Javadoc

1   package org.lcsim.geometry.util;
2   
3   /**
4    * Does the opposite of IDDecoder
5    * @author tonyj
6    */
7   public class IDEncoder
8   {
9      private IDDescriptor desc;
10     private long id;
11     /** Creates a new instance of IIDecoder */
12     public IDEncoder(IDDescriptor desc)
13     {
14        this.desc = desc;
15     }
16     public long setValue(String name, int value)
17     {
18        return setValue(desc.indexOf(name),value);  
19     }
20     public long setValue(int index, int value)
21     {
22        int start = desc.fieldStart(index);
23        int length = desc.fieldLength(index);
24        long mask = ((1L<<length) - 1) << start;
25        id &= ~mask;
26        id |= (((long) value)<<start) & mask;
27        
28        return id;
29     }
30     public long setValues(int[] values)
31     {
32        if (values.length != desc.fieldCount()) throw new IllegalArgumentException("Invalid array length");
33        long result = 0;
34        for (int i=0; i<values.length; i++)
35        {
36           int start = desc.fieldStart(i);
37           int length = desc.fieldLength(i);
38           long mask = ((1L<<length) - 1);
39           result |= (mask & values[i]) << start;
40        }
41        return id = result;      
42     }
43     public long getID()
44     {
45        return id;
46     }
47  }