public CircularArray Resize(int bottom, int top)
        {
            CircularArray newTasks =
                new CircularArray(logCapacity + 1);

            for (int i = top; i < bottom; i++)
            {
                newTasks.Put(i, Get(i));
            }
            return(newTasks);
        }
Example #2
0
        //изменить размер массива
        public CircularArray Resize(int bottom, int top)
        {
            CircularArray newTasks =
                new CircularArray(logCapacity + 1); //создаем новый циклический массив логической емкостью на 1 больше, чем было

            for (int i = top; i < bottom; i++)
            {
                newTasks.Put(i, Get(i)); //переносим все элементы в новый массив
            }
            return(newTasks);            //возвращаем новый заполненный циклический массив
        }
        public void PushBottom(Task t)
        {
            int oldBottom = bottom;
            int oldTop    = top;
            int size      = oldBottom - oldTop;

            if (size >= tasks.Capacity - 1)
            {
                tasks = tasks.Resize(oldBottom, oldTop);
            }
            tasks.Put(oldBottom, t);
            bottom = oldBottom + 1;
        }
Example #4
0
        public void PushBottom(Task t)
        {
            int oldBottom = bottom;                      //запоминаем нижний индекс
            int oldTop    = top;                         //запоминаем верхний индекс
            int size      = oldBottom - oldTop;          //вычисляем разницу между верхним индексом и нижним

            if (size >= tasks.Capacity - 1)              //если она больше, чем вмсетимость - 1
            {
                tasks = tasks.Resize(oldBottom, oldTop); //меняем размер циклического массива
            }
            tasks.Put(oldBottom, t);                     //кладем задачу в конец очереди
            bottom = oldBottom + 1;                      //двигаем нижний индекс
        }
 public UnboundedDEQueue(int logCapacity)
 {
     tasks  = new CircularArray(logCapacity);
     top    = 0;
     bottom = 0;
 }
Example #6
0
 volatile int top;                     //верхняя граница
 public UnboundedDEQueue(int logCapacity)
 {
     tasks  = new CircularArray(logCapacity); //инициализируем циклический массив
     top    = 0;
     bottom = 0;
 }