コード例 #1
0
        /// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.Intersect"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public override IPermission Intersect(IPermission target)
        {
            if (target == null)
            {
                return(null);
            }

            if (!(target is MessageQueuePermission))
            {
                throw new ArgumentException(Res.GetString(Res.InvalidParameter, "target", target.ToString()));
            }

            MessageQueuePermission targetQueuePermission = (MessageQueuePermission)target;

            if (this.IsUnrestricted())
            {
                return(targetQueuePermission.Copy());
            }

            if (targetQueuePermission.IsUnrestricted())
            {
                return(this.Copy());
            }

            this.ResolveFormatNames();
            targetQueuePermission.ResolveFormatNames();
            MessageQueuePermission newPermission = new MessageQueuePermission();
            Hashtable newFormatNames             = new Hashtable(new CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture), new CaseInsensitiveComparer(CultureInfo.InvariantCulture));

            newPermission.resolvedFormatNames = newFormatNames;
            IDictionaryEnumerator formatNamesEnumerator;
            Hashtable             formatNamesTable;

            if (this.resolvedFormatNames.Count < targetQueuePermission.resolvedFormatNames.Count)
            {
                formatNamesEnumerator = this.resolvedFormatNames.GetEnumerator();
                formatNamesTable      = targetQueuePermission.resolvedFormatNames;
            }
            else
            {
                formatNamesEnumerator = targetQueuePermission.resolvedFormatNames.GetEnumerator();
                formatNamesTable      = this.resolvedFormatNames;
            }

            while (formatNamesEnumerator.MoveNext())
            {
                if (formatNamesTable.ContainsKey(formatNamesEnumerator.Key))
                {
                    string currentFormatName = (string)formatNamesEnumerator.Key;
                    MessageQueuePermissionAccess currentAccess = (MessageQueuePermissionAccess)formatNamesEnumerator.Value;
                    MessageQueuePermissionAccess targetAccess  = (MessageQueuePermissionAccess)formatNamesTable[currentFormatName];
                    newFormatNames.Add(currentFormatName, currentAccess & targetAccess);
                }
            }

            return(newPermission);
        }
コード例 #2
0
        public override IPermission Intersect(IPermission target)
        {
            IDictionaryEnumerator enumerator;
            Hashtable             resolvedFormatNames;

            if (target == null)
            {
                return(null);
            }
            if (!(target is MessageQueuePermission))
            {
                throw new ArgumentException(Res.GetString("InvalidParameter", new object[] { "target", target.ToString() }));
            }
            MessageQueuePermission permission = (MessageQueuePermission)target;

            if (this.IsUnrestricted())
            {
                return(permission.Copy());
            }
            if (permission.IsUnrestricted())
            {
                return(this.Copy());
            }
            this.ResolveFormatNames();
            permission.ResolveFormatNames();
            MessageQueuePermission permission2 = new MessageQueuePermission();
            Hashtable hashtable = new Hashtable(GetComparer());

            permission2.resolvedFormatNames = hashtable;
            if (this.resolvedFormatNames.Count < permission.resolvedFormatNames.Count)
            {
                enumerator          = this.resolvedFormatNames.GetEnumerator();
                resolvedFormatNames = permission.resolvedFormatNames;
            }
            else
            {
                enumerator          = permission.resolvedFormatNames.GetEnumerator();
                resolvedFormatNames = this.resolvedFormatNames;
            }
            while (enumerator.MoveNext())
            {
                if (resolvedFormatNames.ContainsKey(enumerator.Key))
                {
                    string key = (string)enumerator.Key;
                    MessageQueuePermissionAccess access  = (MessageQueuePermissionAccess)enumerator.Value;
                    MessageQueuePermissionAccess access2 = (MessageQueuePermissionAccess)resolvedFormatNames[key];
                    hashtable.Add(key, access & access2);
                }
            }
            return(permission2);
        }