2023-03-12 17:52:17 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
|
|
namespace TimetableDesigner.Core
|
|
|
|
|
|
{
|
2023-05-07 17:39:24 +02:00
|
|
|
|
[Serializable]
|
2023-03-12 17:52:17 +01:00
|
|
|
|
public class TimetableSpanCollection : ICollection<TimetableSpan>
|
|
|
|
|
|
{
|
|
|
|
|
|
#region FIELDS
|
|
|
|
|
|
|
2023-05-07 17:39:24 +02:00
|
|
|
|
private List<TimetableSpan> _list;
|
2023-03-12 17:52:17 +01:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region PROPERTIES
|
|
|
|
|
|
|
|
|
|
|
|
public int Count => _list.Count;
|
2023-05-07 17:39:24 +02:00
|
|
|
|
public bool IsReadOnly => ((ICollection<TimetableSpan>)_list).IsReadOnly;
|
2023-03-12 17:52:17 +01:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region CONSTRUCTORS
|
|
|
|
|
|
|
|
|
|
|
|
public TimetableSpanCollection()
|
|
|
|
|
|
{
|
|
|
|
|
|
_list = new List<TimetableSpan>();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region PUBLIC METHODS
|
|
|
|
|
|
|
|
|
|
|
|
public void Add(TimetableSpan item)
|
|
|
|
|
|
{
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
if (Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool done = false;
|
|
|
|
|
|
while (i < Count && !done)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (item.CheckCollision(_list.ElementAt(i)))
|
|
|
|
|
|
{
|
2023-03-26 23:01:58 +02:00
|
|
|
|
case TimetableSpanCollision.CheckedSlotBefore: i++; break;
|
|
|
|
|
|
case TimetableSpanCollision.CheckedSlotAfter: done ^= true; break;
|
2023-03-12 17:52:17 +01:00
|
|
|
|
default: throw new ArgumentException("Slot collide with another slot");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
_list.Insert(i, item);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Clear() => _list.Clear();
|
|
|
|
|
|
|
|
|
|
|
|
public bool Contains(TimetableSpan item) => _list.Contains(item);
|
|
|
|
|
|
|
|
|
|
|
|
public void CopyTo(TimetableSpan[] array, int arrayIndex) => _list.CopyTo(array, arrayIndex);
|
|
|
|
|
|
|
|
|
|
|
|
public IEnumerator<TimetableSpan> GetEnumerator() => _list.GetEnumerator();
|
|
|
|
|
|
|
|
|
|
|
|
public bool Remove(TimetableSpan item) => _list.Remove(item);
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_list).GetEnumerator();
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|