-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.java
More file actions
116 lines (96 loc) · 3.45 KB
/
Main.java
File metadata and controls
116 lines (96 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Condition;
import java.util.Vector;
import java.util.Scanner;
import java.io.FileReader;
import java.util.StringTokenizer;
class Main
{
public static void main(String[] args)
{
if (args.length != 1) {
System.err.println("Usage: program <input>");
System.err.println(" default to stdin");
System.exit(1);
}
String inputFilePath = args[0];
Scanner in = null;
try {
in = new Scanner(new FileReader(inputFilePath));
} catch (java.io.FileNotFoundException e) {
System.err.println("Unable to open file: " + inputFilePath);
System.exit(2);
}
Sched sc = null;
Vector<Process> processes = new Vector<Process>();
Integer expectedTasks = null;
for (int i = 0; in.hasNextLine(); i++) {
StringTokenizer tokenizer = new StringTokenizer(in.nextLine());
if (i == 0) {
if (tokenizer.countTokens() != 3) {
System.err.println("Expected 3 tokens, got " +
tokenizer.countTokens());
System.exit(1);
}
int timesteps = Integer.parseInt((String)tokenizer.nextElement());
String mode = (String)tokenizer.nextElement();
Sched.Mode schedMode = null;
switch (mode) {
case "ED":
schedMode = Sched.Mode.ED;
break;
case "FIFO":
schedMode = Sched.Mode.FIFO;
break;
case "RM":
schedMode = Sched.Mode.RM;
break;
case "OPTI":
schedMode = Sched.Mode.OPTI;
break;
case "ID":
schedMode = Sched.Mode.ID;
break;
default:
System.err.println("Unknown mode " + mode);
System.exit(1);
}
expectedTasks = Integer.parseInt((String)tokenizer.nextElement());
sc = new Sched(schedMode, timesteps);
continue;
}
if (tokenizer.countTokens() == 0) {
// ignore empty lines
continue;
}
if (tokenizer.countTokens() != 2) {
System.err.println("Expected 2 tokens, got " +
tokenizer.countTokens());
System.exit(1);
}
Process p = new Process(i - 1, sc);
processes.add(p);
sc.addProcess(p,
Integer.parseInt((String)tokenizer.nextElement()),
Integer.parseInt((String)tokenizer.nextElement()));
}
if (sc == null) {
System.out.println("Empty sched def.");
System.exit(1);
}
if (expectedTasks != processes.size()) {
System.out.println("Expected " + expectedTasks + " tasks, got " +
processes.size());
System.exit(1);
}
sc.start();
try {
sc.join();
} catch (InterruptedException e) {
// TODO:
e.printStackTrace();
}
sc.printTrace();
}
}