void output_multi_t::enqueue_ways(pending_queue_t &job_queue, osmid_t id, size_t output_id, size_t& added) { //make sure we get the one passed in if(!ways_done_tracker->is_marked(id) && id_tracker::is_valid(id)) { job_queue.push(pending_job_t(id, output_id)); added++; } //grab the first one or bail if its not valid osmid_t popped = ways_pending_tracker->pop_mark(); if(!id_tracker::is_valid(popped)) return; //get all the ones up to the id that was passed in while (popped < id) { if (!ways_done_tracker->is_marked(popped)) { job_queue.push(pending_job_t(popped, output_id)); added++; } popped = ways_pending_tracker->pop_mark(); } //make sure to get this one as well and move to the next if(popped == id) { popped = ways_pending_tracker->pop_mark(); } if (!ways_done_tracker->is_marked(popped) && id_tracker::is_valid(popped)) { job_queue.push(pending_job_t(popped, output_id)); added++; } }
void output_pgsql_t::enqueue_ways(pending_queue_t &job_queue, osmid_t id, size_t output_id, size_t& added) { osmid_t const prev = ways_pending_tracker.last_returned(); if (id_tracker::is_valid(prev) && prev >= id) { if (prev > id) { job_queue.push(pending_job_t(id, output_id)); } // already done the job return; } //make sure we get the one passed in if(!ways_done_tracker->is_marked(id) && id_tracker::is_valid(id)) { job_queue.push(pending_job_t(id, output_id)); added++; } //grab the first one or bail if its not valid osmid_t popped = ways_pending_tracker.pop_mark(); if(!id_tracker::is_valid(popped)) return; //get all the ones up to the id that was passed in while (popped < id) { if (!ways_done_tracker->is_marked(popped)) { job_queue.push(pending_job_t(popped, output_id)); added++; } popped = ways_pending_tracker.pop_mark(); } //make sure to get this one as well and move to the next if(popped > id) { if (!ways_done_tracker->is_marked(popped) && id_tracker::is_valid(popped)) { job_queue.push(pending_job_t(popped, output_id)); added++; } } }