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;
}
}