Skip to content

Commit 4cd4b59

Browse files
committed
Fix Java concoredocker to match Python behavior
1 parent 3975bbd commit 4cd4b59

1 file changed

Lines changed: 24 additions & 17 deletions

File tree

concoredocker.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class concoredocker {
1616
private static String inpath = "/in";
1717
private static String outpath = "/out";
1818
private static Map<String, Object> params = new HashMap<>();
19+
private static int simtime = 0;
1920
private static int maxtime;
2021

2122
public static void main(String[] args) {
@@ -63,19 +64,19 @@ private static Map<String, Object> parseFile(String filename) throws IOException
6364
private static void defaultMaxTime(int defaultValue) {
6465
try {
6566
String content = new String(Files.readAllBytes(Paths.get(inpath + "1/concore.maxtime")));
66-
// changed assumption from map to list for maxtime, as it usually represents a list of time steps
67-
maxtime = ((List<?>) literalEval(content)).size();
68-
} catch (IOException e) {
67+
maxtime = ((Number) literalEval(content)).intValue();
68+
} catch (Exception e) {
6969
maxtime = defaultValue;
7070
}
7171
}
7272

73-
private static void unchanged() {
73+
private static boolean unchanged() {
7474
if (olds.equals(s)) {
7575
s = "";
76-
} else {
77-
olds = s;
76+
return true;
7877
}
78+
olds = s;
79+
return false;
7980
}
8081

8182
private static Object tryParam(String n, Object i) {
@@ -95,9 +96,13 @@ private static Object read(int port, String name, String initstr) {
9596
retrycount++;
9697
}
9798
s += ins;
98-
Object[] inval = ((List<?>) literalEval(ins)).toArray(); // FIXED: Casted to List, converted to Array
99-
int simtime = Math.max((int) inval[0], 0); // assuming simtime is an integer
100-
return inval[1];
99+
List<?> inval = (List<?>) literalEval(ins);
100+
simtime = Math.max(simtime, ((Number) inval.get(0)).intValue());
101+
Object[] val = new Object[inval.size() - 1];
102+
for (int i = 1; i < inval.size(); i++) {
103+
val[i - 1] = inval.get(i);
104+
}
105+
return val;
101106
} catch (IOException | InterruptedException | ClassCastException e) {
102107
return initstr;
103108
}
@@ -110,20 +115,21 @@ private static void write(int port, String name, Object val, int delta) {
110115
if (val instanceof String) {
111116
Thread.sleep(2 * delay);
112117
} else if (!(val instanceof Object[])) {
113-
System.out.println("mywrite must have list or str");
114-
System.exit(1);
118+
System.out.println("write must have list or str");
119+
return;
115120
}
116121
if (val instanceof Object[]) {
117122
Object[] arrayVal = (Object[]) val;
118123
content.append("[")
119-
.append(maxtime + delta)
124+
.append(simtime + delta)
120125
.append(",")
121126
.append(arrayVal[0]);
122127
for (int i = 1; i < arrayVal.length; i++) {
123128
content.append(",")
124129
.append(arrayVal[i]);
125130
}
126131
content.append("]");
132+
simtime += delta;
127133
} else {
128134
content.append(val);
129135
}
@@ -134,13 +140,14 @@ private static void write(int port, String name, Object val, int delta) {
134140
}
135141

136142
private static Object[] initVal(String simtimeVal) {
137-
int simtime = 0;
138143
Object[] val = new Object[] {};
139144
try {
140-
Object[] arrayVal = ((List<?>) literalEval(simtimeVal)).toArray(); // FIXED: Casted to List, converted to Array
141-
simtime = (int) arrayVal[0]; // assuming simtime is an integer
142-
val = new Object[arrayVal.length - 1];
143-
System.arraycopy(arrayVal, 1, val, 0, val.length);
145+
List<?> inval = (List<?>) literalEval(simtimeVal);
146+
simtime = ((Number) inval.get(0)).intValue();
147+
val = new Object[inval.size() - 1];
148+
for (int i = 1; i < inval.size(); i++) {
149+
val[i - 1] = inval.get(i);
150+
}
144151
} catch (Exception e) {
145152
e.printStackTrace();
146153
}

0 commit comments

Comments
 (0)