[Mono-list] Patch for corlib/System.Security.Policy/Evidence.cs

Jackson Harper jacksonh@telus.net
Sun, 20 Oct 2002 20:21:38 -0700


This is a multi-part message in MIME format.

------=_NextPart_000_0021_01C27876.4B648C70
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Here is my patch for corlib\System.Security.Policy\Evidence.cs

Changelog Entry:

Implemented most methods.

------=_NextPart_000_0021_01C27876.4B648C70
Content-Type: application/octet-stream;
	name="Evidence.cs.patch"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="Evidence.cs.patch"

Index: Evidence.cs=0A=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A=
RCS file: /mono/mcs/class/corlib/System.Security.Policy/Evidence.cs,v=0A=
retrieving revision 1.4=0A=
diff -u -r1.4 Evidence.cs=0A=
--- Evidence.cs	1 Apr 2002 20:22:40 -0000	1.4=0A=
+++ Evidence.cs	21 Oct 2002 03:15:49 -0000=0A=
@@ -1,27 +1,169 @@=0A=
-// System.Security.Policy.Evidence=0A=
-//=0A=
-// Authors:=0A=
-//  Sean MacIsaac (macisaac@ximian.com)=0A=
-//  Nick Drochak (ndrochak@gol.com)=0A=
-//=0A=
-// (C) 2001 Ximian, Inc.=0A=
-=0A=
-using System.Collections;=0A=
-=0A=
-namespace System.Security.Policy=0A=
-{=0A=
-	[MonoTODO]=0A=
-	[Serializable]=0A=
-	public sealed class Evidence=0A=
-	{=0A=
-		=0A=
-		[MonoTODO]=0A=
-		public Evidence () {=0A=
-		}=0A=
-=0A=
-		[MonoTODO]=0A=
-		public IEnumerator GetHostEnumerator() {=0A=
-			throw new NotImplementedException();=0A=
-		}=0A=
-	}=0A=
-}=0A=
+// System.Security.Policy.Evidence
+//
+// Authors:
+//  Sean MacIsaac (macisaac@ximian.com)
+//  Nick Drochak (ndrochak@gol.com)
+//  Jackson Harper (Jackson@LatitudeGeo.com)
+//
+// (C) 2001 Ximian, Inc.
+
+using System;
+using System.Collections;
+
+namespace System.Security.Policy {
+
+	[MonoTODO]
+	public sealed class Evidence : ICollection, IEnumerable {
+
+	=09
+		private ArrayList  mHostEvidenceList      =3D  new ArrayList();=09
+		private ArrayList  mAssemblyEvidenceList  =3D  new ArrayList();
+	=09
+		public Evidence ()=20
+		{
+		}
+
+		public Evidence( Evidence evidence )=20
+		{
+			Merge( evidence );=09
+		}
+
+		public Evidence( object[] hostEvidence, object[] assemblyEvidence )=20
+		{
+			if ( null !=3D hostEvidence )
+				mHostEvidenceList.AddRange( hostEvidence );
+			if ( null !=3D assemblyEvidence )
+				mAssemblyEvidenceList.AddRange( assemblyEvidence );
+		}
+	=09
+		//
+		// Public Properties
+		//
+=09
+		public int Count {
+			get {
+				return ( mHostEvidenceList.Count + mAssemblyEvidenceList.Count );
+			}
+		}
+
+		public bool IsReadOnly {
+			get{
+				return false;
+			}
+		}
+	=09
+		public bool IsSynchronized {
+			get {
+				return false;
+			}
+		}
+
+		[MonoTODO]
+		public bool Locked {
+			get {
+				throw new NotImplementedException();
+			}
+			set {
+				throw new NotImplementedException();
+			}
+		}=09
+
+		public object SyncRoot {
+			get {
+				return this;
+			}
+		}
+
+		//
+		// Public Methods
+		//
+
+		public void AddAssembly( object id )=20
+		{
+			mAssemblyEvidenceList.Add( id );
+		}
+
+		[MonoTODO("If Locked is true and the code that calls this method does =
not have SecurityPermissionFlag.ControlEvidence a SecurityException =
should be thrown")]
+		public void AddHost( object id )=20
+		{
+			mHostEvidenceList.Add( id );
+		}
+
+		public void CopyTo( Array array, int index )=20
+		{
+			if ( mHostEvidenceList.Count > 0 )=20
+				mHostEvidenceList.CopyTo( array, index );
+			if ( mAssemblyEvidenceList.Count > 0 )=20
+				mAssemblyEvidenceList.CopyTo( array, index + =
mHostEvidenceList.Count );
+		}
+
+		public IEnumerator GetEnumerator()=20
+		{
+			return new EvidenceEnumerator( mHostEvidenceList.GetEnumerator(),=20
+						       mAssemblyEvidenceList.GetEnumerator() );
+		}
+
+		public IEnumerator GetAssemblyEnumerator()=20
+		{
+			return mAssemblyEvidenceList.GetEnumerator();
+		}
+
+		public IEnumerator GetHostEnumerator()=20
+		{
+			return mHostEvidenceList.GetEnumerator();
+		}
+
+		public void Merge( Evidence evidence )=20
+		{
+			IEnumerator	hostenum , assemblyenum;
+		=09
+			hostenum =3D evidence.GetHostEnumerator();
+			while( hostenum.MoveNext() ) {
+				AddHost( hostenum.Current );
+			}
+
+			assemblyenum =3D evidence.GetAssemblyEnumerator();
+			while( assemblyenum.MoveNext() ) {
+				AddAssembly( assemblyenum.Current );
+			}
+		}
+=09
+		private class EvidenceEnumerator : IEnumerator {
+		=09
+			private IEnumerator	mCurrentEnum, mHostEnum, mAssemblyEnum;	=09
+=09
+			public EvidenceEnumerator( IEnumerator hostenum, IEnumerator =
assemblyenum )=20
+			{
+				mHostEnum =3D hostenum;
+				mAssemblyEnum =3D assemblyenum;
+				mCurrentEnum =3D mHostEnum;		=09
+			}
+
+			public bool MoveNext()=20
+			{
+				bool 	ret =3D mCurrentEnum.MoveNext();
+			=09
+				if ( !ret && mHostEnum =3D=3D mCurrentEnum ) {
+					mCurrentEnum =3D mAssemblyEnum;
+					ret =3D mAssemblyEnum.MoveNext();
+				}
+
+				return ret;
+			}
+
+			public void Reset()=20
+			{
+				mHostEnum.Reset();
+				mAssemblyEnum.Reset();
+				mCurrentEnum =3D mHostEnum;
+			}
+
+			public object Current {
+				get {
+					return mCurrentEnum.Current;
+				}
+			}
+		}
+
+	}
+}

------=_NextPart_000_0021_01C27876.4B648C70--