Skip to content

Commit e45d7f9

Browse files
committed
Remove method chaining
1 parent cfa2878 commit e45d7f9

File tree

9 files changed

+268
-453
lines changed

9 files changed

+268
-453
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/.idea
22
/.gradle
33
/build
4+
/out
45
.DS_Store
Lines changed: 19 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,39 @@
11
package org.algorithm_visualizer;
22

3-
public class Array1DTracer extends Tracer {
4-
public Array1DTracer(String title) {
5-
super(title);
3+
public class Array1DTracer extends Array2DTracer {
4+
public void set(Object array1d) {
5+
command("set", new Object[]{array1d});
66
}
77

8-
public Array1DTracer() {
9-
this(null);
8+
public void patch(int x, Object v) {
9+
command("patch", new Object[]{x, v});
1010
}
1111

12-
public Array1DTracer set(Object array1d) {
13-
addTrace(key, "set", new Object[]{array1d});
14-
return this;
12+
public void patch(int x) {
13+
command("patch", new Object[]{x});
1514
}
1615

17-
public Array1DTracer set() {
18-
addTrace(key, "set", new Object[]{});
19-
return this;
16+
public void depatch(int x) {
17+
command("depatch", new Object[]{x});
2018
}
2119

22-
public Array1DTracer reset() {
23-
addTrace(key, "reset", new Object[]{});
24-
return this;
20+
public void select(int sx, int ex) {
21+
command("select", new Object[]{sx, ex});
2522
}
2623

27-
public Array1DTracer delay() {
28-
addTrace(key, "delay", new Object[]{});
29-
return this;
24+
public void select(int x) {
25+
command("select", new Object[]{x});
3026
}
3127

32-
public Array1DTracer patch(int x, Object v) {
33-
addTrace(key, "patch", new Object[]{x, v});
34-
return this;
28+
public void deselect(int sx, int ex) {
29+
command("deselect", new Object[]{sx, ex});
3530
}
3631

37-
public Array1DTracer depatch(int x) {
38-
addTrace(key, "depatch", new Object[]{x});
39-
return this;
32+
public void deselect(int x) {
33+
command("deselect", new Object[]{x});
4034
}
4135

42-
public Array1DTracer select(int x) {
43-
addTrace(key, "select", new Object[]{x});
44-
return this;
45-
}
46-
47-
public Array1DTracer select(int sx, int ex) {
48-
addTrace(key, "select", new Object[]{sx, ex});
49-
return this;
50-
}
51-
52-
public Array1DTracer deselect(int x) {
53-
addTrace(key, "deselect", new Object[]{x});
54-
return this;
55-
}
56-
57-
public Array1DTracer deselect(int sx, int ex) {
58-
addTrace(key, "deselect", new Object[]{sx, ex});
59-
return this;
60-
}
61-
62-
public Array1DTracer chart(ChartTracer chartTracer) {
63-
addTrace(key, "chart", new Object[]{chartTracer.key});
64-
return this;
36+
public void chart(ChartTracer chartTracer) {
37+
command("chart", new Object[]{chartTracer});
6538
}
6639
}
Lines changed: 24 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,51 @@
11
package org.algorithm_visualizer;
22

33
public class Array2DTracer extends Tracer {
4-
public Array2DTracer(String title) {
5-
super(title);
4+
public void set(Object array2d) {
5+
command("set", new Object[]{array2d});
66
}
77

8-
public Array2DTracer() {
9-
this(null);
8+
public void patch(int x, int y, Object v) {
9+
command("patch", new Object[]{x, y, v});
1010
}
1111

12-
public Array2DTracer set(Object array2d) {
13-
addTrace(key, "set", new Object[]{array2d});
14-
return this;
12+
public void patch(int x, int y) {
13+
command("patch", new Object[]{x, y});
1514
}
1615

17-
public Array2DTracer set() {
18-
addTrace(key, "set", new Object[]{});
19-
return this;
16+
public void depatch(int x, int y) {
17+
command("depatch", new Object[]{x, y});
2018
}
2119

22-
public Array2DTracer reset() {
23-
addTrace(key, "reset", new Object[]{});
24-
return this;
20+
public void select(int sx, int sy, int ex, int ey) {
21+
command("select", new Object[]{sx, sy, ex, ey});
2522
}
2623

27-
public Array2DTracer delay() {
28-
addTrace(key, "delay", new Object[]{});
29-
return this;
24+
public void select(int x, int y) {
25+
command("select", new Object[]{x, y});
3026
}
3127

32-
public Array2DTracer patch(int x, int y, Object v) {
33-
addTrace(key, "patch", new Object[]{x, y, v});
34-
return this;
28+
public void selectRow(int x, int sy, int ey) {
29+
command("selectRow", new Object[]{x, sy, ey});
3530
}
3631

37-
public Array2DTracer depatch(int x, int y) {
38-
addTrace(key, "depatch", new Object[]{x, y});
39-
return this;
32+
public void selectCol(int y, int sx, int ex) {
33+
command("selectCol", new Object[]{y, sx, ex});
4034
}
4135

42-
public Array2DTracer select(int x, int y) {
43-
addTrace(key, "select", new Object[]{x, y});
44-
return this;
36+
public void deselect(int sx, int sy, int ex, int ey) {
37+
command("deselect", new Object[]{sx, sy, ex, ey});
4538
}
4639

47-
public Array2DTracer select(int sx, int sy, int ex, int ey) {
48-
addTrace(key, "select", new Object[]{sx, sy, ex, ey});
49-
return this;
40+
public void deselect(int x, int y) {
41+
command("deselect", new Object[]{x, y});
5042
}
5143

52-
public Array2DTracer selectRow(int x, int sy, int ey) {
53-
addTrace(key, "selectRow", new Object[]{x, sy, ey});
54-
return this;
44+
public void deselectRow(int x, int sy, int ey) {
45+
command("deselectRow", new Object[]{x, sy, ey});
5546
}
5647

57-
public Array2DTracer selectCol(int y, int sx, int ex) {
58-
addTrace(key, "selectCol", new Object[]{y, sx, ex});
59-
return this;
60-
}
61-
62-
public Array2DTracer deselect(int x, int y) {
63-
addTrace(key, "deselect", new Object[]{x, y});
64-
return this;
65-
}
66-
67-
public Array2DTracer deselect(int sx, int sy, int ex, int ey) {
68-
addTrace(key, "deselect", new Object[]{sx, sy, ex, ey});
69-
return this;
70-
}
71-
72-
public Array2DTracer deselectRow(int x, int sy, int ey) {
73-
addTrace(key, "deselectRow", new Object[]{x, sy, ey});
74-
return this;
75-
}
76-
77-
public Array2DTracer deselectCol(int y, int sx, int ex) {
78-
addTrace(key, "deselectCol", new Object[]{y, sx, ex});
79-
return this;
48+
public void deselectCol(int y, int sx, int ex) {
49+
command("deselectCol", new Object[]{y, sx, ex});
8050
}
8151
}
Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,4 @@
11
package org.algorithm_visualizer;
22

3-
public class ChartTracer extends Tracer {
4-
public ChartTracer(String title) {
5-
super(title);
6-
}
7-
8-
public ChartTracer() {
9-
this(null);
10-
}
11-
12-
public ChartTracer set(Object array1d) {
13-
addTrace(key, "set", new Object[]{array1d});
14-
return this;
15-
}
16-
17-
public ChartTracer set() {
18-
addTrace(key, "set", new Object[]{});
19-
return this;
20-
}
21-
22-
public ChartTracer reset() {
23-
addTrace(key, "reset", new Object[]{});
24-
return this;
25-
}
26-
27-
public ChartTracer delay() {
28-
addTrace(key, "delay", new Object[]{});
29-
return this;
30-
}
31-
32-
public ChartTracer patch(int x, Object v) {
33-
addTrace(key, "patch", new Object[]{x, v});
34-
return this;
35-
}
36-
37-
public ChartTracer depatch(int x) {
38-
addTrace(key, "depatch", new Object[]{x});
39-
return this;
40-
}
41-
42-
public ChartTracer select(int x) {
43-
addTrace(key, "select", new Object[]{x});
44-
return this;
45-
}
46-
47-
public ChartTracer select(int sx, int ex) {
48-
addTrace(key, "select", new Object[]{sx, ex});
49-
return this;
50-
}
51-
52-
public ChartTracer deselect(int x) {
53-
addTrace(key, "deselect", new Object[]{x});
54-
return this;
55-
}
56-
57-
public ChartTracer deselect(int sx, int ex) {
58-
addTrace(key, "deselect", new Object[]{sx, ex});
59-
return this;
60-
}
61-
62-
public ChartTracer chart(ChartTracer chartTracer) {
63-
addTrace(key, "chart", new Object[]{chartTracer.key});
64-
return this;
65-
}
3+
public class ChartTracer extends Array1DTracer {
664
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package org.algorithm_visualizer;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
import com.google.gson.JsonPrimitive;
6+
import com.google.gson.JsonSerializer;
7+
8+
import java.awt.*;
9+
import java.io.BufferedReader;
10+
import java.io.DataOutputStream;
11+
import java.io.FileWriter;
12+
import java.io.InputStreamReader;
13+
import java.io.PrintWriter;
14+
import java.net.HttpURLConnection;
15+
import java.net.URL;
16+
import java.net.URLEncoder;
17+
import java.util.ArrayList;
18+
19+
public abstract class Commander {
20+
private static final int MAX_COMMANDS = 1000000;
21+
private static final int MAX_OBJECTS = 100;
22+
23+
private static class Command {
24+
private String key;
25+
private String method;
26+
private Object[] args;
27+
28+
Command(String key, String method, Object[] args) {
29+
this.key = key;
30+
this.method = method;
31+
this.args = args;
32+
}
33+
}
34+
35+
private static final Gson gson;
36+
37+
private static Randomize.String keyRandomizer = new Randomize.String(8, "abcdefghijklmnopqrstuvwxyz0123456789");
38+
private static int objectCount = 0;
39+
private static ArrayList<Command> commands = new ArrayList<>();
40+
41+
private static void command(String key, String method, Object[] args) {
42+
commands.add(new Command(
43+
key,
44+
method,
45+
gson.fromJson(gson.toJson(args), Object[].class)
46+
));
47+
if (commands.size() > MAX_COMMANDS)
48+
throw new Error("Too Many Commands");
49+
if (objectCount > MAX_OBJECTS)
50+
throw new Error("Too Many Objects");
51+
}
52+
53+
public static void setRoot(Commander child) {
54+
command(null, "setRoot", new Object[]{child});
55+
}
56+
57+
public static void delay(int lineNumber) {
58+
command(null, "delay", new Object[]{lineNumber});
59+
}
60+
61+
public static void delay() {
62+
command(null, "delay", new Object[]{});
63+
}
64+
65+
private final String key;
66+
67+
Commander(Object[] args) {
68+
objectCount++;
69+
String className = this.getClass().getSimpleName();
70+
key = keyRandomizer.create();
71+
command(className, args);
72+
}
73+
74+
public void destroy() {
75+
objectCount--;
76+
command("destroy", new Object[]{});
77+
}
78+
79+
void command(String method, Object[] args) {
80+
command(key, method, args);
81+
}
82+
83+
static {
84+
GsonBuilder gsonBuilder = new GsonBuilder();
85+
JsonSerializer<Commander> serializer = (src, typeOfSrc, context) -> new JsonPrimitive(src.key);
86+
gsonBuilder.registerTypeAdapter(Commander.class, serializer);
87+
gson = gsonBuilder.create();
88+
89+
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
90+
try {
91+
String content = gson.toJson(commands);
92+
if (System.getenv("ALGORITHM_VISUALIZER") == null) {
93+
URL postUrl = new URL("https://algorithm-visualizer.org/api/visualizations");
94+
String params = "content=" + URLEncoder.encode(content, "UTF-8");
95+
96+
HttpURLConnection conn = (HttpURLConnection) postUrl.openConnection();
97+
conn.setRequestMethod("POST");
98+
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
99+
conn.setRequestProperty("Content-Length", Integer.toString(params.getBytes().length));
100+
conn.setDoOutput(true);
101+
102+
DataOutputStream writer = new DataOutputStream(conn.getOutputStream());
103+
writer.writeBytes(params);
104+
writer.close();
105+
106+
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
107+
URL openUrl = new URL(reader.readLine());
108+
reader.close();
109+
110+
Desktop.getDesktop().browse(openUrl.toURI());
111+
} else {
112+
FileWriter fileWriter = new FileWriter("visualization.json");
113+
PrintWriter printWriter = new PrintWriter(fileWriter);
114+
printWriter.print(content);
115+
printWriter.close();
116+
}
117+
} catch (Exception e) {
118+
e.printStackTrace();
119+
}
120+
}));
121+
}
122+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy