For now this is all synchronous
| 53 | |
| 54 | // For now this is all synchronous |
| 55 | void StageRunner::run() |
| 56 | { |
| 57 | point_count_t keepSize = m_keeps->size(); |
| 58 | |
| 59 | // Don't run the stage if we're a filter and we're empty |
| 60 | if (dynamic_cast<Filter *>(m_stage) && keepSize == 0) |
| 61 | m_stage->log()->get(LogLevel::Debug) << "'where' filtering removed all points or " |
| 62 | "the reader is empty. Filter '" << m_stage->tag() << "' was not applied."; |
| 63 | else |
| 64 | m_viewSet = m_stage->run(m_keeps); |
| 65 | |
| 66 | if (m_skips->size() == 0) |
| 67 | return; |
| 68 | |
| 69 | if (m_stage->mergeMode() == Filter::WhereMergeMode::True) |
| 70 | { |
| 71 | if (m_viewSet.size()) |
| 72 | { |
| 73 | (*m_viewSet.begin())->append(*m_skips); |
| 74 | return; |
| 75 | } |
| 76 | } |
| 77 | else if (m_stage->mergeMode() == Filter::WhereMergeMode::Auto) |
| 78 | { |
| 79 | if (m_viewSet.size() == 1) |
| 80 | { |
| 81 | PointViewPtr keeps = *m_viewSet.begin(); |
| 82 | if (keeps.get() == m_keeps.get() && keepSize == keeps->size()) |
| 83 | { |
| 84 | keeps->append(*m_skips); |
| 85 | return; |
| 86 | } |
| 87 | } |
| 88 | } |
| 89 | m_viewSet.insert(m_skips); |
| 90 | } |
| 91 | |
| 92 | PointViewSet StageRunner::wait() |
| 93 | { |