3 namespace SharpCompress.Common
5 internal static class FlagUtility
8 /// Returns true if the flag is set on the specified bit field.
9 /// Currently only works with 32-bit bitfields.
11 /// <typeparam name="T">Enumeration with Flags attribute</typeparam>
12 /// <param name="bitField">Flagged variable</param>
13 /// <param name="flag">Flag to test</param>
14 /// <returns></returns>
15 public static bool HasFlag<T>(long bitField, T flag)
18 return HasFlag(bitField, flag);
22 /// Returns true if the flag is set on the specified bit field.
23 /// Currently only works with 32-bit bitfields.
25 /// <typeparam name="T">Enumeration with Flags attribute</typeparam>
26 /// <param name="bitField">Flagged variable</param>
27 /// <param name="flag">Flag to test</param>
28 /// <returns></returns>
29 public static bool HasFlag<T>(ulong bitField, T flag)
32 return HasFlag(bitField, flag);
36 /// Returns true if the flag is set on the specified bit field.
37 /// Currently only works with 32-bit bitfields.
39 /// <param name="bitField">Flagged variable</param>
40 /// <param name="flag">Flag to test</param>
41 /// <returns></returns>
42 public static bool HasFlag(ulong bitField, ulong flag)
44 return ((bitField & flag) == flag);
47 public static bool HasFlag(short bitField, short flag)
49 return ((bitField & flag) == flag);
54 /// Generically checks enums in a Windows Phone 7 enivronment
56 /// <param name="enumVal"></param>
57 /// <param name="flag"></param>
58 /// <returns></returns>
59 public static bool HasFlag(this Enum enumVal, Enum flag)
61 if (enumVal.GetHashCode() > 0) //GetHashCode returns the enum value. But it's something very crazy if not set beforehand
63 ulong num = Convert.ToUInt64(flag.GetHashCode());
64 return ((Convert.ToUInt64(enumVal.GetHashCode()) & num) == num);
74 /// Returns true if the flag is set on the specified bit field.
75 /// Currently only works with 32-bit bitfields.
77 /// <typeparam name="T">Enumeration with Flags attribute</typeparam>
78 /// <param name="bitField">Flagged variable</param>
79 /// <param name="flag">Flag to test</param>
80 /// <returns></returns>
81 public static bool HasFlag<T>(T bitField, T flag)
84 return HasFlag(Convert.ToInt64(bitField), Convert.ToInt64(flag));
88 /// Returns true if the flag is set on the specified bit field.
89 /// Currently only works with 32-bit bitfields.
91 /// <param name="bitField">Flagged variable</param>
92 /// <param name="flag">Flag to test</param>
93 /// <returns></returns>
94 public static bool HasFlag(long bitField, long flag)
96 return ((bitField & flag) == flag);
101 /// Sets a bit-field to either on or off for the specified flag.
103 /// <param name="bitField">Flagged variable</param>
104 /// <param name="flag">Flag to change</param>
105 /// <param name="on">bool</param>
106 /// <returns>The flagged variable with the flag changed</returns>
107 public static long SetFlag(long bitField, long flag, bool @on)
111 return bitField | flag;
113 return bitField & (~flag);
117 /// Sets a bit-field to either on or off for the specified flag.
119 /// <typeparam name="T">Enumeration with Flags attribute</typeparam>
120 /// <param name="bitField">Flagged variable</param>
121 /// <param name="flag">Flag to change</param>
122 /// <param name="on">bool</param>
123 /// <returns>The flagged variable with the flag changed</returns>
124 public static long SetFlag<T>(T bitField, T flag, bool @on)
127 return SetFlag(Convert.ToInt64(bitField), Convert.ToInt64(flag), @on);