Esempio n. 1
0
 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++;
 }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
 public TaskEnumerator(TaskList list)
 {
     this.list = list;
     previous = current = null;
 }
Esempio n. 5
0
 public TaskItem RemoveCurrent()
 {
     Debug.Assert(current != null);
     TaskItem ret = current;
     list.Remove(current, previous);
     current = null;
     return ret;
 }
Esempio n. 6
0
            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;
            }
Esempio n. 7
0
 internal void AddToActive(TaskItem task)
 {
     active.Append(task);
 }