package cn.mutils.core.codec; import cn.mutils.core.text.StringUtil; /** * Flag utility of framework */ @SuppressWarnings("unused") public class FlagUtil { public static final int FLAG_01 = 0x00000001; public static final int FLAG_02 = 0x00000002; public static final int FLAG_03 = 0x00000004; public static final int FLAG_04 = 0x00000008; public static final int FLAG_05 = 0x00000010; public static final int FLAG_06 = 0x00000020; public static final int FLAG_07 = 0x00000040; public static final int FLAG_08 = 0x00000080; public static final int FLAG_09 = 0x00000100; public static final int FLAG_10 = 0x00000200; public static final int FLAG_11 = 0x00000400; public static final int FLAG_12 = 0x00000800; public static final int FLAG_13 = 0x00001000; public static final int FLAG_14 = 0x00002000; public static final int FLAG_15 = 0x00004000; public static final int FLAG_16 = 0x00008000; public static final int FLAG_17 = 0x00010000; public static final int FLAG_18 = 0x00020000; public static final int FLAG_19 = 0x00040000; public static final int FLAG_20 = 0x00080000; public static final int FLAG_21 = 0x00100000; public static final int FLAG_22 = 0x00200000; public static final int FLAG_23 = 0x00400000; public static final int FLAG_24 = 0x00800000; public static final int FLAG_25 = 0x01000000; public static final int FLAG_26 = 0x02000000; public static final int FLAG_27 = 0x04000000; public static final int FLAG_28 = 0x08000000; public static final int FLAG_29 = 0x10000000; public static final int FLAG_30 = 0x20000000; public static final int FLAG_31 = 0x40000000; public static final int FLAG_32 = 0x80000000; public static final int FLAGS_TRUE = 0xFFFFFFFF; public static final int FLAGS_FALSE = 0x00000000; /** * Get one bit flag value from flags * * @param flags Flags * @param bit [1,32] * @return Flag value */ public static boolean getValue(int flags, int bit) { if (bit <= 0 || bit > 32) { return false; } int mask = flags; if (bit > 1) { mask = mask >> (bit - 1); } return (mask & FlagUtil.FLAG_01) == FlagUtil.FLAG_01; } /** * Set one bit flag value to flags * * @param flags Flags * @param bit [1,32] * @param value Flag value * @return Flags assigned */ public static int setValue(int flags, int bit, boolean value) { if (bit <= 0 || bit > 32) { return flags; } int mask = FlagUtil.FLAG_01; if (bit > 1) { mask = mask << (bit - 1); } return value ? (flags | mask) : (flags & (~mask)); } /** * Create flag value */ public static int obtainFlag(int bit) { return FlagUtil.setValue(FlagUtil.FLAGS_FALSE, bit, true); } /** * Whether has flags * * @param flags Source flags * @param mask Mask flags * @return Result */ public static boolean hasFlags(int flags, int mask) { return (flags & mask) == mask; } /** * Add mask flags to source flags * * @param flags Flags * @param mask Mask * @return Flags assigned */ public static int addFlags(int flags, int mask) { return flags | mask; } /** * Clear mask flags for source flags * * @param flags Flags * @param mask Mask * @return Flags assigned */ public static int clearFlags(int flags, int mask) { return flags & (~mask); } /** * Set mask flags for source flags */ public static int setFlags(int flags, int mask, boolean value) { return value ? (flags | mask) : (flags & (~mask)); } /** * Format flags to binary string */ public static String toBinaryString(int flags) { return StringUtil.zeroPadding(Integer.toBinaryString(flags), 32); } /** * Format flags to hex string */ public static String toHexString(int flags) { return StringUtil.zeroPadding(Integer.toHexString(flags), 8); } /** * Format flags to normal string */ public static String toString(int flags) { return Integer.toString(flags); } }