2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Data.ObjectSpaces / System.Data.ObjectSpaces / ObjectList.cs
index 5fbe8e5cb5466ef817e6df836ed8819718991b07..ca646401f6293f48f508a5c1909c41b94f84aa76 100755 (executable)
 //\r
 // Author:\r
 //   Mark Easton (mark.easton@blinksoftware.co.uk)\r
+//   Tim Coleman (tim@timcoleman.com)\r
 //\r
 // (C) BLiNK Software Ltd.  http://www.blinksoftware.co.uk\r
+// Copyright (C) Tim Coleman, 2003-2004\r
 //\r
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// 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
-#if NET_1_2\r
+#if NET_2_0\r
 \r
 using System.Collections;\r
+using System.Reflection;\r
 \r
 namespace System.Data.ObjectSpaces\r
 {\r
         [MonoTODO]\r
         public class ObjectList : ICollection, IEnumerable, IList\r
         {\r
-                \r
-                [MonoTODO]\r
-                public ObjectList () : this (typeof (ArrayList), null) {}\r
+               #region Fields\r
+\r
+                       IList list;\r
+\r
+               #endregion // Fields\r
+\r
+               #region Constructors\r
+\r
+                public ObjectList () \r
+                       : this (typeof (ArrayList), null) \r
+               {\r
+               }\r
 \r
-                [MonoTODO]\r
                 public ObjectList (Type type, object[] parameters)\r
                 {\r
-                        if (type == null || !(type is IList))\r
+                       if (type == null)\r
+                               throw new ObjectException ();\r
+\r
+                       bool isIList = false;\r
+                       foreach (Type t in type.GetInterfaces ())\r
+                               if (t.Equals (typeof (IList))) {\r
+                                       isIList = true;\r
+                                       break;\r
+                               }\r
+\r
+                       if (!isIList)\r
                                 throw new ObjectException ();\r
+\r
+                       Type[] types = Type.EmptyTypes;\r
+                       if (parameters != null)\r
+                               types = Type.GetTypeArray (parameters);\r
+\r
+                       ConstructorInfo ci = type.GetConstructor (types);\r
+                       list = (IList) ci.Invoke (parameters);\r
                 }\r
 \r
-                [MonoTODO]\r
+               #endregion // Constructors\r
+\r
+               #region Properties\r
+\r
                 public int Count {\r
-                        get { return 0; }\r
+                        get { return InnerList.Count; }\r
                 }     \r
 \r
-               [MonoTODO]\r
-               private bool ICollection.IsSynchronized {\r
-                       get { throw new NotImplementedException (); }\r
+               bool ICollection.IsSynchronized {       \r
+                       get { return InnerList.IsSynchronized; }\r
                }\r
 \r
-               [MonoTODO]\r
-               private object ICollection.SyncRoot {\r
-                       get { throw new NotImplementedException (); }\r
+               object ICollection.SyncRoot {\r
+                       get { return InnerList.SyncRoot; }\r
                }\r
                 \r
-                [MonoTODO]\r
                 public IList InnerList {\r
-                        get { return null; }\r
+                       get { return list; }\r
                 }        \r
                 \r
-                [MonoTODO]\r
                 public bool IsFixedSize {\r
-                        get { return false; }\r
+                       get { return InnerList.IsFixedSize; }\r
                 }  \r
 \r
-                [MonoTODO]\r
                 public bool IsReadOnly {\r
-                        get { return false; }\r
+                       get { return InnerList.IsReadOnly; }\r
                 }\r
                 \r
-                [MonoTODO]\r
-                public object this[int index] {\r
-                        get { throw new NotImplementedException (); }       \r
-                        set { throw new NotImplementedException (); }       \r
+                public object this [int index] {\r
+                       get { return InnerList [index]; }\r
+                       set { InnerList [index] = value; }\r
                 }\r
+\r
+               #endregion // Properties\r
+\r
+               #region Methods\r
                 \r
-                [MonoTODO]\r
                 public int Add (object value)\r
                 {\r
-                        return 0;        \r
+                       return InnerList.Add (value);\r
                 }\r
                 \r
-                [MonoTODO]\r
-                public void Clear () {}\r
+                public void Clear () \r
+               {\r
+                       InnerList.Clear ();\r
+               }\r
                 \r
-                [MonoTODO]\r
                 public bool Contains (object value)\r
                 {\r
-                        return false;\r
+                       return InnerList.Contains (value);\r
                 }\r
                 \r
-                [MonoTODO]\r
-                public void CopyTo (Array array, int index) {}\r
-               \r
+                public void CopyTo (Array array, int index) \r
+               {\r
+                       InnerList.CopyTo (array, index);\r
+               }\r
                 \r
-                [MonoTODO]\r
                 public IEnumerator GetEnumerator ()\r
                 {\r
-                        return null;\r
+                       return InnerList.GetEnumerator (); \r
                 }\r
                 \r
-                [MonoTODO]\r
                 public int IndexOf (object value)\r
                 {\r
-                        return 0;        \r
+                       return InnerList.IndexOf (value);\r
                 }\r
                 \r
-                [MonoTODO]\r
-                public void Insert (int index, object value) {}\r
+                public void Insert (int index, object value) \r
+               {\r
+                       InnerList.Insert (index, value);\r
+               }\r
                 \r
-                [MonoTODO]\r
-                public void Remove (object value) {}\r
+                public void Remove (object value) \r
+               {\r
+                       InnerList.Remove (value);\r
+               }\r
                 \r
-                [MonoTODO]\r
-                public void RemoveAt (int index) {}\r
+                public void RemoveAt (int index) \r
+               {\r
+                       InnerList.RemoveAt (index);\r
+               }\r
+\r
+               #endregion // Methods\r
         }\r
 }\r
 \r