#pragma once #include #include #include namespace mapbox { namespace geometry { namespace wagyu { template using scanbeam_list = std::vector; template void insert_sorted_scanbeam(scanbeam_list& scanbeam, T& t) { typename scanbeam_list::iterator i = std::lower_bound(scanbeam.begin(), scanbeam.end(), t); if (i == scanbeam.end() || t < *i) { scanbeam.insert(i, t); } } template bool pop_from_scanbeam(T& Y, scanbeam_list& scanbeam) { if (scanbeam.empty()) { return false; } Y = scanbeam.back(); scanbeam.pop_back(); return true; } template void setup_scanbeam(local_minimum_list& minima_list, scanbeam_list& scanbeam) { scanbeam.reserve(minima_list.size()); for (auto lm = minima_list.begin(); lm != minima_list.end(); ++lm) { scanbeam.push_back(lm->y); } std::sort(scanbeam.begin(), scanbeam.end()); } } // namespace wagyu } // namespace geometry } // namespace mapbox