| 153 | } |
| 154 | |
| 155 | void WeightedPicker::SetWeightsFromArray(int N, const int32* weights) { |
| 156 | Resize(N); |
| 157 | |
| 158 | // Initialize leaves |
| 159 | int32* leaves = level_[num_levels_ - 1]; |
| 160 | for (int i = 0; i < N_; i++) leaves[i] = weights[i]; |
| 161 | for (int i = N_; i < LevelSize(num_levels_ - 1); i++) leaves[i] = 0; |
| 162 | |
| 163 | // Now sum up towards the root |
| 164 | RebuildTreeWeights(); |
| 165 | } |
| 166 | |
| 167 | void WeightedPicker::RebuildTreeWeights() { |
| 168 | for (int l = num_levels_ - 2; l >= 0; l--) { |