コード例 #1
0
 internal static SetterDelegate ScopeTypeSetterDelegate(RoleAssignmentFlagsFormat.Bitfields bitfield)
 {
     return(delegate(object value, IPropertyBag propertyBag)
     {
         RoleAssignmentFlagsFormat.SetBits((ulong)((long)((ScopeType)value)), propertyBag, bitfield);
     });
 }
コード例 #2
0
 internal static GetterDelegate ScopeTypeGetterDelegate(RoleAssignmentFlagsFormat.Bitfields bitfield)
 {
     return((IPropertyBag propertyBag) => (ScopeType)RoleAssignmentFlagsFormat.GetBits(propertyBag, bitfield));
 }
コード例 #3
0
        private static QueryFilter RoleAssignmentFlagsFilterBuilder <T>(SinglePropertyFilter filter, RoleAssignmentFlagsFormat.Bitfields bitfield, RoleAssignmentFlagsFormat.ConvertToUlongDelegate convertor)
        {
            if (!(filter is ComparisonFilter))
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedFilterForProperty(filter.Property.Name, filter.GetType(), typeof(ComparisonFilter)));
            }
            ComparisonFilter comparisonFilter = (ComparisonFilter)filter;

            if (comparisonFilter.ComparisonOperator != ComparisonOperator.Equal && ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedOperatorForProperty(comparisonFilter.Property.Name, comparisonFilter.ComparisonOperator.ToString()));
            }
            if (!(comparisonFilter.PropertyValue is T))
            {
                throw new ArgumentException("filter.PropertyValue");
            }
            ulong       rawUInt64Bits = RoleAssignmentFlagsFormat.GetRawUInt64Bits(convertor(comparisonFilter.PropertyValue), bitfield);
            ulong       mask          = RoleAssignmentFlagsFormat.masks[(int)bitfield] << RoleAssignmentFlagsFormat.shifts[(int)bitfield] & ~rawUInt64Bits;
            QueryFilter queryFilter   = new BitMaskAndFilter(ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags, rawUInt64Bits);
            QueryFilter queryFilter2  = new BitMaskOrFilter(ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags, mask);

            if (comparisonFilter.PropertyValue is bool && !(bool)comparisonFilter.PropertyValue)
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(new NotFilter(queryFilter));
                }
                return(queryFilter);
            }
            else
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(new AndFilter(new QueryFilter[]
                    {
                        queryFilter,
                        new NotFilter(queryFilter2)
                    }));
                }
                return(new OrFilter(new QueryFilter[]
                {
                    new NotFilter(queryFilter),
                    queryFilter2
                }));
            }
        }
コード例 #4
0
 internal static ulong GetRawUInt64Bits(ulong valueToSet, RoleAssignmentFlagsFormat.Bitfields bitfield)
 {
     return((valueToSet & RoleAssignmentFlagsFormat.masks[(int)bitfield]) << RoleAssignmentFlagsFormat.shifts[(int)bitfield]);
 }
コード例 #5
0
        private static void SetBits(ulong valueToSet, IPropertyBag propertyBag, RoleAssignmentFlagsFormat.Bitfields bitfield)
        {
            long num = (long)propertyBag[ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags];

            propertyBag[ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags] = ((num & (long)(~(long)((long)RoleAssignmentFlagsFormat.masks[(int)bitfield] << RoleAssignmentFlagsFormat.shifts[(int)bitfield]))) | (long)((long)(valueToSet & RoleAssignmentFlagsFormat.masks[(int)bitfield]) << RoleAssignmentFlagsFormat.shifts[(int)bitfield]));
        }
コード例 #6
0
        private static ulong GetBits(IPropertyBag propertyBag, RoleAssignmentFlagsFormat.Bitfields bitfield)
        {
            long num = (long)propertyBag[ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags];

            return((ulong)num >> RoleAssignmentFlagsFormat.shifts[(int)bitfield] & RoleAssignmentFlagsFormat.masks[(int)bitfield]);
        }