static inline void add_to_hull(point_type const& p, container_type& output) { typedef typename strategy::side::services::default_strategy<cs_tag>::type side; output.push_back(p); std::size_t output_size = output.size(); while (output_size >= 3) { rev_iterator rit = output.rbegin(); point_type const last = *rit++; point_type const& last2 = *rit++; if (Factor * side::apply(*rit, last, last2) <= 0) { // Remove last two points from stack, and add last again // This is much faster then erasing the one but last. output.pop_back(); output.pop_back(); output.push_back(last); output_size--; } else { return; } } }
static const_reverse_iterator rbegin(const container_type& p) { return p.rbegin(); }