Problemer med generering af forskellige schedules på baggrund af
Problemer med generering af forskellige schedulesIdéen med nedenstående kode er, at en træstruktur indeholdende knuder rummende data af typen Task<int> gennem rekursion af metoden skal opbygge en Liste af Shedule<int, LinkedList<int, Reservation>> (som er en udvidet Dictionary).
Træet er indrettet således, at der ved knuder hvis underknuder alle skal inddrages i samme Schedule er angivet en dette med en Enum – Quaf.and - mens der ved andre, hvis underknuder er individuelle ”vej” til at imødegå deres forældreknude, er angivet dette med et Quaf.or.
Meningen er, at stødes der på en knude der er angivet med Quaf.or, skal der oprettes en kopi af den Schedule, som anvendes i det pågældende scope og arbejdes videre med denne, for de underliggende knuder.
Således er det eksempelvis meningen, at et træ med to .Quaf.or-forekomster, der hver har to underliggende børn, skal generere fire Schedules til listen Shedule<int, LinkedList<int, Reservation>>.
Problemet er, at de fire Schedules der genereres af koden nedenfor indeholder nøjagtig de samme data frem for – som det er tanken - at indeholde fire forskellige Schedules.
Er der nogen, der kan hitte ud af hvorfor det forekommer?
private void ScheduleNodes(INode<Task<int>> node, Schedule<int, LinkedList<Reservation>> currentSchedule)
{
Schedule<int, LinkedList<Reservation>> sch = currentSchedule;
foreach (INode<Task<int>> n in node.DirectChildren.Nodes)
{
if (node.Quaf.Equals(Quaf.or))
{
//If the the node's child nodes have a Quaf.or relationship,
//create a copy of the Schedule in a new instance to make an optional alternative.
Schedule<int, LinkedList<Reservation>> s = new Schedule<int, LinkedList<Reservation>>(currentSchedule);
schedules.Remove(currentSchedule);
sch = s;
this.schedules.Add(sch);
ScheduleNodes(n, sch);
}
else
{
ScheduleNodes(n, sch);
}
}
//Invariant - node = Root -> node.Data = null
if (node.Data != null)
{
foreach (Method<int> m in node.Data.Methods)
{
ScheduleMethod(m, sch);
}
}
}