1classdef ClassSwitch < Node
2 % A node to change the
class of visiting jobs
4 % Copyright (c) 2012-2026, Imperial College London
19 function self = ClassSwitch(model, name, csMatrix)
20 % SELF = CLASSSWITCH(MODEL, NAME, CSMATRIX)
23 if isa(model,
'Network')
24 % Handle the
new delegation pattern
25 if model.isMatlabNative()
28 csMatrix = eye(length(
classes));
31 self.autoAdded =
false;
33 self.output = Dispatcher(
classes);
35 self.schedPolicy = SchedStrategyType.NP;
36 self.schedStrategy = SchedStrategy.FCFS;
37 self.server = StatelessClassSwitcher(
classes, csMatrix);
41 % Java implementation through delegation
44 self.obj = jline.lang.nodes.ClassSwitch(model.implementation.obj, name);
46 self.obj = jline.lang.nodes.ClassSwitch(model.implementation.obj, name, csMatrix);
48 self.index = model.implementation.obj.getNodeIndex(self.obj);
50 elseif isa(model,
'MNetwork') || (isa(model,
'Network') && model.isMatlabNative())
53 csMatrix = eye(length(
classes));
56 self.autoAdded =
false;
58 self.output = Dispatcher(
classes);
60 self.schedPolicy = SchedStrategyType.NP;
61 self.schedStrategy = SchedStrategy.FCFS;
62 self.server = StatelessClassSwitcher(
classes, csMatrix);
64 self.model.addNode(self);
65 elseif isa(model,
'JNetwork') || (isa(model,
'Network') && model.isJavaNative())
68 self.obj = jline.lang.nodes.ClassSwitch(model.obj, name);
70 self.obj = jline.lang.nodes.ClassSwitch(model.obj, name, csMatrix);
72 self.index = model.obj.getNodeIndex(self.obj);
76 function C = initClassSwitchMatrix(self)
77 % C = INITCLASSSWITCHMATRIX()
79 K = self.model.getNumberOfClasses;
83 function setClassSwitchingMatrix(self, csMatrix)
84 self.server.updateClasses(self.model.getClasses());
85 self.server.updateClassSwitch(csMatrix);
88 function setProbRouting(self, class, destination, probability)
89 % SETPROBROUTING(CLASS, DESTINATION, PROBABILITY)
91 setRouting(self, class, RoutingStrategy.PROB, destination, probability);
94 function summary(self)
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));
108 % self.input.summary;
109 % self.server.summary;
110 % self.output.summary;