public void DoLeave() { etati = SiteEtat.Dehors; jeton[i] = nbreqi[i]; // jValues = "pour j de i+1 à n puis de 1 à i-1" (-- PROF) // or for j = i + 1 to n - 1 and then from 0 to i - 1 (-- KAITO) var n = Ri.Count + 1; // all sites, including me ("i") var iToEnd = Enumerable.Range(i + 1, n).Where(el => el < n); var startToI = Enumerable.Range(0, i).Where(el => el < i); var jValues = iToEnd.Concat(startToI); foreach (var j in jValues) { if (nbreqi[j] > jeton[j]) { jetonDispi = false; // jeton = null; SendMessage(new MeikoMessage { Type = "Jeton", ["Jeton"] = jeton, Dst = (char)j, }); break; } } }
// --- public void DoEnter() { etati = SiteEtat.Demandeur; if (!jetonDispi) { nbreqi[i] = nbreqi[i] + 1; foreach (var j in Ri) { SendMessage(new MeikoMessage { ["Pretty"] = $"request({i}, n={nbreqi[i]})", Type = "Request", Src = i, ["n"] = nbreqi[i], Dst = j, }); } while (!(jetonDispi)) { /* no-op */; } } etati = SiteEtat.Dedans; }
// -- public void DoEnter() { etati = SiteEtat.Demandeur; while (!(jetonDispi)) { /* no-op */; } etati = SiteEtat.Dedans; }
public void DoLeave() { etati = SiteEtat.Dehors; jetonDispi = false; SendJetonToTheNextSite(); }