c8f04173903ff3fcdf1fb5dfe0574b247c7bad70
[mono.git] / mcs / class / referencesource / mscorlib / system / security / permissionsetenumerator.cs
1 // ==++==
2 // 
3 //   Copyright (c) Microsoft Corporation.  All rights reserved.
4 // 
5 // ==--==
6 // <OWNER>Microsoft</OWNER>
7 // 
8
9 namespace System.Security 
10 {
11     //PermissionSetEnumerator.cs
12     
13     using System;
14     using System.Collections;
15     using TokenBasedSetEnumerator = System.Security.Util.TokenBasedSetEnumerator;
16     using TokenBasedSet = System.Security.Util.TokenBasedSet;
17     
18     internal class PermissionSetEnumerator : IEnumerator 
19     {
20         PermissionSetEnumeratorInternal enm;
21         
22         public Object Current
23         {
24             get
25             {
26                 return enm.Current;
27             }
28         }
29
30         public bool MoveNext()
31         {
32             return enm.MoveNext();
33         }
34         
35         public void Reset()
36         {
37             enm.Reset();
38         }
39         
40         internal PermissionSetEnumerator(PermissionSet permSet)
41         {
42             enm = new PermissionSetEnumeratorInternal(permSet);
43         }
44     }
45     
46     internal struct PermissionSetEnumeratorInternal 
47     {
48         private PermissionSet m_permSet;
49         private TokenBasedSetEnumerator enm;
50         
51         public Object Current
52         {
53             get
54             {
55                 return enm.Current;
56             }
57         }
58
59         internal PermissionSetEnumeratorInternal(PermissionSet permSet)
60         {
61             m_permSet = permSet;
62             enm = new TokenBasedSetEnumerator(permSet.m_permSet);
63         }
64
65         public int GetCurrentIndex()
66         {
67             return enm.Index;
68         }
69         
70         public void Reset()
71         {
72             enm.Reset();
73         }
74         
75         public bool MoveNext()
76         {
77             while (enm.MoveNext())
78             {
79                 Object obj = enm.Current;
80                 IPermission perm = obj as IPermission;
81                 if (perm != null)
82                 {
83                     enm.Current = perm;
84                     return true;
85                 }
86
87 #if FEATURE_CAS_POLICY
88                 SecurityElement elem = obj as SecurityElement;
89
90                 if (elem != null)
91                 {
92                     perm = m_permSet.CreatePermission(elem, enm.Index);
93                     if (perm != null)
94                     {
95                         enm.Current = perm;
96                         return true;
97                     }
98                 }
99 #endif // FEATURE_CAS_POLICY
100             }
101             return false;
102         }
103     }
104 }
105