LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
saveClasses.m
1function [simElem, simDoc] = saveClasses(self, simElem, simDoc)
2% [SIMELEM, SIMDOC] = SAVECLASSES(SIMELEM, SIMDOC)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7sn = self.getStruct;
8
9% Get exportable classes (handles cache classes and class-switching)
10exportClasses = self.getExportableClasses();
11
12% JMT uses higher priority value = higher priority, while LINE uses lower value = higher priority
13% We need to invert priorities when writing to JMT
14maxPrio = max(sn.classprio);
15
16numOfClasses = sn.nclasses;
17for r=1:numOfClasses
18 % Skip classes that should not be exported to JMT
19 if ~exportClasses(r)
20 continue;
21 end
22
23 userClass = simDoc.createElement('userClass');
24 userClass.setAttribute('name', sn.classnames(r));
25 if isinf(sn.njobs(r))
26 userClass.setAttribute('type', 'open');
27 else
28 userClass.setAttribute('type', 'closed');
29 end
30 % Set soft deadline from class deadline (0.0 if no deadline)
31 deadline = sn.classdeadline(r);
32 if isfinite(deadline)
33 userClass.setAttribute('softDeadline', num2str(deadline));
34 else
35 userClass.setAttribute('softDeadline', '0.0');
36 end
37 % Invert priority: LINE uses lower=higher, JMT uses higher=higher
38 jmtPrio = maxPrio - sn.classprio(r);
39 userClass.setAttribute('priority', int2str(jmtPrio));
40 refStatIndex = sn.refstat(r);
41 refNodeIndex = sn.stationToNode(sn.refstat(r));
42 refStatName = sn.nodenames{refNodeIndex};
43 if ~isempty(sn.proc{refStatIndex}{r})
44 if isfinite(sn.njobs(r)) % if closed
45 userClass.setAttribute('customers', int2str(sn.njobs(r)));
46 userClass.setAttribute('referenceSource', refStatName);
47 elseif isnan(sn.proc{refStatIndex}{r}{1}) % open disabled in source
48 userClass.setAttribute('referenceSource', 'ClassSwitch');
49 else % if other open
50 userClass.setAttribute('referenceSource', sn.nodenames{sn.stationToNode(sn.refstat(r))});
51 end
52 else
53 userClass.setAttribute('referenceSource', sn.nodenames{sn.stationToNode(sn.refstat(r))});
54 end
55 simElem.appendChild(userClass);
56end
57
58end