Skip to content

Commit 660b978

Browse files
committed
Add BrainfuckAnalyzers for a list of all analyzers. Cleanup Brainalyze
1 parent 1137d9e commit 660b978

File tree

6 files changed

+33
-76
lines changed

6 files changed

+33
-76
lines changed

src/main/groovy/net/zomis/brainf/analyze/Brainalyze.groovy

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import net.zomis.brainf.model.groovy.GroovyBFContext
1111
import java.util.function.ToIntFunction
1212
import java.util.function.ToLongFunction
1313

14-
class Brainalyze implements BrainfuckListener {
14+
class Brainalyze {
1515

1616
private final MemoryCell[] cells
1717
private final GroovyBFContext groovy
@@ -35,21 +35,6 @@ class Brainalyze implements BrainfuckListener {
3535
cells[index]
3636
}
3737

38-
@Deprecated
39-
static Brainalyze analyze(BrainfuckRunner brain, GroovyBFContext groovyContext) {
40-
Brainalyze analyze = new Brainalyze(brain, groovyContext)
41-
brain.setListener(analyze)
42-
brain.run()
43-
44-
for (int i = analyze.cells.length - 1; i >= 0; i--) {
45-
if (analyze.cells[i].used) {
46-
analyze.maxMemory = i
47-
break
48-
}
49-
}
50-
analyze
51-
}
52-
5338
void print() {
5439
if (get(ReadWriteAnalysis)) {
5540
maxMemory = get(ReadWriteAnalysis).maxMemory
@@ -67,49 +52,6 @@ class Brainalyze implements BrainfuckListener {
6752
println()
6853
}
6954

70-
@Override
71-
void beforePerform(BrainfuckRunner runner, BrainfuckCommand cmd) {
72-
if (!(cmd instanceof BrainFCommand)) {
73-
return
74-
}
75-
BrainFCommand command = (BrainFCommand) cmd
76-
MemoryCell cell = cells[runner.memory.memoryIndex]
77-
78-
switch (command) {
79-
case BrainFCommand.ADD:
80-
case BrainFCommand.SUBTRACT:
81-
case BrainFCommand.READ:
82-
case BrainFCommand.WHILE:
83-
case BrainFCommand.END_WHILE:
84-
case BrainFCommand.WRITE:
85-
cell.used = true
86-
break
87-
}
88-
89-
}
90-
91-
@Override
92-
void afterPerform(BrainfuckRunner runner, BrainfuckCommand command) {
93-
}
94-
95-
int[] array(ToIntFunction<MemoryCell> function, int fromIndex, int toIndex) {
96-
int[] result = new int[toIndex - fromIndex]
97-
for (int i = 0; i < result.length; i++) {
98-
MemoryCell cell = cells[fromIndex + i]
99-
result[i] = function.applyAsInt(cell)
100-
}
101-
result
102-
}
103-
104-
long[] arrayLong(ToLongFunction<MemoryCell> function, int fromIndex, int toIndex) {
105-
long[] result = new long[toIndex - fromIndex]
106-
for (int i = 0; i < result.length; i++) {
107-
MemoryCell cell = cells[fromIndex + i]
108-
result[i] = function.applyAsLong(cell)
109-
}
110-
result
111-
}
112-
11355
public <T> long[] arrayLong(Class<T> clazz, ToLongFunction<T> function, int fromIndex, int toIndex) {
11456
long[] result = new long[toIndex - fromIndex]
11557
for (int i = 0; i < result.length; i++) {

src/main/groovy/net/zomis/brainf/analyze/MemoryCell.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import java.util.stream.Stream
1414
class MemoryCell {
1515

1616
final int index
17-
boolean used
1817

1918
private final Map<Class<?>, Object> analysis = [:]
2019

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.zomis.brainf.analyze.analyzers
2+
3+
import net.zomis.brainf.analyze.BrainfuckAnalyzer
4+
5+
class BrainfuckAnalyzers {
6+
7+
public static BrainfuckAnalyzer[] getAvailableAnalyzers() {
8+
BrainfuckAnalyzer[] analyzers = [
9+
new GroovyCommandAnalysis(),
10+
new IOAnalysis(),
11+
new MemoryValues(),
12+
new ReadWriteAnalysis(),
13+
new WhileLoopAnalysis(),
14+
new CommandCountAnalysis(),
15+
new MemoryIndexAnalysis(),
16+
]
17+
analyzers
18+
}
19+
20+
}

src/main/groovy/net/zomis/brainf/model/groovy/SpecialDelegate.groovy

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.zomis.brainf.model.groovy
22

3+
import net.zomis.brainf.analyze.AnalyzeFactory
34
import net.zomis.brainf.analyze.Brainalyze
5+
import net.zomis.brainf.analyze.analyzers.BrainfuckAnalyzers
46
import net.zomis.brainf.model.BrainfuckCode
57
import net.zomis.brainf.model.BrainfuckCommand
68
import net.zomis.brainf.model.BrainfuckMemory
@@ -113,7 +115,9 @@ class SpecialDelegate {
113115
GroovyBFContext otherContext = new GroovyBFContext()
114116
other.code.source = ListCode.create(new GroovySupportConverter(otherContext,
115117
new BrainfuckConverter()), url.text)
116-
Brainalyze analyze = Brainalyze.analyze(other, otherContext)
118+
Brainalyze analyze = new AnalyzeFactory()
119+
.addAnalyzers(BrainfuckAnalyzers.availableAnalyzers)
120+
.analyze(other, otherContext)
117121
println "Analyze for $file"
118122
analyze.print()
119123
println()

src/main/groovy/net/zomis/brainf/ui/MainController.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import javafx.scene.control.TabPane;
2121
import javafx.stage.Stage;
2222
import javafx.stage.WindowEvent;
23+
import net.zomis.brainf.analyze.AnalyzeFactory;
2324
import net.zomis.brainf.analyze.Brainalyze;
25+
import net.zomis.brainf.analyze.analyzers.BrainfuckAnalyzers;
2426
import net.zomis.brainf.model.BrainfuckRunner;
2527
import net.zomis.brainf.model.ListCode;
2628
import net.zomis.brainf.model.groovy.GroovyBFContext;
@@ -128,7 +130,9 @@ private void stopCode() {
128130
}
129131

130132
@FXML private void analyze(ActionEvent event) {
131-
Brainalyze analyze = Brainalyze.analyze(brain(), new GroovyBFContext());
133+
Brainalyze analyze = new AnalyzeFactory()
134+
.addAnalyzers(BrainfuckAnalyzers.getAvailableAnalyzers())
135+
.analyze(brain(), new GroovyBFContext());
132136
analyze.print();
133137
}
134138

src/test/groovy/net/zomis/brainf/BrainfuckTest.groovy

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package net.zomis.brainf
33
import net.zomis.brainf.analyze.AnalyzeFactory
44
import net.zomis.brainf.analyze.Brainalyze
55
import net.zomis.brainf.analyze.BrainfuckAnalyzer
6+
import net.zomis.brainf.analyze.analyzers.BrainfuckAnalyzers
67
import net.zomis.brainf.analyze.analyzers.CommandCountAnalysis
78
import net.zomis.brainf.analyze.analyzers.GroovyCommandAnalysis
89
import net.zomis.brainf.analyze.analyzers.IOAnalysis
@@ -25,10 +26,6 @@ class BrainfuckTest {
2526
Brainalyze analyze
2627
GroovyBFContext context
2728

28-
void analyze() {
29-
analyze = Brainalyze.analyze(brain, context)
30-
}
31-
3229
void analyze(BrainfuckAnalyzer... analyzers) {
3330
analyze = new AnalyzeFactory().addAnalyzers(analyzers).analyze(brain, context)
3431
}
@@ -44,15 +41,6 @@ class BrainfuckTest {
4441
}
4542

4643
void analyzeAll() {
47-
BrainfuckAnalyzer[] analyzers = [
48-
new GroovyCommandAnalysis(),
49-
new IOAnalysis(),
50-
new MemoryValues(),
51-
new ReadWriteAnalysis(),
52-
new WhileLoopAnalysis(),
53-
new CommandCountAnalysis(),
54-
new MemoryIndexAnalysis(),
55-
]
56-
analyze(analyzers)
44+
analyze(BrainfuckAnalyzers.availableAnalyzers)
5745
}
5846
}

0 commit comments

Comments
 (0)