Skip to content

Commit cc894c9

Browse files
authored
Optimize (#32)
* Don't use streams when you don't have to, and remove old bug check * Removed more period `stream`s, and cleaned code
1 parent f126258 commit cc894c9

File tree

6 files changed

+29
-17
lines changed

6 files changed

+29
-17
lines changed

src/main/java/org/trigon/hardware/BaseInputs.java renamed to src/main/java/org/trigon/hardware/InputsBase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import java.util.NoSuchElementException;
88

9-
public abstract class BaseInputs implements LoggableInputs {
9+
public abstract class InputsBase implements LoggableInputs {
1010
protected LogTable latestTable = null;
1111
private final String name;
1212
private double lastErrorTimestamp = 0;
@@ -16,7 +16,7 @@ public abstract class BaseInputs implements LoggableInputs {
1616
*
1717
* @param name the name of the instance. Used for error messages
1818
*/
19-
public BaseInputs(String name) {
19+
public InputsBase(String name) {
2020
this.name = name;
2121
}
2222

src/main/java/org/trigon/hardware/SignalThreadBase.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ public class SignalThreadBase extends Thread {
1818
private final String name;
1919
protected double threadFrequencyHertz = 50;
2020

21+
@SuppressWarnings("ConstantConditions")
22+
public static double[] queueToDoubleArray(Queue<Double> queue) {
23+
final double[] array = new double[queue.size()];
24+
for (int i = 0; i < array.length; i++)
25+
array[i] = queue.poll();
26+
27+
return array;
28+
}
29+
2130
/**
2231
* Creates a new SignalThreadBase.
2332
*
@@ -44,7 +53,7 @@ public void setThreadFrequencyHertz(double threadFrequencyHertz) {
4453
*/
4554
public void updateLatestTimestamps() {
4655
if (!RobotHardwareStats.isReplay()) {
47-
threadInputs.timestamps = timestamps.stream().mapToDouble(Double::doubleValue).toArray();
56+
threadInputs.timestamps = queueToDoubleArray(timestamps);
4857
timestamps.clear();
4958
}
5059
Logger.processInputs(name, threadInputs);

src/main/java/org/trigon/hardware/misc/KeyboardController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import edu.wpi.first.wpilibj2.command.button.Trigger;
44
import org.littletonrobotics.junction.networktables.LoggedNetworkBoolean;
5-
import org.littletonrobotics.junction.networktables.LoggedNetworkBoolean;
65

76
/**
87
* A class that represents a keyboard controller. Used to get input from a keyboard.

src/main/java/org/trigon/hardware/phoenix6/Phoenix6Inputs.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package org.trigon.hardware.phoenix6;
22

33
import com.ctre.phoenix6.BaseStatusSignal;
4-
import com.ctre.phoenix6.StatusSignal;
54
import org.littletonrobotics.junction.LogTable;
6-
import org.trigon.hardware.BaseInputs;
5+
import org.trigon.hardware.InputsBase;
76
import org.trigon.hardware.RobotHardwareStats;
7+
import org.trigon.hardware.SignalThreadBase;
88

99
import java.util.HashMap;
1010
import java.util.Map;
1111
import java.util.Queue;
1212

13-
public class Phoenix6Inputs extends BaseInputs {
13+
public class Phoenix6Inputs extends InputsBase {
1414
private final HashMap<String, Queue<Double>> signalToThreadedQueue = new HashMap<>();
1515
private final Phoenix6SignalThread signalThread = Phoenix6SignalThread.getInstance();
1616
private BaseStatusSignal[] signals = new BaseStatusSignal[0];
@@ -70,19 +70,16 @@ public void registerSignal(BaseStatusSignal statusSignal, double updateFrequency
7070

7171
private void updateThreadedSignalsToTable(LogTable table) {
7272
for (Map.Entry<String, Queue<Double>> entry : signalToThreadedQueue.entrySet()) {
73-
table.put(entry.getKey(), entry.getValue().stream().mapToDouble(Double::doubleValue).toArray());
73+
table.put(entry.getKey(), SignalThreadBase.queueToDoubleArray(entry.getValue()));
7474
entry.getValue().clear();
7575
}
7676
}
7777

7878
private void updateSignalsToTable(LogTable table) {
7979
BaseStatusSignal.refreshAll(signals);
8080

81-
for (BaseStatusSignal signal : signals) {
82-
if (signal.getName().equals("ClosedLoopReference")) // This signal isn't updated correctly by `BaseStatusSignal.updateAll` for some reason.
83-
((StatusSignal<Double>) signal).refresh();
81+
for (BaseStatusSignal signal : signals)
8482
table.put(signal.getName(), signal.getValueAsDouble());
85-
}
8683
}
8784

8885
private void addSignalToSignalsArray(BaseStatusSignal statusSignal) {

src/main/java/org/trigon/hardware/rev/spark/SparkInputs.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package org.trigon.hardware.rev.spark;
22

33
import org.littletonrobotics.junction.LogTable;
4-
import org.trigon.hardware.BaseInputs;
4+
import org.trigon.hardware.InputsBase;
55
import org.trigon.hardware.RobotHardwareStats;
6+
import org.trigon.hardware.SignalThreadBase;
67

78
import java.util.HashMap;
89
import java.util.Map;
910
import java.util.Queue;
1011

11-
public class SparkInputs extends BaseInputs {
12+
public class SparkInputs extends InputsBase {
1213
private final HashMap<String, Queue<Double>> signalToThreadedQueue = new HashMap<>();
1314
private final SparkSignalThread signalThread = SparkSignalThread.getInstance();
1415
private SparkStatusSignal[] signals = new SparkStatusSignal[0];
@@ -61,7 +62,7 @@ public void registerThreadedSignal(SparkStatusSignal statusSignal) {
6162

6263
private void updateThreadedSignalsToTable(LogTable table) {
6364
for (Map.Entry<String, Queue<Double>> entry : signalToThreadedQueue.entrySet()) {
64-
table.put(entry.getKey(), entry.getValue().stream().mapToDouble(Double::doubleValue).toArray());
65+
table.put(entry.getKey(), SignalThreadBase.queueToDoubleArray(entry.getValue()));
6566
entry.getValue().clear();
6667
}
6768
}

src/main/java/org/trigon/utilities/QuickSortHandler.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.trigon.utilities;
22

3-
import java.util.Arrays;
43
import java.util.function.ToDoubleFunction;
54

65
/**
@@ -51,7 +50,7 @@ private static <T> void quickSortByDoubleValue(T[] array, ToDoubleFunction<T> to
5150
* @return the index of the new pivot in the whole array
5251
*/
5352
private static <T> int partitionArrayAndGetNewPivot(T[] array, ToDoubleFunction<T> toDoubleFunction, int startIndex, int endIndex) {
54-
final double[] doubleArray = Arrays.stream(array).mapToDouble(toDoubleFunction).toArray();
53+
final double[] doubleArray = convertArrayToDoubleArray(array, toDoubleFunction);
5554
final double pivot = doubleArray[endIndex];
5655

5756
int i = startIndex;
@@ -65,6 +64,13 @@ private static <T> int partitionArrayAndGetNewPivot(T[] array, ToDoubleFunction<
6564
return i;
6665
}
6766

67+
private static <T> double[] convertArrayToDoubleArray(T[] array, ToDoubleFunction<T> toDoubleFunction) {
68+
final double[] doubleArray = new double[array.length];
69+
for (int i = 0; i < array.length; i++)
70+
doubleArray[i] = toDoubleFunction.applyAsDouble(array[i]);
71+
return doubleArray;
72+
}
73+
6874
/**
6975
* Swaps the values held by two indices in an array.
7076
*

0 commit comments

Comments
 (0)