The Labs \ Source Viewer \ SSCLI \ System.Security \ PermissionSetEnumerator

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace System.Security
  16. {
  17.     //PermissionSetEnumerator.cs
  18.    
  19.     using System;
  20.     using System.Collections;
  21.     using TokenBasedSetEnumerator = System.Security.Util.TokenBasedSetEnumerator;
  22.     using TokenBasedSet = System.Security.Util.TokenBasedSet;
  23.    
  24.     internal class PermissionSetEnumerator : IEnumerator
  25.     {
  26.         PermissionSetEnumeratorInternal enm;
  27.        
  28.         public object Current {
  29.             get { return enm.Current; }
  30.         }
  31.        
  32.         public bool MoveNext()
  33.         {
  34.             return enm.MoveNext();
  35.         }
  36.        
  37.         public void Reset()
  38.         {
  39.             enm.Reset();
  40.         }
  41.        
  42.         internal PermissionSetEnumerator(PermissionSet permSet)
  43.         {
  44.             enm = new PermissionSetEnumeratorInternal(permSet);
  45.         }
  46.     }
  47.    
  48.     internal struct PermissionSetEnumeratorInternal
  49.     {
  50.         private PermissionSet m_permSet;
  51.         private TokenBasedSetEnumerator enm;
  52.        
  53.         public object Current {
  54.             get { return enm.Current; }
  55.         }
  56.        
  57.         internal PermissionSetEnumeratorInternal(PermissionSet permSet)
  58.         {
  59.             m_permSet = permSet;
  60.             enm = new TokenBasedSetEnumerator(permSet.m_permSet);
  61.         }
  62.        
  63.         public int GetCurrentIndex()
  64.         {
  65.             return enm.Index;
  66.         }
  67.        
  68.         public void Reset()
  69.         {
  70.             enm.Reset();
  71.         }
  72.        
  73.         public bool MoveNext()
  74.         {
  75.             while (enm.MoveNext()) {
  76.                 object obj = enm.Current;
  77.                 IPermission perm = obj as IPermission;
  78.                 if (perm != null) {
  79.                     enm.Current = perm;
  80.                     return true;
  81.                 }
  82.                
  83.                 SecurityElement elem = obj as SecurityElement;
  84.                
  85.                 if (elem != null) {
  86.                     perm = m_permSet.CreatePermission(elem, enm.Index);
  87.                     if (perm != null) {
  88.                         enm.Current = perm;
  89.                         return true;
  90.                     }
  91.                 }
  92.             }
  93.             return false;
  94.         }
  95.     }
  96. }

Developer Fusion