| 168 | } |
| 169 | |
| 170 | void IfcGeom::Iterator::process_finished_rep(geometry_conversion_result* rep) { |
| 171 | if (rep->elements.empty()) { |
| 172 | return; |
| 173 | } |
| 174 | |
| 175 | std::lock_guard<std::mutex> lk(element_ready_mutex_); |
| 176 | |
| 177 | all_processed_elements_.insert(all_processed_elements_.end(), rep->elements.begin(), rep->elements.end()); |
| 178 | all_processed_native_elements_.insert(all_processed_native_elements_.end(), rep->breps.begin(), rep->breps.end()); |
| 179 | |
| 180 | if (!task_result_ptr_initialized) { |
| 181 | task_result_iterator_ = all_processed_elements_.begin(); |
| 182 | native_task_result_iterator_ = all_processed_native_elements_.begin(); |
| 183 | task_result_ptr_initialized = true; |
| 184 | } |
| 185 | |
| 186 | progress_ = (int)(++processed_ * 100 / tasks_.size()); |
| 187 | } |
| 188 | |
| 189 | void IfcGeom::Iterator::process_concurrently() { |
| 190 | size_t conc_threads = num_threads_; |