void ConvertLinkedGeoPolygonToManaged()

in src/main/c/h3-java/src/jniapi.c [726:779]


void ConvertLinkedGeoPolygonToManaged(JNIEnv *env,
                                      LinkedGeoPolygon *currentPolygon,
                                      jobject results) {
    while (currentPolygon != NULL) {
        jobject resultLoops = (**env).NewObject(env, java_util_ArrayList,
                                                java_util_ArrayList_init);
        if (resultLoops == NULL) {
            return;
        }

        // Check if the polygon is empty.
        // Don't have to do this other times because a loop can be gauranteed
        // to have coordinates.
        if (resultLoops != NULL && currentPolygon->first != NULL) {
            LinkedGeoLoop *currentLoop = currentPolygon->first;
            while (currentLoop != NULL) {
                jobject resultLoop = (**env).NewObject(
                    env, java_util_ArrayList, java_util_ArrayList_init);
                if (resultLoop == NULL) {
                    return;
                }

                LinkedLatLng *coord = currentLoop->first;
                while (coord != NULL) {
                    jobject v =
                        (**env).NewObject(env, com_uber_h3core_util_LatLng,
                                          com_uber_h3core_util_LatLng_init,
                                          coord->vertex.lat, coord->vertex.lng);
                    if (v == NULL) {
                        return;
                    }

                    (**env).CallBooleanMethod(env, resultLoop,
                                              java_util_ArrayList_add, v);
                    RETURN_ON_EXCEPTION(env);

                    coord = coord->next;
                }

                (**env).CallBooleanMethod(env, resultLoops,
                                          java_util_ArrayList_add, resultLoop);
                RETURN_ON_EXCEPTION(env);

                currentLoop = currentLoop->next;
            }

            (**env).CallBooleanMethod(env, results, java_util_ArrayList_add,
                                      resultLoops);
            RETURN_ON_EXCEPTION(env);
        }

        currentPolygon = currentPolygon->next;
    }
}