void GENERIC_LOOP_ALGO()

in src/h3lib/include/polygonAlgos.h [137:182]


void GENERIC_LOOP_ALGO(bboxFrom)(const TYPE* loop, BBox* bbox) {
    // Early exit if there are no vertices
    if (IS_EMPTY(loop)) {
        *bbox = (BBox){0};
        return;
    }

    bbox->south = DBL_MAX;
    bbox->west = DBL_MAX;
    bbox->north = -DBL_MAX;
    bbox->east = -DBL_MAX;
    double minPosLon = DBL_MAX;
    double maxNegLon = -DBL_MAX;
    bool isTransmeridian = false;

    double lat;
    double lon;
    GeoCoord coord;
    GeoCoord next;

    INIT_ITERATION;

    while (true) {
        ITERATE(loop, coord, next);

        lat = coord.lat;
        lon = coord.lon;
        if (lat < bbox->south) bbox->south = lat;
        if (lon < bbox->west) bbox->west = lon;
        if (lat > bbox->north) bbox->north = lat;
        if (lon > bbox->east) bbox->east = lon;
        // Save the min positive and max negative longitude for
        // use in the transmeridian case
        if (lon > 0 && lon < minPosLon) minPosLon = lon;
        if (lon < 0 && lon > maxNegLon) maxNegLon = lon;
        // check for arcs > 180 degrees longitude, flagging as transmeridian
        if (fabs(lon - next.lon) > M_PI) {
            isTransmeridian = true;
        }
    }
    // Swap east and west if transmeridian
    if (isTransmeridian) {
        bbox->east = maxNegLon;
        bbox->west = minPosLon;
    }
}