Exemple #1
0
        public void Run()
        {
            MaxQueue<int> queue = new MaxQueue<int>();
            string command = null;
            Console.Write("Enter a command:");
            while (!string.IsNullOrEmpty(command = Console.ReadLine()))
            {
                string[] tokens = command.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    if (tokens[0] == "e")
                    {
                        queue.Enqueue(int.Parse(tokens[1]));
                    }
                    else if (tokens[0] == "d")
                    {
                        if (queue.Count == 0) Console.WriteLine("Queue empty");
                        else Console.WriteLine("Popped {0}", queue.Dequeue());
                    }
                    else if (tokens[0] == "m")
                    {
                        if (queue.Count == 0) Console.WriteLine("Queue empty");
                        else Console.WriteLine("Max is {0}", queue.Max);
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("Bad Command");
                }
                Console.Write("Enter a command:");
            }
        }
Exemple #2
0
 public static void Dilate2D(
     int[] src,
     int len1,
     int len2,
     int srcmask,
     int radius,
     Action <int, int> action)
 {
     Parallel.For(0, len1, (Action <int>)(x =>
     {
         MaxQueue maxQueue = new MaxQueue(radius * 2 + 1);
         for (int index = 0; index < radius; ++index)
         {
             maxQueue.Push(src[x * len2 + index] & srcmask);
         }
         for (int index = 0; index < len2; ++index)
         {
             if (index > radius)
             {
                 maxQueue.Pop();
             }
             if (index < len2 - radius)
             {
                 maxQueue.Push(src[x * len2 + index + radius] & srcmask);
             }
             if (maxQueue.get_Max() != 0)
             {
                 action(x, index);
             }
         }
     }));
     Parallel.For(0, len2, (Action <int>)(y =>
     {
         MaxQueue maxQueue = new MaxQueue(radius * 2 + 1);
         for (int index = 0; index < radius; ++index)
         {
             maxQueue.Push(src[index * len2 + y] & srcmask);
         }
         for (int index = 0; index < len1; ++index)
         {
             if (index > radius)
             {
                 maxQueue.Pop();
             }
             if (index < len1 - radius)
             {
                 maxQueue.Push(src[(index + radius) * len2 + y] & srcmask);
             }
             if (maxQueue.get_Max() != 0)
             {
                 action(index, y);
             }
         }
     }));
 }
 public static void Dilate2D(int[] src, int len1, int len2, int srcmask, int radius, Action <int, int> action)
 {
     Parallel.For(0, len1, delegate(int x)
     {
         MaxQueue maxQueue2 = new MaxQueue(radius * 2 + 1);
         for (int k = 0; k < radius; k++)
         {
             maxQueue2.Push(src[x * len2 + k] & srcmask);
         }
         for (int l = 0; l < len2; l++)
         {
             if (l > radius)
             {
                 maxQueue2.Pop();
             }
             if (l < len2 - radius)
             {
                 maxQueue2.Push(src[x * len2 + l + radius] & srcmask);
             }
             if (maxQueue2.Max != 0)
             {
                 action(x, l);
             }
         }
     });
     Parallel.For(0, len2, delegate(int y)
     {
         MaxQueue maxQueue = new MaxQueue(radius * 2 + 1);
         for (int i = 0; i < radius; i++)
         {
             maxQueue.Push(src[i * len2 + y] & srcmask);
         }
         for (int j = 0; j < len1; j++)
         {
             if (j > radius)
             {
                 maxQueue.Pop();
             }
             if (j < len1 - radius)
             {
                 maxQueue.Push(src[(j + radius) * len2 + y] & srcmask);
             }
             if (maxQueue.Max != 0)
             {
                 action(j, y);
             }
         }
     });
 }
Exemple #4
0
 public static void Dilate2D(int[] src, int len1, int len2, int srcmask, int radius, Action <int, int> action)
 {
     Parallel.For(0, len1, (int x) => {
         MaxQueue maxQueue = new MaxQueue(radius * 2 + 1);
         for (int i = 0; i < radius; i++)
         {
             maxQueue.Push(src[x * len2 + i] & srcmask);
         }
         for (int j = 0; j < len2; j++)
         {
             if (j > radius)
             {
                 maxQueue.Pop();
             }
             if (j < len2 - radius)
             {
                 maxQueue.Push(src[x * len2 + j + radius] & srcmask);
             }
             if (maxQueue.Max != 0)
             {
                 action(x, j);
             }
         }
     });
     Parallel.For(0, len2, (int y) => {
         MaxQueue maxQueue = new MaxQueue(radius * 2 + 1);
         for (int i = 0; i < radius; i++)
         {
             maxQueue.Push(src[i * len2 + y] & srcmask);
         }
         for (int j = 0; j < len1; j++)
         {
             if (j > radius)
             {
                 maxQueue.Pop();
             }
             if (j < len1 - radius)
             {
                 maxQueue.Push(src[(j + radius) * len2 + y] & srcmask);
             }
             if (maxQueue.Max != 0)
             {
                 action(j, y);
             }
         }
     });
 }