2 using System
.Collections
;
6 namespace Wv
.Schedulator
8 public class FixFor
: IComparable
10 public Project project
;
12 SortedHash release_dates
= new SortedHash();
13 public DateSlider default_habits
;
15 public FixFor(Project project
, string name
)
18 this.project
= project
;
22 public static string date_string(DateTime date
)
24 return String
.Format("{0:d4}-{1:d2}-{2:d2}",
25 date
.Year
, date
.Month
, date
.Day
);
28 public void add_release(DateTime release_date
)
30 release_date
= release_date
.Date
; // round to nearest day
31 if (!release_dates
.Contains(date_string(release_date
)))
33 release_dates
.Add(date_string(release_date
), release_date
);
34 release_dates
.Sort(); // fast enough...
38 public DateTime
release_after(DateTime now
)
40 foreach (DateTime d
in release_dates
)
45 return DateTime
.MaxValue
;
48 public DateTime final_release
52 if (release_dates
.Count
> 0)
53 return (DateTime
)release_dates
[release_dates
.Count
-1];
55 return DateTime
.MinValue
; // undefined: rise to the top
63 return (ArrayList
)release_dates
;
67 public int CompareTo(object _y
)
69 FixFor y
= (FixFor
)_y
;
71 return 1; // null fixfors come first in the list
72 else if (final_release
!= y
.final_release
)
73 return DateTime
.Compare(final_release
, y
.final_release
);
74 else if (project
!= y
.project
)
75 return project
.CompareTo(y
.project
);
76 else if (name
!= y
.name
)
77 return name
.CompareTo(y
.name
);
79 return 0; // I give up! They're the same!
84 public class FixForList
: SortedHash
86 protected string make_key(Project project
, string name
)
88 return project
.name
+ "\0" + name
;
91 public FixFor
Add(Project project
, string name
)
93 FixFor f
= Find(project
, name
);
96 f
= new FixFor(project
, name
);
97 base.Add(make_key(project
, name
), f
);
102 public FixFor
Add(Project project
, string name
, DateTime date
)
104 FixFor f
= Add(project
, name
);
109 #pragma warning disable 0109 // appease mono 1.1.13.6
110 public new virtual FixFor
this[int index
]
112 get { return (FixFor)base[index]; }
114 #pragma warning restore 0109
116 public FixFor
Find(Project project
, string name
)
118 return (FixFor
)base.Find(make_key(project
, name
));