1classdef SolverFeatureSet < handle
2 % An auxiliary
class to specify
the features supported by a solver.
4 % Copyright (c) 2012-2026, Imperial College London
8 list; % list of features
12 % Canonical feature-name registry; must stay identical to
13 % jar FeatureSet.java and python base.py SolverFeatureSet.FIELDS
14 fields = {
'ClassSwitch',...
46 'EmpiricalCdf',... % name declared by EmpiricalCDF.m, not
the JSON wire type
57 'StatelessClassSwitcher',...
58 'CacheClassSwitcher',...
77 'RoutingStrategy_PROB', ...
78 'RoutingStrategy_RAND', ...
79 'RoutingStrategy_RROBIN', ...
80 'RoutingStrategy_WRROBIN', ...
81 'RoutingStrategy_JSQ', ...
82 'RoutingStrategy_KCHOICES', ...
83 'RoutingStrategy_RL', ...
84 'SchedStrategy_INF', ...
85 'SchedStrategy_FCFS', ...
86 'SchedStrategy_FCFSPR', ...
87 'SchedStrategy_FCFSPI', ...
88 'SchedStrategy_FCFSPRIO', ...
89 'SchedStrategy_FCFSPRPRIO', ...
90 'SchedStrategy_FCFSPIPRIO', ...
91 'SchedStrategy_LCFS', ...
92 'SchedStrategy_LCFSPR', ...
93 'SchedStrategy_LCFSPI', ...
94 'SchedStrategy_LCFSPRIO', ...
95 'SchedStrategy_LCFSPRPRIO', ...
96 'SchedStrategy_LCFSPIPRIO', ...
97 'SchedStrategy_SEPT', ...
98 'SchedStrategy_LEPT', ...
99 'SchedStrategy_SJF', ...
100 'SchedStrategy_LJF', ...
101 'SchedStrategy_SRPT', ...
102 'SchedStrategy_SRPTPRIO', ...
103 'SchedStrategy_PSJF', ...
104 'SchedStrategy_FB', ...
105 'SchedStrategy_LRPT', ...
106 'SchedStrategy_SETF', ...
107 'SchedStrategy_FSP', ...
108 'SchedStrategy_PAS', ...
109 'SchedStrategy_OI', ...
110 'SchedStrategy_PS', ...
111 'SchedStrategy_DPS', ...
112 'SchedStrategy_GPS', ...
113 'SchedStrategy_PSPRIO', ...
114 'SchedStrategy_DPSPRIO', ...
115 'SchedStrategy_GPSPRIO', ...
116 'SchedStrategy_SIRO', ...
117 'SchedStrategy_HOL', ...
118 'SchedStrategy_EXT', ...
119 'SchedStrategy_POLLING', ...
120 'SchedStrategy_EDD', ...
121 'SchedStrategy_EDF', ...
122 'SchedStrategy_LPS', ...
123 'ReplacementStrategy_RR', ...
124 'ReplacementStrategy_FIFO', ...
125 'ReplacementStrategy_SFIFO', ...
126 'ReplacementStrategy_LRU', ...
127 'ReplacementStrategy_HLRU', ...
128 'ReplacementStrategy_CLIMB', ...
129 'ReplacementStrategy_QLRU', ...
132 'SelfLoopingClass', ...
135 'SignalType_NEGATIVE', ...
136 'SignalType_REPLY', ...
137 'SignalType_CATASTROPHE', ...
138 'SignalBatchRemoval', ...
139 'SignalRemovalPolicy', ...
140 'LoadDependence', ...
141 'ClassDependence', ...
153 'ActivityPrecedence_PRE_SEQ', ...
154 'ActivityPrecedence_POST_SEQ', ...
155 'ActivityPrecedence_PRE_AND', ...
156 'ActivityPrecedence_POST_AND', ...
157 'ActivityPrecedence_PRE_OR', ...
158 'ActivityPrecedence_POST_OR', ...
159 'SchedStrategy_REF'};
163 function self = SolverFeatureSet()
164 % SELF = SOLVERFEATURESET()
167 fields = SolverFeatureSet.fields;
168 for f=1:length(fields)
169 self.list.(fields{f})=
false;
173 function self = setTrue(self, feature)
174 % SELF = SETTRUE(FEATURE)
177 for c=1:length(feature)
178 self.setTrue(feature{c});
181 if ~strcmpi(feature,
'char') % ignore empty sections
182 self.list.(feature) =
true;
187 function self = setFalse(self, feature)
188 % SELF = SETFALSE(FEATURE)
191 for c=1:length(feature)
192 self.setFalse(feature{c});
195 self.list.(feature) =
false;
202 function [bool, reason] = supports(featSupportedList, featUsedList)
203 % [BOOL, REASON] = SUPPORTS(FEATSUPPORTEDLIST, FEATUSEDLIST)
205 % BOOL
is true when every feature used by
the model
is supported.
206 % REASON
is a human-readable list of
the offending feature names
207 % (empty when BOOL
is true),
for use in method-aware error messages.
213 fields = SolverFeatureSet.fields;
214 for f=1:length(fields)
215 if featUsedList.list.(fields{f}) > featSupportedList.list.(fields{f})
217 unsupported{end+1} = fields{f}; %#ok<AGROW>
222 if ~isempty(unsupported)
223 str=
'Some features are not supported by the chosen solver (feature: ';
224 for u=1:length(unsupported)
226 str = sprintf(
'%s%s',str,unsupported{u});
228 str = sprintf(
'%s, %s',str,unsupported{u});
231 str = sprintf(
'%s).\n',str);
233 % Preserve
the historical side-effect warning
for the coarse
234 % (solver-level) callers that
do not consume REASON.
236 line_warning(mfilename,str);