Example #1
0
            /// <summary>
            /// add a work into event queue
            /// ワークをキューに追加(時間順。同時刻なら後の方に)
            /// </summary>
            /// <param name="workOrKanban">object either work or kanban</param>
            /// <returns></returns>
            public JitVariable Enqueue(DateTime dt, EventTypes type, JitVariable workOrKanban)
            {
                PrepareDummyItems(dt);

                LinkedListNode <Item> node;

                if (_sections.TryGetValue(TimeUtil.ClearSeconds(dt), out var topnode) == false)    // 分毎にシーク位置をスキップできる
                {
                    topnode = _dat.First;
                }
                for (node = topnode; node != null; node = node.Next)    // 挿入位置を捜す
                {
                    if (node.Value.DT > dt)
                    {
                        break;
                    }
                }
                var item = new Item
                {
                    DT     = dt,
                    Work   = workOrKanban as JitWork,
                    Kanban = workOrKanban as JitKanban,
                    Type   = type,
                };

                if (node == null)   // ポカヨケ
                {
                    _dat.AddLast(item);
                }
                else
                {
                    _dat.AddBefore(node, item);
                }
                return(workOrKanban);
            }
Example #2
0
 /// <summary>
 /// make dummy event item that is sake for speed finding
 /// 分毎のダミーListNodeを作成する(検索高速化)
 /// </summary>
 /// <param name="dt"></param>
 private void PrepareDummyItems(DateTime dt)
 {
     if (_dat.Count > 0)
     {
         return;
     }
     for (var t = TimeUtil.ClearSeconds(dt); t < dt + TimeSpan.FromDays(2); t += TimeSpan.FromMinutes(1))
     {
         var node = _dat.AddLast(new DummyItem   // 検索の速度を上げるための分毎のダミーItem
         {
             DT   = t,
             Work = null,
         });
         _sections[t] = node;
     }
 }