Exemplo n.º 1
0
 internal override void Dequeue(int count, SyncMessage primaryMessage)
 {
     //TODO: deal with the arguments and the returns... and count
     lock (queueLock) {
         if (count == 1)
         {
             messageQueue[0].ArgumentIndex = primaryMessage.CollatedArguments.Count;
             primaryMessage.CollatedArguments.AddRange(messageQueue[0].AllArguments);
             primaryMessage.ReturnToSyncMessages.Add(messageQueue[0]);
             messageQueue[0].PrimaryMessage = primaryMessage;
             messageQueue.RemoveAt(0);
         }
         else
         {
             var dequeuedMessages = messageQueue.Take(count);
             foreach (var m in dequeuedMessages)
             {
                 m.PrimaryMessage = primaryMessage;
             }
             if (DelegateArgumentTypes.Count() != 0)
             {
                 var arrayOfArguments = dequeuedMessages.Select((m, i) => {
                     m.ArgumentIndex    = primaryMessage.CollatedArguments.Count;
                     m.ArgumentSubIndex = i;
                     return(m.AllArguments);
                 }).ToArray();
                 primaryMessage.CollatedArguments.AddRange(TransposeAndType(arrayOfArguments));
             }
             primaryMessage.ReturnToSyncMessages.AddRange(dequeuedMessages);
             messageQueue.RemoveRange(0, count);
         }
     }
 }
Exemplo n.º 2
0
        protected object[] TransposeAndType(object[][] input)
        {
            int lx     = input.Length;
            int ly     = lx == 0 ? 0 :input[0].Length;
            var result = new object[ly];

            for (int y = 0; y < ly; y++)
            {
                var row = Array.CreateInstance(ByValue(DelegateArgumentTypes.ElementAt(y)), lx);
                for (int x = 0; x < lx; x++)
                {
                    row.SetValue(input[x][y], x);
                }
                result[y] = row;
            }
            return(result);
        }
Exemplo n.º 3
0
 internal void Dequeue(int count, List <object> arguments)
 {
     lock (queueLock) {
         if (count == 1)
         {
             arguments.AddRange(messageQueue[0].Arguments);
             messageQueue.RemoveAt(0);
         }
         else
         {
             var arrayOfArguments = messageQueue.Take(count).Select(m => m.Arguments).ToArray();
             if (DelegateArgumentTypes.Count() != 0)
             {
                 arguments.AddRange(TransposeAndType(arrayOfArguments));
             }
             messageQueue.RemoveRange(0, count);
         }
     }
 }