LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
OpenSignal.m
1classdef OpenSignal < OpenClass
2 % OpenSignal Signal class for open queueing networks
3 %
4 % OpenSignal is a specialized OpenClass for modeling signals in open
5 % queueing networks. Unlike regular customers, signals can have special
6 % effects on queues they visit, such as removing jobs (negative signals)
7 % or unblocking servers (reply signals).
8 %
9 % For closed networks, use ClosedSignal instead.
10 %
11 % Signal types:
12 % - SignalType.NEGATIVE: Removes a job from the destination queue
13 % - SignalType.REPLY: Unblocks servers waiting for a reply
14 %
15 % Example:
16 % @code
17 % model = Network('OpenModel');
18 % source = Source(model, 'Source');
19 % sink = Sink(model, 'Sink');
20 % queue = Queue(model, 'Queue', SchedStrategy.FCFS);
21 % reqClass = OpenClass(model, 'Request');
22 % replySignal = OpenSignal(model, 'Reply', SignalType.REPLY).forJobClass(reqClass);
23 % @endcode
24 %
25 % Copyright (c) 2012-2026, Imperial College London
26 % All rights reserved.
27
28 properties
29 signalType % SignalType constant (NEGATIVE, REPLY)
30 targetJobClass % JobClass that this signal is associated with
31 end
32
33 methods
34
35 function self = OpenSignal(model, name, signalType, prio)
36 % OPENSIGNAL Create an open signal class instance
37 %
38 % @param model Network model to add the signal class to
39 % @param name String identifier for the signal class
40 % @param signalType SignalType constant (default: SignalType.NEGATIVE)
41 % @param prio Optional priority level (default: 0)
42 % @return self OpenSignal instance
43
44 if nargin < 4
45 prio = 0;
46 end
47 if nargin < 3 || isempty(signalType)
48 signalType = SignalType.NEGATIVE;
49 end
50
51 self@OpenClass(model, name, prio);
52 self.signalType = signalType;
53 self.targetJobClass = [];
54
55 if model.isJavaNative()
56 % Replace the OpenClass Java object with a Signal object
57 self.obj = jline.lang.Signal(model.obj, name, signalType, prio);
58 end
59 end
60
61 function type = getSignalType(self)
62 % GETSIGNALTYPE Get the signal type
63 type = self.signalType;
64 end
65
66 function self = forJobClass(self, jobClass)
67 % FORJOBCLASS Associate this signal with a job class
68 %
69 % For REPLY signals, this specifies which job class's servers
70 % will be unblocked when this signal arrives.
71 %
72 % @param jobClass The JobClass to associate with this signal
73 % @return self The modified Signal instance (for chaining)
74
75 self.targetJobClass = jobClass;
76 if ~isempty(jobClass)
77 jobClass.replySignalClass = self;
78 end
79 end
80
81 function jobClass = getTargetJobClass(self)
82 % GETTARGETJOBCLASS Get the associated job class
83 jobClass = self.targetJobClass;
84 end
85
86 function idx = getTargetJobClassIndex(self)
87 % GETTARGETJOBCLASSINDEX Get the index of the associated job class
88 if isempty(self.targetJobClass)
89 idx = -1;
90 else
91 idx = self.targetJobClass.index;
92 end
93 end
94
95 end
96
97end