internal static SetterDelegate ScopeTypeSetterDelegate(RoleAssignmentFlagsFormat.Bitfields bitfield) { return(delegate(object value, IPropertyBag propertyBag) { RoleAssignmentFlagsFormat.SetBits((ulong)((long)((ScopeType)value)), propertyBag, bitfield); }); }
internal static GetterDelegate ScopeTypeGetterDelegate(RoleAssignmentFlagsFormat.Bitfields bitfield) { return((IPropertyBag propertyBag) => (ScopeType)RoleAssignmentFlagsFormat.GetBits(propertyBag, bitfield)); }
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 })); } }
internal static ulong GetRawUInt64Bits(ulong valueToSet, RoleAssignmentFlagsFormat.Bitfields bitfield) { return((valueToSet & RoleAssignmentFlagsFormat.masks[(int)bitfield]) << RoleAssignmentFlagsFormat.shifts[(int)bitfield]); }
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])); }
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]); }