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