-//\r
-// System.Collections.CollectionBase.cs\r
-//\r
-// Author:\r
-// Nick Drochak II (ndrochak@gol.com)\r
-//\r
-// (C) 2001 Nick Drochak II\r
-//\r
+//
+// System.Collections.CollectionBase.cs
+//
+// Author:
+// Nick Drochak II (ndrochak@gol.com)
+//
+// (C) 2001 Nick Drochak II
+//
//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System;\r
-\r
-namespace System.Collections {\r
-\r
- [Serializable]\r
- public abstract class CollectionBase : IList, ICollection, IEnumerable {\r
-\r
- // private instance properties\r
- private ArrayList list;\r
- \r
- // public instance properties\r
- public int Count { get { return InnerList.Count; } }\r
- \r
- // Public Instance Methods\r
- public IEnumerator GetEnumerator() { return InnerList.GetEnumerator(); }\r
- public void Clear() { \r
- OnClear();\r
- InnerList.Clear(); \r
- OnClearComplete();\r
- }\r
- public void RemoveAt (int index) {\r
- object objectToRemove;\r
- objectToRemove = InnerList[index];\r
- OnValidate(objectToRemove);\r
- OnRemove(index, objectToRemove);\r
- InnerList.RemoveAt(index);\r
- OnRemoveComplete(index, objectToRemove);\r
- }\r
- \r
- // Protected Instance Constructors\r
- protected CollectionBase() { \r
- this.list = new ArrayList();\r
- }\r
- \r
- // Protected Instance Properties\r
- protected ArrayList InnerList {get { return this.list; } }\r
- protected IList List {get { return this; } }\r
- \r
- // Protected Instance Methods\r
- protected virtual void OnClear() { }\r
- protected virtual void OnClearComplete() { }\r
- \r
- protected virtual void OnInsert(int index, object value) { }\r
- protected virtual void OnInsertComplete(int index, object value) { }\r
-\r
- protected virtual void OnRemove(int index, object value) { }\r
- protected virtual void OnRemoveComplete(int index, object value) { }\r
-\r
- protected virtual void OnSet(int index, object oldValue, object newValue) { }\r
- protected virtual void OnSetComplete(int index, object oldValue, object newValue) { }\r
-\r
- protected virtual void OnValidate(object value) {\r
- if (null == value) {\r
- throw new System.ArgumentNullException("CollectionBase.OnValidate: Invalid parameter value passed to method: null");\r
- }\r
- }\r
- \r
- // ICollection methods\r
- void ICollection.CopyTo(Array array, int index) {\r
- InnerList.CopyTo(array, index);\r
- }\r
- object ICollection.SyncRoot {\r
- get { return InnerList.SyncRoot; }\r
- }\r
- bool ICollection.IsSynchronized {\r
- get { return InnerList.IsSynchronized; }\r
- }\r
-\r
- // IList methods\r
- int IList.Add (object value) {\r
- int newPosition;\r
- OnValidate(value);\r
- newPosition = InnerList.Count;\r
- OnInsert(newPosition, value);\r
- InnerList.Add(value);\r
- try {\r
- OnInsertComplete(newPosition, value);\r
- } catch {\r
- InnerList.RemoveAt (newPosition);\r
- throw;\r
- }\r
- \r
- return newPosition;\r
- }\r
- \r
- bool IList.Contains (object value) {\r
- return InnerList.Contains(value);\r
- }\r
-\r
- int IList.IndexOf (object value) {\r
- return InnerList.IndexOf(value);\r
- }\r
-\r
- void IList.Insert (int index, object value) {\r
- OnValidate(value);\r
- OnInsert(index, value);\r
- InnerList.Insert(index, value);\r
- try {\r
- OnInsertComplete(index, value);\r
- } catch {\r
- InnerList.RemoveAt (index);\r
- throw;\r
- }\r
- }\r
-\r
- void IList.Remove (object value) {\r
- int removeIndex;\r
- OnValidate(value);\r
- removeIndex = InnerList.IndexOf(value);\r
- if (removeIndex == -1)\r
- throw new ArgumentException ("The element cannot be found.", "value");\r
- OnRemove(removeIndex, value);\r
- InnerList.Remove(value);\r
- OnRemoveComplete(removeIndex, value);\r
- }\r
-\r
- // IList properties\r
- bool IList.IsFixedSize { \r
- get { return InnerList.IsFixedSize; }\r
- }\r
-\r
- bool IList.IsReadOnly { \r
- get { return InnerList.IsReadOnly; }\r
- }\r
-\r
- object IList.this[int index] { \r
- get { return InnerList[index]; }\r
- set { \r
- if (index < 0 || index >= InnerList.Count)\r
- throw new ArgumentOutOfRangeException ("index");\r
-\r
- object oldValue;\r
- // make sure we have been given a valid value\r
- OnValidate(value);\r
- // save a reference to the object that is in the list now\r
- oldValue = InnerList[index];\r
- \r
- OnSet(index, oldValue, value);\r
- InnerList[index] = value;\r
- try {\r
- OnSetComplete(index, oldValue, value);\r
- } catch {\r
- InnerList[index] = oldValue;\r
- throw;\r
- }\r
- }\r
- }\r
- }\r
-}\r
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace System.Collections {
+
+#if NET_2_0
+ [ComVisible(true)]
+#endif
+ [Serializable]
+ public abstract class CollectionBase : IList, ICollection, IEnumerable {
+
+ // private instance properties
+ private ArrayList list;
+
+ // public instance properties
+ public int Count { get { return InnerList.Count; } }
+
+ // Public Instance Methods
+ public IEnumerator GetEnumerator() { return InnerList.GetEnumerator(); }
+ public void Clear() {
+ OnClear();
+ InnerList.Clear();
+ OnClearComplete();
+ }
+ public void RemoveAt (int index) {
+ object objectToRemove;
+ objectToRemove = InnerList[index];
+ OnValidate(objectToRemove);
+ OnRemove(index, objectToRemove);
+ InnerList.RemoveAt(index);
+ OnRemoveComplete(index, objectToRemove);
+ }
+
+ // Protected Instance Constructors
+ protected CollectionBase()
+ {
+ }
+
+#if NET_2_0
+ protected CollectionBase (int capacity)
+ {
+ list = new ArrayList (capacity);
+ }
+
+ public int Capacity {
+ get {
+ if (list == null)
+ list = new ArrayList ();
+
+ return list.Capacity;
+ }
+
+ set {
+ if (list == null)
+ list = new ArrayList ();
+
+ list.Capacity = value;
+ }
+ }
+
+#endif
+
+ // Protected Instance Properties
+ protected ArrayList InnerList {
+ get {
+ if (list == null)
+ list = new ArrayList ();
+ return list;
+ }
+ }
+
+ protected IList List {get { return this; } }
+
+ // Protected Instance Methods
+ protected virtual void OnClear() { }
+ protected virtual void OnClearComplete() { }
+
+ protected virtual void OnInsert(int index, object value) { }
+ protected virtual void OnInsertComplete(int index, object value) { }
+
+ protected virtual void OnRemove(int index, object value) { }
+ protected virtual void OnRemoveComplete(int index, object value) { }
+
+ protected virtual void OnSet(int index, object oldValue, object newValue) { }
+ protected virtual void OnSetComplete(int index, object oldValue, object newValue) { }
+
+ protected virtual void OnValidate(object value) {
+ if (null == value) {
+ throw new System.ArgumentNullException("CollectionBase.OnValidate: Invalid parameter value passed to method: null");
+ }
+ }
+
+ // ICollection methods
+ void ICollection.CopyTo(Array array, int index) {
+ InnerList.CopyTo(array, index);
+ }
+ object ICollection.SyncRoot {
+ get { return InnerList.SyncRoot; }
+ }
+ bool ICollection.IsSynchronized {
+ get { return InnerList.IsSynchronized; }
+ }
+
+ // IList methods
+ int IList.Add (object value) {
+ int newPosition;
+ OnValidate(value);
+ newPosition = InnerList.Count;
+ OnInsert(newPosition, value);
+ InnerList.Add(value);
+ try {
+ OnInsertComplete(newPosition, value);
+ } catch {
+ InnerList.RemoveAt (newPosition);
+ throw;
+ }
+
+ return newPosition;
+ }
+
+ bool IList.Contains (object value) {
+ return InnerList.Contains(value);
+ }
+
+ int IList.IndexOf (object value) {
+ return InnerList.IndexOf(value);
+ }
+
+ void IList.Insert (int index, object value) {
+ OnValidate(value);
+ OnInsert(index, value);
+ InnerList.Insert(index, value);
+ try {
+ OnInsertComplete(index, value);
+ } catch {
+ InnerList.RemoveAt (index);
+ throw;
+ }
+ }
+
+ void IList.Remove (object value) {
+ int removeIndex;
+ OnValidate(value);
+ removeIndex = InnerList.IndexOf(value);
+ if (removeIndex == -1)
+ throw new ArgumentException ("The element cannot be found.", "value");
+ OnRemove(removeIndex, value);
+ InnerList.Remove(value);
+ OnRemoveComplete(removeIndex, value);
+ }
+
+ // IList properties
+ bool IList.IsFixedSize {
+ get { return InnerList.IsFixedSize; }
+ }
+
+ bool IList.IsReadOnly {
+ get { return InnerList.IsReadOnly; }
+ }
+
+ object IList.this[int index] {
+ get { return InnerList[index]; }
+ set {
+ if (index < 0 || index >= InnerList.Count)
+ throw new ArgumentOutOfRangeException ("index");
+
+ object oldValue;
+ // make sure we have been given a valid value
+ OnValidate(value);
+ // save a reference to the object that is in the list now
+ oldValue = InnerList[index];
+
+ OnSet(index, oldValue, value);
+ InnerList[index] = value;
+ try {
+ OnSetComplete(index, oldValue, value);
+ } catch {
+ InnerList[index] = oldValue;
+ throw;
+ }
+ }
+ }
+ }
+}