| 167 | } |
| 168 | |
| 169 | bool Finalize(vector<Partition>* results) { |
| 170 | SCOPED_TIMER(split_time_); |
| 171 | bool result = true; |
| 172 | for (int i = 0; i < build_partitions_.size(); ++i) { |
| 173 | if (build_partitions_[i].blocks.size() > 0) { |
| 174 | BuildPartition& build_partition = build_partitions_[i]; |
| 175 | build_partition.num_last_block = NumLastBlock(i); |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | for (int i = 0; i < build_partitions_.size(); ++i) { |
| 180 | if (build_partitions_[i].blocks.size() > 0) { |
| 181 | BuildPartition& build_partition = build_partitions_[i]; |
| 182 | if (TotalTuples(build_partition) > tuples_per_partition_) { |
| 183 | if (Split(build_partition)) { |
| 184 | continue; |
| 185 | } else { |
| 186 | result = false; |
| 187 | } |
| 188 | } |
| 189 | results->push_back(ToOutputPartition(build_partition)); |
| 190 | } |
| 191 | } |
| 192 | return result; |
| 193 | } |
| 194 | |
| 195 | private: |
| 196 | static const int L1_size = 24 * 1024; |