From c30e410132f752c234531f141e9a33cfd4d5e8f4 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 29 Jan 2026 07:14:30 -0600 Subject: [PATCH] Clean up some API TODOs --- .../data/IDhApiTerrainDataCache.java | 11 +++++---- .../data/IDhApiTerrainDataRepo.java | 2 ++ .../events/IDhApiEventInjector.java | 3 +-- .../render/IDhApiRenderableBoxGroup.java | 2 +- .../methods/data/DhApiTerrainDataCache.java | 23 ++++++++++++++++++- 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataCache.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataCache.java index 2ec043a10..cb8b50422 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataCache.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataCache.java @@ -1,15 +1,18 @@ package com.seibel.distanthorizons.api.interfaces.data; /** - * Can be used to drastically speed up repeat read operations in {@link IDhApiTerrainDataRepo}. - * + * Can be used to drastically speed up repeat read operations in {@link IDhApiTerrainDataRepo}.

+ * + * Once you are done with this cache, closing it will free up any objects + * the cache is holding. This can reduce Garbage Collector overhead and reduce stuttering. + * * @see IDhApiTerrainDataRepo * * @author James Seibel - * @version 2024-7-14 + * @version 2026-1-29 * @since API 3.0.0 */ -public interface IDhApiTerrainDataCache // TODO should this be AutoClosable? +public interface IDhApiTerrainDataCache extends AutoCloseable { /** * Removes any data that's currently stored in this cache. diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataRepo.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataRepo.java index 10e9cb361..336f880da 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataRepo.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/data/IDhApiTerrainDataRepo.java @@ -42,6 +42,8 @@ public interface IDhApiTerrainDataRepo // getters // //=========// + // TODO should we force users to pass in a cache, even if null? + /** @see IDhApiTerrainDataRepo#getSingleDataPointAtBlockPos(IDhApiLevelWrapper, int, int, int, IDhApiTerrainDataCache) */ default DhApiResult getSingleDataPointAtBlockPos(IDhApiLevelWrapper levelWrapper, int blockPosX, int blockPosY, int blockPosZ) { return this.getSingleDataPointAtBlockPos(levelWrapper, blockPosX, blockPosY, blockPosZ, null); } /** diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/events/IDhApiEventInjector.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/events/IDhApiEventInjector.java index ba9bdb336..d2aa07fdf 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/events/IDhApiEventInjector.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/events/IDhApiEventInjector.java @@ -40,8 +40,7 @@ public interface IDhApiEventInjector extends IDependencyInjector * @return true if the handler was unbound, false if the handler wasn't bound. * @throws IllegalArgumentException if the implementation object doesn't implement the interface */ - // Note to self: Don't try adding a generic type to IDhApiEvent, the constructor won't accept it - // TODO why are we removing the class instead of an instance? + // Note to DH Devs: Don't try adding a generic type to IDhApiEvent, the constructor won't accept it boolean unbind(Class dependencyInterface, Class dependencyClassToRemove) throws IllegalArgumentException; diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderableBoxGroup.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderableBoxGroup.java index 399ba1571..2587bd0fe 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderableBoxGroup.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderableBoxGroup.java @@ -73,7 +73,7 @@ public interface IDhApiRenderableBoxGroup extends List * This is a good place to change the origin or notify of any box changes. */ void setPreRenderFunc(Consumer renderEventParam); - void setPostRenderFunc(Consumer renderEventParam); // TODO name? + void setPostRenderFunc(Consumer renderEventParam); /** * If a cube's color, position, or other property is changed this method diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataCache.java b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataCache.java index 5b647bd98..c1ac4b4dc 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataCache.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataCache.java @@ -13,7 +13,7 @@ import java.lang.ref.SoftReference; public class DhApiTerrainDataCache implements IDhApiTerrainDataCache { private final Object modificationLock = new Object(); - private Long2ReferenceOpenHashMap> posToFullDataRef = new Long2ReferenceOpenHashMap<>(); + private final Long2ReferenceOpenHashMap> posToFullDataRef = new Long2ReferenceOpenHashMap<>(); private static final DhLogger LOGGER = new DhLoggerBuilder().build(); @@ -22,6 +22,7 @@ public class DhApiTerrainDataCache implements IDhApiTerrainDataCache //==================// // internal methods // //==================// + //region public void add(long pos, FullDataSourceV2 dataSource) { @@ -48,11 +49,14 @@ public class DhApiTerrainDataCache implements IDhApiTerrainDataCache } } + //endregion + //=============// // API methods // //=============// + //region @Override public void clear() @@ -82,6 +86,23 @@ public class DhApiTerrainDataCache implements IDhApiTerrainDataCache } } + //endregion + + + + //================// + // base overrides // + //================// + //region + + @Override + public void close() { this.clear(); } + + @Override + public String toString() { return "Size: " + this.posToFullDataRef.size(); } + + //endregion + }