13 this.mComparer = Comparer<T>.Default;
19 this.mComparer = comparer;
25 this.mComparer = comparer;
26 this.InnerList.Capacity = capacity;
30 protected void SwitchElements(
int i,
int j)
32 T value = this.InnerList[i];
33 this.InnerList[i] = this.InnerList[j];
34 this.InnerList[j] = value;
38 protected virtual int OnCompare(
int i,
int j)
40 return this.mComparer.Compare(this.InnerList[i], this.InnerList[j]);
44 public int Push(T item)
46 int num = this.InnerList.Count;
47 this.InnerList.Add(item);
50 int num2 = (num - 1) / 2;
51 if (this.OnCompare(num, num2) >= 0)
55 this.SwitchElements(num, num2);
64 T result = this.InnerList[0];
66 this.InnerList[0] = this.InnerList[this.InnerList.Count - 1];
67 this.InnerList.RemoveAt(this.InnerList.Count - 1);
71 int num3 = 2 * num + 1;
72 int num4 = 2 * num + 2;
73 if (this.InnerList.Count > num3 &&
this.OnCompare(num, num3) > 0)
77 if (this.InnerList.Count > num4 &&
this.OnCompare(num, num4) > 0)
85 this.SwitchElements(num, num2);
91 public void Update(
int i)
95 for (num = i; num != 0; num = num2)
98 if (this.OnCompare(num, num2) >= 0)
102 this.SwitchElements(num, num2);
111 int num4 = 2 * num + 1;
113 if (this.InnerList.Count > num4 &&
this.OnCompare(num, num4) > 0)
117 if (this.InnerList.Count > num2 &&
this.OnCompare(num, num2) > 0)
125 this.SwitchElements(num, num3);
132 if (this.InnerList.Count > 0)
134 return this.InnerList[0];
142 this.InnerList.Clear();
151 return this.InnerList.Count;
156 public void RemoveLocation(T item)
159 for (
int i = 0; i < this.InnerList.Count; i++)
161 if (this.mComparer.Compare(
this.InnerList[i], item) == 0)
168 this.InnerList.RemoveAt(num);
173 public T
this[
int index]
177 return this.InnerList[index];
181 this.InnerList[index] = value;
187 protected List<T> InnerList =
new List<T>();
190 protected IComparer<T> mComparer;