internal void Add(TaskItem task) { //signal only becomes unset when it has tasks if (isSet) isSet = false; //the signal keeps a list of tasks that are waiting for it tasks.Add(task); //use the task's data for tracking the number of signals it's still waiting for task.Data++; }
public void Append(TaskItem task) { Debug.Assert(task.Next == null); if (First == null) { Debug.Assert(Last == null); First = Last = task; } else { Debug.Assert(Last.Next == null); Last.Next = task; Last = task; } }
public void Remove(TaskItem task, TaskItem previous) { if (previous == null) { Debug.Assert(task == First); First = task.Next; } else { Debug.Assert(previous.Next == task); previous.Next = task.Next; } if (task.Next == null) { Debug.Assert(Last == task); Last = previous; } task.Next = null; }
public TaskEnumerator(TaskList list) { this.list = list; previous = current = null; }
public TaskItem RemoveCurrent() { Debug.Assert(current != null); TaskItem ret = current; list.Remove(current, previous); current = null; return ret; }
public bool MoveNext() { TaskItem next; if (current == null) { if (previous == null) next = list.First; else next = previous.Next; } else { next = current.Next; } if (next != null) { if (current != null) previous = Current; current = next; return true; } return false; }
internal void AddToActive(TaskItem task) { active.Append(task); }