Project/build/packaging adjustments + version 1.3
[measurements/measurements.git] / src / net / mattmccutchen / measurements / BitFlicking.java
1 package net.mattmccutchen.measurements;
2
3 public class BitFlicking {
4         private BitFlicking() {}
5         
6         public static void storeLong(byte[] data, long val, int off) {
7                 //System.err.println("Store long: " + val);
8                 data[off  ] = (byte)(val >> 56);
9                 data[off+1] = (byte)(val >> 48);
10                 data[off+2] = (byte)(val >> 40);
11                 data[off+3] = (byte)(val >> 32);
12                 data[off+4] = (byte)(val >> 24);
13                 data[off+5] = (byte)(val >> 16);
14                 data[off+6] = (byte)(val >>  8);
15                 data[off+7] = (byte)(val      );
16         }
17         
18         public static void storeDouble(byte[] data, double val, int off) {
19                 storeLong(data, Double.doubleToRawLongBits(val), off);
20         }
21         
22         public static long loadLong(byte[] data, int off) {
23                 long val =
24                         (((long)data[off  ] & 0xFF) << 56)
25                         | ((long)(data[off+1] & 0xFF) << 48) 
26                         | ((long)(data[off+2] & 0xFF) << 40) 
27                         | ((long)(data[off+3] & 0xFF) << 32) 
28                         | ((long)(data[off+4] & 0xFF) << 24) 
29                         | ((long)(data[off+5] & 0xFF) << 16) 
30                         | ((long)(data[off+6] & 0xFF) <<  8) 
31                         | (      (data[off+7] & 0xFF)      );
32                 //System.err.println("Load long: " + val);
33                 return val;
34         }
35         
36         public static double loadDouble(byte[] data, int off) {
37                 return Double.longBitsToDouble(loadLong(data, off));
38         }
39 }