diff options
Diffstat (limited to 'src/mscorlib/src/System/Security/PermissionSetEnumerator.cs')
-rw-r--r-- | src/mscorlib/src/System/Security/PermissionSetEnumerator.cs | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs b/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs new file mode 100644 index 0000000000..55b56cb570 --- /dev/null +++ b/src/mscorlib/src/System/Security/PermissionSetEnumerator.cs @@ -0,0 +1,103 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// + +namespace System.Security +{ + //PermissionSetEnumerator.cs + + using System; + using System.Collections; + using TokenBasedSetEnumerator = System.Security.Util.TokenBasedSetEnumerator; + using TokenBasedSet = System.Security.Util.TokenBasedSet; + + internal class PermissionSetEnumerator : IEnumerator + { + PermissionSetEnumeratorInternal enm; + + public Object Current + { + get + { + return enm.Current; + } + } + + public bool MoveNext() + { + return enm.MoveNext(); + } + + public void Reset() + { + enm.Reset(); + } + + internal PermissionSetEnumerator(PermissionSet permSet) + { + enm = new PermissionSetEnumeratorInternal(permSet); + } + } + + internal struct PermissionSetEnumeratorInternal + { + private PermissionSet m_permSet; + private TokenBasedSetEnumerator enm; + + public Object Current + { + get + { + return enm.Current; + } + } + + internal PermissionSetEnumeratorInternal(PermissionSet permSet) + { + m_permSet = permSet; + enm = new TokenBasedSetEnumerator(permSet.m_permSet); + } + + public int GetCurrentIndex() + { + return enm.Index; + } + + public void Reset() + { + enm.Reset(); + } + + public bool MoveNext() + { + while (enm.MoveNext()) + { + Object obj = enm.Current; + IPermission perm = obj as IPermission; + if (perm != null) + { + enm.Current = perm; + return true; + } + +#if FEATURE_CAS_POLICY + SecurityElement elem = obj as SecurityElement; + + if (elem != null) + { + perm = m_permSet.CreatePermission(elem, enm.Index); + if (perm != null) + { + enm.Current = perm; + return true; + } + } +#endif // FEATURE_CAS_POLICY + } + return false; + } + } +} + |