Ejemplo n.º 1
0
        public void UpdateFuture(EventSchedule sched, ulong fromTime)
        {
            var future = sched.GetActualFuture(fromTime);

            acrossTime(fromTime, ColumnCount, (ref EventToken[,] block) =>
            {
                return (block != null);
            }, (ref EventToken[,] block, ulong t, int j) =>
            {
                for (int r = 0; r < block.GetLength(0); r++)
                {
                    if (block[r, j] != null && (!block[r, j].Event.Started || !block[r, j].Event.Active))
                    {
                        block[r, j] = null;
                    }
                }
            });

            acrossTime(fromTime, (ulong)future.Length, (ref EventToken[,] block) =>
            {
                if (block == null)
                    block = new EventToken[_rowCount, BlockWidth];
                return true;
            }, (ref EventToken[,] block, ulong t, int j) =>
            {
                foreach (var evt in future[(int)t])
                {
                    int r = findEmptyRow(ref block, j);
                    insertEvent(r, fromTime + t, evt);
                }
            });
        }