From 1b1f8029c800c943a1d5cee1243c479655c3caca Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Mon, 14 Apr 2025 19:58:56 -0400 Subject: [PATCH] Refactor QuirkyCamera QuirkyCamera was refactored to use EnumMap, since that seems to be more efficient. This also enables more concise copying of QuirkyCamera in getQuirkyCamera by just passing in the Map of the QuirkyCamera. Also, putAll was used instead of manually copying quirks in updateQuirks for conciseness. --- .../vision/camera/QuirkyCamera.java | 56 +++++++------------ 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java b/photon-core/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java index 4f85879f0..c50059222 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java @@ -19,10 +19,9 @@ package org.photonvision.vision.camera; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.Objects; public class QuirkyCamera { @@ -112,7 +111,7 @@ public class QuirkyCamera { public final String displayName; @JsonProperty("quirks") - public final HashMap quirks; + public final Map quirks; /** * Creates a QuirkyCamera that matches by USB VID/PID @@ -153,7 +152,7 @@ public class QuirkyCamera { this.baseName = baseName; this.displayName = displayName; - this.quirks = new HashMap<>(); + this.quirks = new EnumMap<>(CameraQuirk.class); // (1) Fill quirk map with the supplied Quirk list for (var q : quirks) { @@ -172,7 +171,7 @@ public class QuirkyCamera { @JsonProperty("usbVid") int usbVid, @JsonProperty("usbPid") int usbPid, @JsonProperty("displayName") String displayName, - @JsonProperty("quirks") HashMap quirks) { + @JsonProperty("quirks") Map quirks) { this.baseName = baseName; this.usbPid = usbPid; this.usbVid = usbVid; @@ -212,17 +211,7 @@ public class QuirkyCamera { // We have a quirky camera! // Copy the quirks from our predefined object and create // a QuirkyCamera object with the complete properties - List quirks = new ArrayList(); - for (var q : CameraQuirk.values()) { - if (qc.hasQuirk(q)) quirks.add(q); - } - QuirkyCamera c = - new QuirkyCamera( - usbVid, - usbPid, - baseName, - Arrays.copyOf(quirks.toArray(), quirks.size(), CameraQuirk[].class)); - return c; + return new QuirkyCamera(baseName, usbVid, usbPid, "", new EnumMap<>(qc.quirks)); } } return new QuirkyCamera(usbVid, usbPid, baseName); @@ -245,19 +234,17 @@ public class QuirkyCamera { @Override public String toString() { - String ret = - "QuirkyCamera [baseName=" - + baseName - + ", displayName=" - + displayName - + ", usbVid=" - + usbVid - + ", usbPid=" - + usbPid - + ", quirks=" - + quirks.toString() - + "]"; - return ret; + return "QuirkyCamera [baseName=" + + baseName + + ", displayName=" + + displayName + + ", usbVid=" + + usbVid + + ", usbPid=" + + usbPid + + ", quirks=" + + quirks.toString() + + "]"; } @Override @@ -270,12 +257,7 @@ public class QuirkyCamera { * * @param quirksToChange map of true/false for quirks we should change */ - public void updateQuirks(HashMap quirksToChange) { - for (var q : quirksToChange.entrySet()) { - var quirk = q.getKey(); - var hasQuirk = q.getValue(); - - this.quirks.put(quirk, hasQuirk); - } + public void updateQuirks(Map quirksToChange) { + quirks.putAll(quirksToChange); } }