LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
ClassSwitch.m
1classdef ClassSwitch < Node
2 % A node to change the class of visiting jobs
3 %
4 % Copyright (c) 2012-2026, Imperial College London
5 % All rights reserved.
6
7 properties (Hidden)
8 autoAdded;
9 end
10
11 properties
12 cap;
13 schedPolicy;
14 schedStrategy;
15 end
16
17 methods
18 %Constructor
19 function self = ClassSwitch(model, name, csMatrix)
20 % SELF = CLASSSWITCH(MODEL, NAME, CSMATRIX)
21
22 self@Node(name);
23 if isa(model,'Network')
24 % Handle the new delegation pattern
25 if model.isMatlabNative()
26 classes = model.getClasses();
27 if nargin < 3
28 csMatrix = eye(length(classes));
29 end
30
31 self.autoAdded = false;
32 self.input = Buffer(classes);
33 self.output = Dispatcher(classes);
34 self.cap = Inf;
35 self.schedPolicy = SchedStrategyType.NP;
36 self.schedStrategy = SchedStrategy.FCFS;
37 self.server = StatelessClassSwitcher(classes, csMatrix);
38 self.setModel(model);
39 model.addNode(self);
40 else
41 % Java implementation through delegation
42 self.setModel(model);
43 if nargin < 3
44 self.obj = jline.lang.nodes.ClassSwitch(model.implementation.obj, name);
45 else
46 self.obj = jline.lang.nodes.ClassSwitch(model.implementation.obj, name, csMatrix);
47 end
48 self.index = model.implementation.obj.getNodeIndex(self.obj);
49 end
50 elseif isa(model,'MNetwork') || (isa(model,'Network') && model.isMatlabNative())
51 classes = model.getClasses();
52 if nargin < 3
53 csMatrix = eye(length(classes));
54 end
55
56 self.autoAdded = false;
57 self.input = Buffer(classes);
58 self.output = Dispatcher(classes);
59 self.cap = Inf;
60 self.schedPolicy = SchedStrategyType.NP;
61 self.schedStrategy = SchedStrategy.FCFS;
62 self.server = StatelessClassSwitcher(classes, csMatrix);
63 self.setModel(model);
64 self.model.addNode(self);
65 elseif isa(model,'JNetwork') || (isa(model,'Network') && model.isJavaNative())
66 self.setModel(model);
67 if nargin < 3
68 self.obj = jline.lang.nodes.ClassSwitch(model.obj, name);
69 else
70 self.obj = jline.lang.nodes.ClassSwitch(model.obj, name, csMatrix);
71 end
72 self.index = model.obj.getNodeIndex(self.obj);
73 end
74 end
75
76 function C = initClassSwitchMatrix(self)
77 % C = INITCLASSSWITCHMATRIX()
78
79 K = self.model.getNumberOfClasses;
80 C = zeros(K,K);
81 end
82
83 function setClassSwitchingMatrix(self, csMatrix)
84 self.server.updateClasses(self.model.getClasses());
85 self.server.updateClassSwitch(csMatrix);
86 end
87
88 function setProbRouting(self, class, destination, probability)
89 % SETPROBROUTING(CLASS, DESTINATION, PROBABILITY)
90
91 setRouting(self, class, RoutingStrategy.PROB, destination, probability);
92 end
93
94 function summary(self)
95 % SUMMARY()
96
97 line_printf('\nNode: <strong>%s</strong>',self.getName);
98 for r=1:length(self.output.outputStrategy)
99 %classes = self.model.getClasses();
100 %line_printf('Routing %s: %s',classes{r}.name,self.output.outputStrategy{r}{2});
101 for s=1:length(self.output.outputStrategy)
102 if self.server.csMatrix(r,s)>0
103 classes = self.model.getClasses();
104 line_printf('Routing %s->%s: %g',classes{r}.name,classes{s}.name,self.server.csMatrix(r,s));
105 end
106 end
107 end
108 % self.input.summary;
109 % self.server.summary;
110 % self.output.summary;
111 end
112 end
113
114end