]> git.donarmstrong.com Git - rsem.git/blob - simul.h
RSEM Source Codes
[rsem.git] / simul.h
1 #ifndef SIMUL_H_
2 #define SIMUL_H_
3
4 #include<cassert>
5
6
7 class simul {
8 public:
9
10         virtual ~simul() {}
11         // interval : [,)
12         // random number should be in [0, arr[len - 1])
13         // If by chance arr[len - 1] == 0.0, one possibility is to sample uniformly from 0 ... len - 1
14         int sample(double* arr, int len) {
15           int l, r, mid;
16           double prb = random() * arr[len - 1];
17
18
19           l = 0; r = len - 1;
20           while (l <= r) {
21             mid = (l + r) / 2;
22             if (arr[mid] <= prb) l = mid + 1;
23             else r = mid - 1;
24           }
25
26           if (l >= len) { printf("%d %lf %lf\n", len, arr[len - 1], prb); }
27           assert(l < len);
28
29           return l;
30         }
31
32         virtual double random() { return 0.0; };
33
34 private:
35 };
36
37 #endif /* SIMUL_H_ */
38