<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/subex/main.go
diff options
context:
space:
mode:
authorCharlie Stanton <charlie@shtanton.xyz>2023-04-25 09:48:43 +0100
committerCharlie Stanton <charlie@shtanton.xyz>2023-04-25 09:48:43 +0100
commit6ec9d0a831849ffaf7d46b2eb4db7d56260809cf (patch)
treecba0bab46614d74b898b91517e6cdb5e804c090e /subex/main.go
parent9b26559c8273fd4de6aa6a740d6472a665446274 (diff)
downloadstred-go-6ec9d0a831849ffaf7d46b2eb4db7d56260809cf.tar
Improves performance of pruneStates by modifying states in place
Diffstat (limited to 'subex/main.go')
-rw-r--r--subex/main.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/subex/main.go b/subex/main.go
index 635b1de..638e0f5 100644
--- a/subex/main.go
+++ b/subex/main.go
@@ -107,16 +107,18 @@ func equalStates(left SubexBranch, right SubexBranch) bool {
// If two branches have the same state, only the first has a chance of being successful
// This function removes all of the pointless execution branches to save execution time
-func pruneStates(states []SubexBranch) (newStates []SubexBranch) {
+func pruneStates(states []SubexBranch) []SubexBranch {
+ uniqueStates := 0
outer: for _, state := range states {
- for _, newState := range newStates {
- if equalStates(state, newState) {
+ for i := 0; i < uniqueStates; i++ {
+ if equalStates(state, states[i]) {
continue outer
}
}
- newStates = append(newStates, state)
+ states[uniqueStates] = state
+ uniqueStates++
}
- return newStates
+ return states[:uniqueStates]
}
// Run the subex transducer