1596{
1597
1599 return;
1600
1601
1602
1607 uint32_t keptn = 2;
1608
1609
1610
1611
1612
1613 uint32_t *iterator_stack =
lwalloc(
sizeof(uint32_t) * pa->
npoints);
1614 iterator_stack[0] = 0;
1615 uint32_t iterator_stack_size = 1;
1616
1617 uint32_t it_first = 0;
1618 uint32_t it_last = pa->
npoints - 1;
1619
1620 const double tolerance_sqr = tolerance * tolerance;
1621
1622 double it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1623
1624 while (iterator_stack_size)
1625 {
1627 if (split == it_first)
1628 {
1629 it_first = it_last;
1630 it_last = iterator_stack[--iterator_stack_size];
1631 }
1632 else
1633 {
1635 keptn++;
1636
1637 iterator_stack[iterator_stack_size++] = it_last;
1638 it_last = split;
1639 it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1640 }
1641 }
1642
1644
1645 size_t kept_it = 1;
1646 if (keptn == 2)
1647 {
1648
1649
1652 pt_size);
1653 }
1654 else
1655 {
1656 for (uint32_t i = 1; i < pa->
npoints; i++)
1657 {
1658 if (kept_points[i])
1659 {
1662 pt_size);
1663 kept_it++;
1664 }
1665 }
1666 }
1668
1671}
void * lwalloc(size_t size)
#define LW_TRUE
Return types for functions with status returns.
static size_t ptarray_point_size(const POINTARRAY *pa)
static uint32_t ptarray_dp_findsplit_in_place(const POINTARRAY *pts, uint32_t it_first, uint32_t it_last, double max_distance_sqr)
uint8_t * serialized_pointlist