add PCLOC annotations. all three benchmarks are type-checked now.
[IRC.git] / Robust / src / Benchmarks / SSJava / MP3Decoder / SideInfoBuffer.java
1 @LATTICE("BUF<IDX,V,IDX*")
2 @METHODDEFAULT("THIS<IN,THISLOC=THIS,RETURNLOC=THIS")
3 public class SideInfoBuffer {
4
5   /**
6    * The frame buffer that holds the data for the current frame.
7    */
8   @LOC("BUF")
9   private final int[] framebuffer = new int[BUFFER_INT_SIZE];
10
11   /**
12    * Maximum size of the frame buffer.
13    */
14   private static final int BUFFER_INT_SIZE = 433;
15
16   /**
17    * Index into <code>framebuffer</code> where the next bits are retrieved.
18    */
19   @LOC("IDX")
20   private int wordpointer;
21
22   /**
23    * Number (0-31, from MSB to LSB) of next bit for get_bits()
24    */
25   @LOC("IDX")
26   private int bitindex;
27
28   @LOC("V")
29   private int main_data_begin;
30
31   public int getMain_data_begin() {
32     return main_data_begin;
33   }
34
35   public void setMain_data_begin(@LOC("IN") int main_data_begin) {
36     this.main_data_begin = main_data_begin;
37   }
38
39   private static final int bitmask[] = {
40       0, // dummy
41       0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F,
42       0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, 0x00001FFF, 0x00003FFF,
43       0x00007FFF, 0x0000FFFF, 0x0001FFFF };
44
45   @LATTICE("OUT<THIS,THIS<P,P<IN,OUT*,THISLOC=THIS,RETURNLOC=OUT")
46   @PCLOC("P")
47   public int get_bits(@LOC("IN") int number_of_bits) {
48     @LOC("OUT") int returnvalue = 0;
49     @LOC("THIS,SideInfoBuffer.IDX") int sum = bitindex + number_of_bits;
50     // System.out.println("bitindex=" + bitindex + " wordpointer="
51     // + wordpointer);
52     // E.B
53     // There is a problem here, wordpointer could be -1 ?!
54     if (wordpointer < 0)
55       wordpointer = 0;
56     // E.B : End.
57
58     if (sum <= 32) {
59       // all bits contained in *wordpointer
60       returnvalue = (framebuffer[wordpointer] >>> (32 - sum)) & bitmask[number_of_bits];
61       // returnvalue = (wordpointer[0] >> (32 - sum)) &
62       // bitmask[number_of_bits];
63       if ((bitindex += number_of_bits) == 32) {
64         bitindex = 0;
65         wordpointer++; // added by me!
66       }
67       return returnvalue;
68     }
69
70     // E.B : Check that ?
71     // ((short[])&returnvalue)[0] = ((short[])wordpointer + 1)[0];
72     // wordpointer++; // Added by me!
73     // ((short[])&returnvalue + 1)[0] = ((short[])wordpointer)[0];
74     @LOC("OUT") int Right = (framebuffer[wordpointer] & 0x0000FFFF);
75     wordpointer++;
76     @LOC("OUT") int Left = (framebuffer[wordpointer] & 0xFFFF0000);
77     returnvalue = ((Right << 16) & 0xFFFF0000) | ((Left >>> 16) & 0x0000FFFF);
78
79     returnvalue >>>= 48 - sum; // returnvalue >>= 16 - (number_of_bits - (32
80     // - bitindex))
81     returnvalue &= bitmask[number_of_bits];
82     bitindex = sum - 32;
83     return returnvalue;
84   }
85
86   public void setBuffer(int idx, int value) {
87     framebuffer[idx] = value;
88   }
89
90 }