Exemplo n.º 1
0
 public override void Consume(IPortElement item)
 {
     if (ShouldCommit())
     {
         base.TaskQueue.Enqueue(new Task(new Handler(Commit)));
     }
 }
Exemplo n.º 2
0
        protected override void Commit()
        {
            if (!ShouldCommit())
            {
                return;
            }
            ITask task = base.UserTask.PartialClone();

            IPortElement[] array    = new IPortElement[_ports.Length];
            bool           allTaken = true;

            for (int i = 0; i < _ports.Length; i++)
            {
                Receiver     receiver    = _ports[i];
                IPortElement portElement = ((IPortArbiterAccess)receiver._port).TestForElement();
                if (portElement == null)
                {
                    allTaken = false;
                    break;
                }
                array[i] = portElement;
                task[(int)receiver.ArbiterContext] = portElement;
            }
            base.Arbitrate(task, array, allTaken);
        }
Exemplo n.º 3
0
        internal bool Evaluate(int index, IPortElement item, ref ITask deferredTask)
        {
            if (base.State == ReceiverTaskState.CleanedUp)
            {
                return(false);
            }
            if (_userTask[index] != null)
            {
                throw new InvalidOperationException();
            }
            _userTask[index] = item;
            int num = Interlocked.Decrement(ref _pendingItemCount);

            if (num > 0)
            {
                return(true);
            }
            if (num == 0)
            {
                _userTask.LinkedIterator        = base.LinkedIterator;
                _userTask.TaskQueue             = base.TaskQueue;
                _userTask.ArbiterCleanupHandler = base.ArbiterCleanupHandler;
                deferredTask = _userTask;
                if (Arbiter != null)
                {
                    if (!Arbiter.Evaluate(this, ref deferredTask))
                    {
                        return(false);
                    }
                    _userTask = null;
                }
                return(true);
            }
            return(false);
        }
Exemplo n.º 4
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     deferredTask = null;
     if (ShouldCommit())
     {
         deferredTask = new Task(new Handler(Commit));
     }
     return(false);
 }
Exemplo n.º 5
0
 public override void Cleanup(ITask taskToCleanup)
 {
     for (int i = 0; i < _ports.Length; i++)
     {
         IPortElement portElement = taskToCleanup[i];
         if (portElement != null)
         {
             ((IPort)_ports[i]).TryPostUnknownType(taskToCleanup[i].Item);
         }
     }
 }
Exemplo n.º 6
0
        public override void Consume(IPortElement item)
        {
            if (_state == ReceiverTaskState.CleanedUp)
            {
                return;
            }
            ITask task = base.UserTask.PartialClone();

            task[0]                    = item;
            task.LinkedIterator        = base.LinkedIterator;
            task.ArbiterCleanupHandler = base.ArbiterCleanupHandler;
            base.TaskQueue.Enqueue(task);
        }
Exemplo n.º 7
0
 public IPortElement[] TestForMultipleElements(int count)
 {
     IPortElement[] result;
     lock (Store)
     {
         if (Store.ElementCount < count)
         {
             result = null;
         }
         else
         {
             IPortElement[] array = new IPortElement[count];
             for (int i = 0; i < count; i++)
             {
                 array[i] = Store.ElementListRemoveFirst();
             }
             result = array;
         }
     }
     return(result);
 }
Exemplo n.º 8
0
        internal static void TransferCausalitiesFromTaskToCurrentThread(ITask currentTask)
        {
            if (!Dispatcher._causalitiesActive)
            {
                return;
            }
            CausalityThreadContext causalityThreadContext = null;

            for (int i = 0; i < currentTask.PortElementCount; i++)
            {
                IPortElement portElement = currentTask[i];
                if (portElement != null && portElement.CausalityContext != null)
                {
                    CausalityThreadContext context = (CausalityThreadContext)portElement.CausalityContext;
                    if (causalityThreadContext == null)
                    {
                        causalityThreadContext = new CausalityThreadContext(null, null);
                    }
                    causalityThreadContext.MergeWith(context);
                }
            }
            Dispatcher.SetCurrentThreadCausalities(causalityThreadContext);
        }
