/// <summary> /// returns the maybe user altered sequence to execute next for the sequence given /// the randomly chosen sequence is supplied; the object with all available sequences is supplied /// </summary> public int ChooseSequence(int seqToExecute, List<Sequence> sequences, SequenceNAry seq) { ycompClient.UpdateDisplay(); ycompClient.Sync(); context.workaround.PrintHighlighted("Please choose: Which sequence to execute?", HighlightingMode.Choicepoint); Console.WriteLine(" Pre-selecting sequence " + seqToExecute + " chosen by random."); Console.WriteLine("Press (0)...(9) to pre-select the corresponding sequence or (e) to enter the number of the sequence to show." + " Press (s) or (n) to commit to the pre-selected sequence and continue." + " Pressing (u) or (o) works like (s)/(n) but does not ask for the remaining contained sequences."); while(true) { context.highlightSeq = sequences[seqToExecute]; context.choice = true; context.sequences = sequences; PrintSequence(debugSequences.Peek(), context, debugSequences.Count); Console.WriteLine(); context.choice = false; context.sequences = null; ConsoleKeyInfo key = ReadKeyWithCancel(); switch(key.KeyChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': int num = key.KeyChar - '0'; if(num >= sequences.Count) { Console.WriteLine("You must specify a number between 0 and " + (sequences.Count - 1) + "!"); break; } seqToExecute = num; break; case 'e': Console.Write("Enter number of sequence to show: "); String numStr = Console.ReadLine(); if(int.TryParse(numStr, out num)) { if(num < 0 || num >= sequences.Count) { Console.WriteLine("You must specify a number between 0 and " + (sequences.Count - 1) + "!"); break; } seqToExecute = num; break; } Console.WriteLine("You must enter a valid integer number!"); break; case 's': case 'n': return seqToExecute; case 'u': case 'o': seq.Skip = true; // skip remaining rules (reset after exection of seq) return seqToExecute; default: Console.WriteLine("Illegal choice (Key = " + key.Key + ")! Only (0)...(9), (e)nter number, (s)/(n) to commit and continue, (u)/(o) to commit and skip remaining choices allowed! "); break; } } }
public int ChooseSequence(int seqToExecute, List<Sequence> sequences, SequenceNAry seq) { return seqToExecute; }
public void EmitSequenceAll(SequenceNAry seqAll, bool disjunction, bool lazy, SourceBuilder source) { source.AppendFront(SetResultVar(seqAll, disjunction ? "false" : "true")); source.AppendFrontFormat("bool continue_{0} = true;\n", seqAll.Id); source.AppendFrontFormat("List<int> sequencestoexecutevar_{0} = new List<int>({1});\n", seqAll.Id, seqAll.Sequences.Count); source.AppendFrontFormat("for(int i = 0; i < {1}; ++i) sequencestoexecutevar_{0}.Add(i);\n", seqAll.Id, seqAll.Sequences.Count); source.AppendFrontFormat("while(sequencestoexecutevar_{0}.Count>0 && continue_{0})\n", seqAll.Id); source.AppendFront("{\n"); source.Indent(); source.AppendFrontFormat("int positionofsequencetoexecute_{0} = GRGEN_LIBGR.Sequence.randomGenerator.Next(sequencestoexecutevar_{0}.Count);\n", seqAll.Id); source.AppendFrontFormat("switch(sequencestoexecutevar_{0}[positionofsequencetoexecute_{0}])\n", seqAll.Id); source.AppendFront("{\n"); source.Indent(); for(int i = 0; i < seqAll.Sequences.Count; ++i) { source.AppendFrontFormat("case {0}:\n", i); source.AppendFront("{\n"); source.Indent(); EmitSequence(seqAll.Sequences[i], source); source.AppendFrontFormat("sequencestoexecutevar_{0}.Remove({1});\n", seqAll.Id, i); source.AppendFront(SetResultVar(seqAll, GetResultVar(seqAll) + (disjunction ? " || " : " && ") + GetResultVar(seqAll.Sequences[i]))); if(lazy) source.AppendFrontFormat("if(" + (disjunction?"":"!") + GetResultVar(seqAll) + ") continue_{0} = false;\n", seqAll.Id); source.AppendFront("break;\n"); source.Unindent(); source.AppendFront("}\n"); } source.Unindent(); source.AppendFront("}\n"); source.Unindent(); source.AppendFront("}\n"); }