Exemplo n.º 1
0
            /// <summary>
            /// Проверка вхождения битового набора - искомый набор полностью содержится в базовом
            /// </summary>
            /// <typeparam name="TEnum">Тип перечисления</typeparam>
            /// <param name="baseFlags">Базовый набор флагов</param>
            /// <param name="searchFlags">Искомый набор флагов</param>
            /// <returns>Возвращает true, если искомый набор полностью содержится в базовом</returns>
            public static bool HasFlag <TEnum>(this TEnum baseFlags, TEnum searchFlags) where TEnum : struct
            {
                int baseConverted = BitEnumHelper <TEnum, int> .GetNumber(baseFlags);

                int searchConverted = BitEnumHelper <TEnum, int> .GetNumber(searchFlags);

                return(HasFlag(baseConverted, searchConverted));
            }
Exemplo n.º 2
0
            /// <summary>
            /// Проверка пересечения битового набора - наличие хотябы одного флага в обоих наборах
            /// </summary>
            /// <typeparam name="TEnum">Тип битового перечисления</typeparam>
            /// <param name="baseFlags">Проверяемая коллекция битовых флагов</param>
            /// <param name="searchFlags">Искомая коллекция битовых флагов</param>
            /// <returns>Возвращает наличие хотябы одного флага в обоих наборах</returns>
            public static bool ContainsFlag <TEnum>(this TEnum baseFlags, TEnum searchFlags) where TEnum : struct
            {
                var en = baseFlags as Enum;

                int baseConverted = BitEnumHelper <TEnum, int> .GetNumber(baseFlags);

                int searchConverted = BitEnumHelper <TEnum, int> .GetNumber(searchFlags);

                if (baseConverted == searchConverted)
                {
                    return(true);
                }

                return(Contains(baseConverted, searchConverted));
            }
Exemplo n.º 3
0
            /// <summary>
            /// Получить общие флаги для битовых перечислений
            /// </summary>
            /// <typeparam name="TEnum">Тип перечисления</typeparam>
            /// <param name="baseFlags">Базовая коллекция</param>
            /// <param name="searchFlags">Искомые флаги</param>
            /// <returns>Возвращает схожие флаги в двух наборах</returns>
            public static TEnum GetSameFlags <TEnum>(this TEnum baseFlags, TEnum searchFlags) where TEnum : struct
            {
                int baseConverted = BitEnumHelper <TEnum, int> .GetNumber(baseFlags);

                int searchConverted = BitEnumHelper <TEnum, int> .GetNumber(searchFlags);

                if (baseConverted == searchConverted)
                {
                    return(searchFlags);
                }

                int resultValue = 0;

                foreach (var val in BitEnumHelper <TEnum, int> .Numbers)
                {
                    if (HasFlag(searchConverted, val) && HasFlag(baseConverted, val))
                    {
                        resultValue = resultValue | val;
                    }
                }

                return((TEnum)(object)resultValue);
            }
Exemplo n.º 4
0
            /// <summary>
            /// Проверка наличия только одного флага в наборе (int)
            /// </summary>
            /// <typeparam name="TEnum">Тип битового перечисления</typeparam>
            /// <param name="flag">Проверяемый набор флагов</param>
            /// <returns>Возвращает true если в наборе только один флаг</returns>
            public static bool HasSingleFlag <TEnum>(this TEnum flag) where TEnum : struct
            {
                int integer = BitEnumHelper <TEnum, int> .GetNumber(flag);

                return(HasSingleFlag(integer));
            }