diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d10bc7..2202323 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,11 @@ file [H3Core.java](./src/main/java/com/uber/h3core/H3Core.java), and support
for the Linux x64 and Darwin x64 platforms.
## Unreleased Changes
+### Added
+- `reverseDirectedEdge` function. (#207)
+
+### Changed
+- Upgraded the core library to v4.5.0. (#207)
## [4.4.0] - 2025-12-12
### Added
diff --git a/README.md b/README.md
index f1ec693..7eb0ab6 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
[](https://coveralls.io/github/uber/h3-java?branch=master)
[](LICENSE)
[](https://maven-badges.herokuapp.com/maven-central/com.uber/h3)
-[](https://github.com/uber/h3/releases/tag/v4.4.1)
+[](https://github.com/uber/h3/releases/tag/v4.5.0)
This library provides Java bindings for the [H3 Core Library](https://github.com/uber/h3). For API reference, please see the [H3 Documentation](https://h3geo.org/).
@@ -18,14 +18,14 @@ Add it to your pom.xml:
com.uber
h3
- 4.4.0
+ 4.5.0
```
Or, using Gradle:
```gradle
-compile("com.uber:h3:4.4.0")
+compile("com.uber:h3:4.5.0")
```
Encode a location into a hexagon address:
diff --git a/h3version.properties b/h3version.properties
index af844af..a5957e5 100644
--- a/h3version.properties
+++ b/h3version.properties
@@ -1 +1 @@
-h3.git.reference=v4.4.1
+h3.git.reference=v4.5.0
diff --git a/src/main/c/h3-java/src/jniapi.c b/src/main/c/h3-java/src/jniapi.c
index 37d42b8..7451114 100644
--- a/src/main/c/h3-java/src/jniapi.c
+++ b/src/main/c/h3-java/src/jniapi.c
@@ -1394,6 +1394,23 @@ Java_com_uber_h3core_NativeMethods_directedEdgeToBoundary(JNIEnv *env,
}
}
+/*
+ * Class: com_uber_h3core_NativeMethods
+ * Method: reverseDirectedEdge
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_uber_h3core_NativeMethods_reverseDirectedEdge(
+ JNIEnv *env, jobject thiz, jlong h3) {
+ H3Index out;
+ H3Error err = reverseDirectedEdge(h3, &out);
+ if (err) {
+ ThrowH3Exception(env, err);
+ return -1;
+ }
+
+ return out;
+}
+
/*
* Class: com_uber_h3core_NativeMethods
* Method: maxFaceCount
diff --git a/src/main/java/com/uber/h3core/H3Core.java b/src/main/java/com/uber/h3core/H3Core.java
index 412c07a..c1529a7 100644
--- a/src/main/java/com/uber/h3core/H3Core.java
+++ b/src/main/java/com/uber/h3core/H3Core.java
@@ -1228,6 +1228,16 @@ public List directedEdgeToBoundary(String h3) {
return directedEdgeToBoundary(stringToH3(h3));
}
+ /** Returns the directed edge with origin and destination cells reversed. */
+ public long reverseDirectedEdge(long h3) {
+ return h3Api.reverseDirectedEdge(h3);
+ }
+
+ /** Returns the directed edge with origin and destination cells reversed. */
+ public String reverseDirectedEdge(String h3) {
+ return h3ToString(reverseDirectedEdge(stringToH3(h3)));
+ }
+
/**
* Find all icosahedron faces intersected by a given H3 index, represented as integers from 0-19.
*
diff --git a/src/main/java/com/uber/h3core/NativeMethods.java b/src/main/java/com/uber/h3core/NativeMethods.java
index fb5845b..4dc3902 100644
--- a/src/main/java/com/uber/h3core/NativeMethods.java
+++ b/src/main/java/com/uber/h3core/NativeMethods.java
@@ -140,6 +140,8 @@ native void polygonToCells(
native int directedEdgeToBoundary(long h3, double[] verts);
+ native long reverseDirectedEdge(long h3);
+
native int maxFaceCount(long h3);
native void getIcosahedronFaces(long h3, int[] faces);
diff --git a/src/test/java/com/uber/h3core/TestDirectedEdges.java b/src/test/java/com/uber/h3core/TestDirectedEdges.java
index b7243e4..d8fdde4 100644
--- a/src/test/java/com/uber/h3core/TestDirectedEdges.java
+++ b/src/test/java/com/uber/h3core/TestDirectedEdges.java
@@ -60,6 +60,10 @@ void unidirectionalEdges() {
List boundary = h3.directedEdgeToBoundary(edge);
assertEquals(2, boundary.size());
+
+ String reversed = h3.reverseDirectedEdge(edge);
+ assertEquals(adjacent, h3.getDirectedEdgeOrigin(reversed));
+ assertEquals(start, h3.getDirectedEdgeDestination(reversed));
}
@Test