103 using sn_print_detail::mat;
104 using sn_print_detail::names;
105 using sn_print_detail::num;
106 using sn_print_detail::row;
107 using sn_print_detail::tmat;
108 typedef std::vector<double> Row;
109 typedef std::vector<std::vector<double>> Tab;
110 const std::size_t M =
sn.nof_stations(), K =
sn.nclasses, I =
sn.nof_nodes();
113 out +=
"nstations: " + num(
static_cast<double>(M)) +
"\n";
114 out +=
"nstateful: " + num(
static_cast<double>(
sn.nof_stateful())) +
"\n";
115 out +=
"nnodes: " + num(
static_cast<double>(I)) +
"\n";
116 out +=
"nclasses: " + num(
static_cast<double>(K)) +
"\n";
117 out +=
"nclosedjobs: " + num(
sn.nclosedjobs()) +
"\n";
118 out +=
"nchains: " + num(
static_cast<double>(
sn.nchains)) +
"\n";
120 Row refstat(K), njobsv =
sn.njobs(), classprio(K);
121 for (std::size_t r = 0; r < K; ++r) {
122 refstat[r] =
static_cast<double>(
sn.classes[r].refstat);
123 classprio[r] =
static_cast<double>(
sn.classes[r].prio);
125 out +=
"refstat: " + row(refstat) +
"\n";
126 out +=
"njobs: " + row(njobsv) +
"\n";
127 Row nservers(M), cap(M);
128 Tab classcap(M, Row(K)), phases(M, Row(K)), schedparam(M, Row(K, 0.0));
129 Tab droprule(M, Row(K)), procid(M, Row(K));
130 for (std::size_t i = 0; i < M; ++i) {
131 nservers[i] =
sn.stations[i].nservers;
132 cap[i] = i <
sn.cap.size() ?
sn.cap[i] : std::numeric_limits<double>::infinity();
133 for (std::size_t r = 0; r < K; ++r) {
134 classcap[i][r] = i <
sn.classcap.size() && r <
sn.classcap[i].size()
136 : std::numeric_limits<double>::infinity();
137 phases[i][r] =
static_cast<double>(
sn.phases_of(i + 1, r + 1));
138 if (r <
sn.stations[i].schedparam.size())
140 droprule[i][r] = i <
sn.droprule.size() && r <
sn.droprule[i].size()
141 ?
static_cast<double>(
static_cast<int>(
sn.droprule[i][r]))
142 :
static_cast<double>(
static_cast<int>(qn::DropStrategy::WAITQ));
143 procid[i][r] =
static_cast<double>(
static_cast<int>(
sn.procid(i + 1, r + 1)));
146 out +=
"nservers: " + row(nservers) +
"\n";
147 out +=
"rates: " + tmat(
sn.rates) +
"\n";
148 out +=
"scv: " + tmat(
sn.scv) +
"\n";
149 out +=
"classprio: " + row(classprio) +
"\n";
150 out +=
"phases: " + mat(phases) +
"\n";
151 out +=
"schedparam: " + mat(schedparam) +
"\n";
153 Tab chains(
sn.chains.size());
154 for (std::size_t c = 0; c <
sn.chains.size(); ++c)
155 for (std::size_t r = 0; r <
sn.chains[c].size(); ++r)
156 chains[c].push_back(
sn.chains[c][r] ? 1.0 : 0.0);
157 out +=
"chains: " + mat(chains) +
"\n";
158 out +=
"rt: " + tmat(
sn.rt) +
"\n";
159 out +=
"rtnodes: " + tmat(
sn.rtnodes) +
"\n";
161 Tab nvars(
sn.nvars.size());
162 for (std::size_t i = 0; i <
sn.nvars.size(); ++i)
163 for (std::size_t v = 0; v <
sn.nvars[i].size(); ++v)
164 nvars[i].push_back(
static_cast<double>(
sn.nvars[i][v]));
165 out +=
"nvars: " + mat(nvars) +
"\n";
166 out +=
"cap: " + row(cap) +
"\n";
167 out +=
"classcap: " + mat(classcap) +
"\n";
169 Row refclass(
sn.refclass.size());
170 for (std::size_t c = 0; c <
sn.refclass.size(); ++c)
171 refclass[c] =
static_cast<double>(
sn.refclass[c]);
172 out +=
"refclass: " + row(refclass) +
"\n";
175 for (std::size_t i = 0; i < M; ++i)
176 if (!
sn.stations[i].lldscaling.empty()) {
178 for (std::size_t n = 0; n <
sn.stations[i].lldscaling.size(); ++n)
182 out +=
"lldscaling: " + (lld.empty() ? std::string(
"[]") : mat(lld)) +
"\n";
184 Tab
fj(
sn.fj.size());
185 for (std::size_t e = 0; e <
sn.fj.size(); ++e) {
186 fj[e].push_back(
static_cast<double>(
sn.fj[e].first));
187 fj[e].push_back(
static_cast<double>(
sn.fj[e].second));
189 out +=
"fj: " + mat(
fj) +
"\n";
192 if (
sn.nodes.empty()) {
196 for (std::size_t i = 0; i < I; ++i) {
197 if (i > 0) out +=
", ";
202 std::vector<std::string> classnames(K), nodenames(I), schednames(M);
203 for (std::size_t r = 0; r < K; ++r) classnames[r] =
sn.classes[r].name;
204 for (std::size_t i = 0; i < I; ++i) nodenames[i] =
sn.nodes[i].name;
205 out +=
"classnames: " + names(classnames) +
"\n";
206 out +=
"nodenames: " + names(nodenames) +
"\n";
209 for (std::size_t i = 0; i < M; ++i) {
210 if (i > 0) out +=
", ";
211 out +=
"\"" +
sn.stations[i].name +
"\": \"" +
216 out +=
"procid: " + mat(procid) +
"\n";
218 for (std::size_t i = 0; i < M; ++i) {
219 if (i > 0) out +=
", ";
220 out +=
"\"" +
sn.stations[i].name +
"\": {";
221 for (std::size_t r = 0; r < K; ++r) {
222 if (r > 0) out +=
", ";
224 out +=
"\"" +
sn.classes[r].name +
"\": ";
238 for (std::size_t c = 0; c <
sn.inchain.size(); ++c) {
239 if (c > 0) out +=
", ";
241 for (std::size_t k = 0; k <
sn.inchain[c].size(); ++k)
242 rw.push_back(
static_cast<double>(
sn.inchain[c][k]));
243 out += num(
static_cast<double>(c)) +
": " + row(rw);
248 for (std::size_t c = 0; c <
sn.visits.size(); ++c) {
249 if (c > 0) out +=
", ";
250 out += num(
static_cast<double>(c)) +
": " + tmat(
sn.visits[c]);
253 out +=
"nodevisits: {";
254 for (std::size_t c = 0; c <
sn.nodevisits.size(); ++c) {
255 if (c > 0) out +=
", ";
256 out += num(
static_cast<double>(c)) +
": " + tmat(
sn.nodevisits[c]);
259 out +=
"droprule: " + mat(droprule) +
"\n";
261 Row s2n(
sn.station_to_node.size()), stf(
sn.stateful_nodes.size());
262 for (std::size_t i = 0; i <
sn.station_to_node.size(); ++i)
263 s2n[i] =
static_cast<double>(
sn.station_to_node[i]);
264 for (std::size_t i = 0; i <
sn.stateful_nodes.size(); ++i)
265 stf[i] =
static_cast<double>(
sn.stateful_nodes[i]);
266 out +=
"stationToNode: " + row(s2n) +
"\n";
267 out +=
"statefulNodes: " + row(stf) +
"\n";
269 out +=
"csmatrix: {";
272 for (
typename std::map<std::size_t,
Matrix<T>>::const_iterator it =
sn.csmatrix.begin();
273 it !=
sn.csmatrix.end(); ++it) {
274 if (!first) out +=
", ";
276 out += num(
static_cast<double>(it->first)) +
": " + tmat(it->second);