LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getExportableClasses.m
1function [exportClasses, cacheClasses] = getExportableClasses(self)
2% [EXPORTCLASSES, CACHECLASSES] = GETEXPORTABLECLASSES()
3%
4% Returns a logical array indicating which classes should be exported to JMT.
5% Classes with 0 customers are normally skipped unless they are used as
6% cache hit/miss classes (since jobs will switch into them).
7%
8% Returns:
9% exportClasses - logical array, true for classes to export
10% cacheClasses - array of class indices used as cache hit/miss classes
11
12% Copyright (c) 2012-2026, Imperial College London
13% All rights reserved.
14
15sn = self.getStruct;
16numOfClasses = sn.nclasses;
17
18% Build set of classes used as cache hit/miss classes
19cacheClasses = [];
20for i = 1:length(sn.nodeparam)
21 if ~isempty(sn.nodeparam{i}) && isfield(sn.nodeparam{i}, 'hitclass')
22 cacheClasses = [cacheClasses, sn.nodeparam{i}.hitclass(sn.nodeparam{i}.hitclass > 0)];
23 end
24 if ~isempty(sn.nodeparam{i}) && isfield(sn.nodeparam{i}, 'missclass')
25 cacheClasses = [cacheClasses, sn.nodeparam{i}.missclass(sn.nodeparam{i}.missclass > 0)];
26 end
27end
28cacheClasses = unique(cacheClasses);
29
30% Build set of classes that can receive jobs via class-switching
31% A class can receive jobs if it's in the same chain as another class with jobs
32classSwitchClasses = [];
33for c = 1:sn.nchains
34 classesInChain = find(sn.chains(c,:) > 0);
35 if length(classesInChain) > 1
36 % Check if any class in this chain has jobs
37 chainHasJobs = false;
38 for r = classesInChain
39 if sn.njobs(r) > 0
40 chainHasJobs = true;
41 break;
42 end
43 end
44 if chainHasJobs
45 % All classes in this chain can receive jobs via class-switching
46 classSwitchClasses = [classSwitchClasses, classesInChain];
47 end
48 end
49end
50classSwitchClasses = unique(classSwitchClasses);
51
52% Determine which classes to export
53exportClasses = true(1, numOfClasses);
54for r = 1:numOfClasses
55 % Skip closed classes with 0 customers unless they are cache classes
56 % or can receive jobs via class-switching
57 if isfinite(sn.njobs(r)) && sn.njobs(r) == 0 && ...
58 ~ismember(r, cacheClasses) && ~ismember(r, classSwitchClasses)
59 exportClasses(r) = false;
60 end
61end
62
63end