Exemplo n.º 1
0
        void TestTimeList()
        {
            List<Event> ListOfEvents = new List<Event>();
            Event Event1 = new Event();
            Event Event2 = new Event();
            Event1.Name = "Tiskaus";
            Event2.Name = "Sali";
            Event1.StartTime = new DateTime(2013, 3, 12, 11, 0, 0);
            Event1.EndTime = new DateTime(2013, 3, 12, 12, 0, 0);
            Event2.StartTime = new DateTime(2013, 3, 12, 14, 0, 0);
            Event2.EndTime = new DateTime(2013, 3, 12, 14, 30, 0);

            ListOfEvents.Add(Event1);
            ListOfEvents.Add(Event2);

            TimeList ListOfTimes = new TimeList(ListOfEvents);

            Debug.WriteLine(ListOfTimes.GetTimeIndex(60));
            Debug.WriteLine(ListOfTimes.GetTimeIndex(90));
            Debug.WriteLine(ListOfTimes.GetTimeIndex(75));
        }
Exemplo n.º 2
0
        public Algo(List<Event> pEventList, TodoList pTodoList, Action pCallback)
        {
            //aikaa_kaikelle = kuinka paljon aikaa tarvitaan kaikkien listassa olevien toteutukseen
            todolist = pTodoList;

            PopulateSorting();

            //tee timelist
            timelist = new TimeList(pEventList);

            // OPERATE
            // NOW => PANIC
            TodoEvent now = GetNextASAP();
            while (now != null) {
                Panic(now);
                now = GetNextASAP();
            }

            //for DL in DLs
            TodoEvent dl = GetNextDL();
            while (dl != null) {
                //	timeRqd = DL.Duration() * 3/2
                int time_required = (int)dl.Required.TotalMinutes;
                //	counter = timeRqd * 2
                int counter = time_required * 2;

                // deadlinen index, puolitettu tarvittaessa
                int end_index = timelist.GetTimeIndex(dl.GetTimeToDeadline());

                // start_index iteroidaan alaspäin
                int start_index = end_index - 1;
                // kuinka paljon tultiin alaspäin
                int duration = 0;

                while (start_index > 0) {
                    TimeList.Time element = timelist.GetElement(start_index);
                    // lisätään jokatapauksessa duration
                    duration += (int)element.Span.TotalMinutes;
                    // jos saadaan lisää tyhjää aikaa
                    if (element.Priority == Priority.FREE) {
                        counter -= (int)element.Span.TotalMinutes;
                    }
                    // jos tultiin tarpeeksi pitkälle
                    if (counter < 0) {
                        duration += counter;
                        int start_instance = dl.GetTimeToDeadline() - duration;
                        start_index = timelist.GetTimeIndex(start_instance);
                    }
                }
                if (timelist.GetTimeBetween(start_index, end_index) < time_required) {
                    Panic(dl);
                }
                TimeList list_dl = CropAndSort(start_index, end_index, timelist);
                Position(dl, list_dl);

                dl = GetNextDL();
            } // LOOP WHILE THERE IS DL

            // sijoita ensin continuous
            foreach (TodoEvent te in sortedLazy) {
                if (!te.Split) {
                    Position(te, timelist);
                }
            }
            // sijoita sitten jaettavat
            foreach (TodoEvent te in sortedLazy) {
                if (te.Split) {
                    Position(te, timelist);
                }
            }

            pCallback.Invoke();
        }
Exemplo n.º 3
0
        public void Position(TodoEvent te, TimeList list)
        {
            int dur = (int)te.Required.TotalMinutes;
            int i = 0;

            int remaining = dur;
            while ((remaining = timelist.InsertElement(i, remaining, Priority.ASAP)) > 0) {
                i++;
                while (i < list.GetSize()) {
                    if (timelist.GetElement(i).Priority == Priority.FREE) {
                        break;
                    }
                    else {
                        i++;
                    }
                } // while etsi uusi
            } // on vielä lisättävää
        }
Exemplo n.º 4
0
        public TimeList CropAndSort(int start, int end, TimeList list)
        {
            List<TimeList.Time> new_list = timelist.Times.GetRange(start, end - start);

            // SORT
            new_list.Sort(delegate(TimeList.Time t1, TimeList.Time t2) {
                return (t1.Span.CompareTo((int)t2.Span.TotalMinutes));
            });
            TimeList tl = new TimeList(new_list);
            return tl;
        }