Exemplo n.º 9
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     if (_state == ReceiverTaskState.CleanedUp)
     {
         return(false);
     }
     if (base.UserTask != null)
     {
         if (_state == ReceiverTaskState.Persistent)
         {
             deferredTask = base.UserTask.PartialClone();
         }
         else
         {
             deferredTask = base.UserTask;
         }
         deferredTask[0] = messageNode;
     }
     else if (_keepItemInPort)
     {
         Cleanup();
         deferredTask = new Task(delegate
         {
         });
     }
     if (_arbiter != null)
     {
         bool flag = _arbiter.Evaluate(this, ref deferredTask);
         return(!_keepItemInPort && flag);
     }
     if (deferredTask != null)
     {
         deferredTask.LinkedIterator        = base.LinkedIterator;
         deferredTask.ArbiterCleanupHandler = base.ArbiterCleanupHandler;
     }
     return(!_keepItemInPort);
 }
Exemplo n.º 10
0
 public override void Consume(IPortElement item)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 11
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 12
0
 public override void Consume(IPortElement item)
 {
     ++consume;
 }
Exemplo n.º 13
0
 public abstract void Consume(IPortElement item);
Exemplo n.º 14
0
 public override void Consume(IPortElement item)
 {
     throw new InvalidOperationException();
 }
Exemplo n.º 15
0
 internal bool Process(IPortElement messageNode, int number, ref ITask deferredTask)
 {
     int rem = Interlocked.Decrement (ref remaining);
     if (rem < 0)
         return false;
     lock (_lock) {
         results [number].Add (messageNode.Item);
     }
     if (rem == 0) {
         ITask task = new Task<ICollection[]> (results, handler);
         task.LinkedIterator = LinkedIterator;
         deferredTask = task;
         var arb = Arbiter;
         if (arb != null)
             return arb.Evaluate (this, ref deferredTask);
         Cleanup ();
     }
     return true;
 }
Exemplo n.º 16
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     throw new InvalidOperationException ();
 }
Exemplo n.º 17
0
 public override void Consume(IPortElement item)
 {
     throw new InvalidOperationException ();
 }
Exemplo n.º 18
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     return(_parent.Evaluate((int)_arbiterContext, messageNode, ref deferredTask));
 }
Exemplo n.º 19
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     return(_parent.Evaluate(messageNode.Item, ref deferredTask));
 }
Exemplo n.º 20
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     ++eval;
     return eval_res;
 }
Exemplo n.º 21
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     port.UnregisterReceiver (this);
     return true;
 }
Exemplo n.º 22
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     return receiver.Process (messageNode, number, ref deferredTask);
 }
Exemplo n.º 23
0
 public abstract bool Evaluate(IPortElement messageNode, ref ITask deferredTask);
Exemplo n.º 24
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     throw new InvalidOperationException();
 }
Exemplo n.º 25
0
 public override void Consume(IPortElement item)
 {
 }
Exemplo n.º 26
0
 public abstract bool Evaluate(IPortElement messageNode, ref ITask deferredTask);
Exemplo n.º 27
0
 public void PostElement(IPortElement element)
 {
     PostInternal(true, (PortElement <T>)element);
 }
Exemplo n.º 28
0
 public abstract void Consume(IPortElement item);
Exemplo n.º 29
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     ++tested;
     if (task != null)
         deferredTask = task;
     return eval;
 }
Exemplo n.º 30
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     deferredTask = null;
     return(false);
 }
Exemplo n.º 31
0
 public override bool Evaluate(IPortElement messageNode, ref ITask deferredTask)
 {
     throw new NotImplementedException ();
 }
Exemplo n.º 32
0
 public override void Consume(IPortElement item)
 {
     throw new NotImplementedException ();
 }
Exemplo n.º 33
0
 internal bool Process(IPortElement messageNode, int number, ref ITask deferredTask)
 {
     userTask [number] = messageNode;
     deferredTask = null;
     if (Interlocked.Decrement (ref remaining) == 0)
         deferredTask = userTask;
     return true;
 }