using System; namespace SharpCompress.Common { internal static class FlagUtility { /// /// Returns true if the flag is set on the specified bit field. /// Currently only works with 32-bit bitfields. /// /// Enumeration with Flags attribute /// Flagged variable /// Flag to test /// public static bool HasFlag(long bitField, T flag) where T : struct { return HasFlag(bitField, flag); } /// /// Returns true if the flag is set on the specified bit field. /// Currently only works with 32-bit bitfields. /// /// Enumeration with Flags attribute /// Flagged variable /// Flag to test /// public static bool HasFlag(ulong bitField, T flag) where T : struct { return HasFlag(bitField, flag); } /// /// Returns true if the flag is set on the specified bit field. /// Currently only works with 32-bit bitfields. /// /// Flagged variable /// Flag to test /// public static bool HasFlag(ulong bitField, ulong flag) { return ((bitField & flag) == flag); } public static bool HasFlag(short bitField, short flag) { return ((bitField & flag) == flag); } /// /// Returns true if the flag is set on the specified bit field. /// Currently only works with 32-bit bitfields. /// /// Enumeration with Flags attribute /// Flagged variable /// Flag to test /// public static bool HasFlag(T bitField, T flag) where T : struct { return HasFlag(Convert.ToInt64(bitField), Convert.ToInt64(flag)); } /// /// Returns true if the flag is set on the specified bit field. /// Currently only works with 32-bit bitfields. /// /// Flagged variable /// Flag to test /// public static bool HasFlag(long bitField, long flag) { return ((bitField & flag) == flag); } /// /// Sets a bit-field to either on or off for the specified flag. /// /// Flagged variable /// Flag to change /// bool /// The flagged variable with the flag changed public static long SetFlag(long bitField, long flag, bool on) { if (on) { return bitField | flag; } return bitField & (~flag); } /// /// Sets a bit-field to either on or off for the specified flag. /// /// Enumeration with Flags attribute /// Flagged variable /// Flag to change /// bool /// The flagged variable with the flag changed public static long SetFlag(T bitField, T flag, bool on) where T : struct { return SetFlag(Convert.ToInt64(bitField), Convert.ToInt64(flag), on); } } }