Skip to content

Commit ef06b2b

Browse files
committed
Remove some superfluous actions generated by TAB
1 parent 745b821 commit ef06b2b

3 files changed

Lines changed: 23 additions & 17 deletions

File tree

road-runner/actions/src/main/kotlin/com/acmerobotics/roadrunner/Actions.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ class NullAction : Action {
142142
}
143143

144144
private fun seqCons(hd: Action, tl: Action): Action =
145-
if (tl is SequentialAction) {
146-
SequentialAction(listOf(hd) + tl.initialActions)
147-
} else {
148-
SequentialAction(hd, tl)
145+
when (tl) {
146+
is NullAction -> hd
147+
is SequentialAction -> SequentialAction(listOf(hd) + tl.initialActions)
148+
else -> SequentialAction(hd, tl)
149149
}
150150

151151
private sealed class MarkerFactory(
@@ -303,10 +303,10 @@ class TrajectoryActionBuilder private constructor(
303303
}
304304
}
305305

306-
if (actions.size == 1) {
307-
Pair(actions.first(), msRem)
308-
} else {
309-
Pair(ParallelAction(actions), msRem)
306+
when (actions.size) {
307+
0 -> Pair(NullAction(), msRem)
308+
1 -> Pair(actions.first(), msRem)
309+
else -> Pair(ParallelAction(actions), msRem)
310310
}
311311
}
312312

@@ -363,7 +363,12 @@ class TrajectoryActionBuilder private constructor(
363363

364364
return if (n == 0) {
365365
TrajectoryActionBuilder(this, tb, 0, lastPoseUnmapped, lastPose, lastTangent, emptyList()) { tail ->
366-
cont(ParallelAction(tail, seqCons(SleepAction(dt), a)))
366+
val m = seqCons(SleepAction(dt), a)
367+
if (tail is NullAction) {
368+
cont(m)
369+
} else {
370+
cont(ParallelAction(tail, m))
371+
}
367372
}
368373
} else {
369374
TrajectoryActionBuilder(
@@ -864,6 +869,6 @@ class TrajectoryActionBuilder private constructor(
864869
}
865870

866871
fun build(): Action {
867-
return endTrajectory().cont(SequentialAction())
872+
return endTrajectory().cont(NullAction())
868873
}
869874
}

road-runner/actions/src/test/kotlin/com/acmerobotics/roadrunner/ActionRegressionTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ fun sexpFromAction(a: Action): Sexp =
5555
is SleepAction -> Sexp.list(Sexp.Atom("sleep"), Sexp.Atom(String.format("%.10f", a.dt)))
5656
is SequentialAction -> Sexp.list(listOf(Sexp.Atom("seq")) + a.initialActions.map(::sexpFromAction))
5757
is ParallelAction -> Sexp.list(listOf(Sexp.Atom("par")) + a.initialActions.map(::sexpFromAction))
58+
is NullAction -> Sexp.Atom("null")
5859
else -> Sexp.Atom("unk")
5960
}
6061

road-runner/actions/values.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
basic
2-
(seq traj)
3-
(seq traj)
2+
traj
3+
traj
44

55
continuity
66
(seq traj (sleep 10.0000000000) traj)
77
(seq traj traj traj)
88

99
time markers
10-
(seq traj traj (par (seq traj) (seq (sleep 2.0000000000) A)))
10+
(seq traj traj (par traj (seq (sleep 2.0000000000) A)))
1111
( seq
1212
traj
1313
traj
14-
(par (seq traj) (seq (sleep 2.0000000000) A) (seq (sleep 2.5000000000) B))
14+
(par traj (seq (sleep 2.0000000000) A) (seq (sleep 2.5000000000) B))
1515
)
16-
(par (seq) (seq (sleep 1.0000000000) a))
16+
(seq (sleep 1.0000000000) a)
1717

1818
disp markers
19-
(par (seq traj) (seq (sleep 0.4472135955) A))
20-
(par (seq traj) (seq (sleep 0.3162277660) A))
19+
(par traj (seq (sleep 0.4472135955) A))
20+
(par traj (seq (sleep 0.3162277660) A))
2121
(par (seq traj traj) (seq (sleep 0.3162277660) A))

0 commit comments

Comments
 (0)