* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / Novell.Directory.Ldap / Novell.Directory.Ldap / MessageVector.cs
index cdbdb8ac42759388e0156af0c9de03930f794cb2..fee7ab1db6a8a160783db19c64bfb6a52e5b6911 100644 (file)
@@ -38,8 +38,9 @@ namespace Novell.Directory.Ldap
        /// to Vector needed for handling messages.
        /// </summary>
        /* package */
-       class MessageVector:System.Collections.ArrayList
+       class MessageVector:System.Collections.IList
        {
+               private readonly System.Collections.ArrayList _innerList;
                /// <summary>Returns an array containing all of the elements in this MessageVector.
                /// The elements returned are in the same order in the array as in the
                /// Vector.  The contents of the vector are cleared.
@@ -47,29 +48,25 @@ namespace Novell.Directory.Ldap
                /// </summary>
                /// <returns> the array containing all of the elements.
                /// </returns>
-               virtual internal System.Object[] ObjectArray
+               internal System.Object[] ObjectArray
                {
                        /* package */
                        
                        get
                        {
-                               lock (this)
+                               lock (this.SyncRoot)
                                {
-                                       System.Object[] results = new System.Object[Count];
-                                       Array.Copy((System.Array) ToArray(), 0, (System.Array) results, 0, Count);
-                                       for (int i = 0; i < Count; i++)
-                                       {
-                                               ToArray()[i] = null;
-                                       }
-//                                     Count = 0;
+                                       System.Object[] results = ToArray();
+                                       Clear();
                                        return results;
                                }
                        }
                        
                }
                /* package */
-               internal MessageVector(int cap, int incr):base(cap)
+               internal MessageVector(int cap, int incr)
                {
+                       _innerList = System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(cap));
                        return ;
                }
                
@@ -88,12 +85,12 @@ namespace Novell.Directory.Ldap
                /* package */
                internal Message findMessageById(int msgId)
                {
-                       lock (this)
+                       lock (this.SyncRoot)
                        {
                                Message msg = null;
                                for (int i = 0; i < Count; i++)
                                {
-                                       if ((msg = (Message) ToArray()[i]) == null)
+                                       if ((msg = (Message) this[i]) == null)
                                        {
                                                throw new System.FieldAccessException();
                                        }
@@ -105,5 +102,106 @@ namespace Novell.Directory.Ldap
                                throw new System.FieldAccessException();
                        }
                }
+
+               #region ArrayList members\r
+               public object[] ToArray()\r
+               {\r
+                       return _innerList.ToArray();\r
+               }\r
+               #endregion\r
+\r
+               #region IList Members\r
+\r
+               public int Add(object value)\r
+               {\r
+                       return _innerList.Add(value);\r
+               }\r
+\r
+               public void Clear()\r
+               {\r
+                       _innerList.Clear();\r
+               }\r
+\r
+               public bool Contains(object value)\r
+               {\r
+                       return _innerList.Contains(value);\r
+               }\r
+\r
+               public int IndexOf(object value)\r
+               {\r
+                       return _innerList.IndexOf(value);\r
+               }\r
+\r
+               public void Insert(int index, object value)\r
+               {\r
+                       _innerList.Insert(index, value);\r
+               }\r
+\r
+               public bool IsFixedSize\r
+               {\r
+                       get { return _innerList.IsFixedSize; }\r
+               }\r
+\r
+               public bool IsReadOnly\r
+               {\r
+                       get { return _innerList.IsReadOnly; }\r
+               }\r
+\r
+               public void Remove(object value)\r
+               {\r
+                       _innerList.Remove(value);\r
+               }\r
+\r
+               public void RemoveAt(int index)\r
+               {\r
+                       _innerList.RemoveAt(index);\r
+               }\r
+\r
+               public object this[int index]\r
+               {\r
+                       get\r
+                       {\r
+                               return _innerList[index];\r
+                       }\r
+                       set\r
+                       {\r
+                               _innerList[index] = value;\r
+                       }\r
+               }\r
+\r
+               #endregion\r
+\r
+               #region ICollection Members\r
+\r
+               public void CopyTo(Array array, int index)\r
+               {\r
+                       _innerList.CopyTo(array, index);\r
+               }\r
+\r
+               public int Count\r
+               {\r
+                       get { return _innerList.Count; }\r
+               }\r
+\r
+               public bool IsSynchronized\r
+               {\r
+                       get { return _innerList.IsSynchronized; }\r
+               }\r
+\r
+               public object SyncRoot\r
+               {\r
+                       get { return _innerList.SyncRoot; }\r
+               }\r
+\r
+               #endregion\r
+\r
+               #region IEnumerable Members\r
+\r
+               public System.Collections.IEnumerator GetEnumerator()\r
+               {\r
+                       return _innerList.GetEnumerator();\r
+               }\r
+\r
+               #endregion
        }
 }