Created
June 16, 2020 21:22
-
-
Save Mr00Anderson/096cb6fcc6b3d80d5cb45e08f554b40c to your computer and use it in GitHub Desktop.
helpful for operations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.virtual_hex.types; | |
| import java.util.Objects; | |
| /** | |
| * mutable mask only through bitwise operations | |
| * | |
| * Utility for visualizing bit operations | |
| * | |
| * Author: mr00anderson | |
| * | |
| * License: free to use | |
| * | |
| */ | |
| public class BitmaskInt { | |
| public final String name; | |
| public final int mask; | |
| public BitmaskInt(String name, int mask) { | |
| this.name = name; | |
| this.mask = mask; | |
| } | |
| public boolean isBitSet(int number) { | |
| return (number & mask) != 0; | |
| } | |
| public int setBitMask(int number) { | |
| return number | mask; | |
| } | |
| public int unsetBitMask(int number) { | |
| return number & ~mask; | |
| } | |
| private String getBinaryString() { | |
| return getBinaryString(8); | |
| } | |
| private String getBinaryString(int grouping) { | |
| return BitSlotInt.binaryString(mask, grouping); | |
| } | |
| public static boolean hasBitmask(int number, BitmaskInt... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| if ((number & masks[i].mask) == 0) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| public static int setBitmask(int number, BitmaskInt... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number | masks[i].mask; | |
| } | |
| return number; | |
| } | |
| public static int unsetBitmasks(int number, BitmaskInt... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number & ~masks[i].mask; | |
| } | |
| return number; | |
| } | |
| @Override | |
| public String toString() { | |
| return "Permission{" + | |
| "name='" + name + '\'' + | |
| ", mask=" + mask + | |
| '}'; | |
| } | |
| @Override | |
| public boolean equals(Object o) { | |
| if (this == o) return true; | |
| if (!(o instanceof BitmaskInt)) return false; | |
| BitmaskInt that = (BitmaskInt) o; | |
| return mask == that.mask; | |
| } | |
| @Override | |
| public int hashCode() { | |
| return Objects.hash(mask); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.virtual_hex.types; | |
| import java.util.Objects; | |
| /** | |
| * mutable mask only through bitwise operations | |
| * | |
| * Utility for visualizing bit operations | |
| * | |
| * Author: mr00anderson | |
| * | |
| * License: free to use | |
| * | |
| */ | |
| public class BitmaskLong { | |
| public final String name; | |
| public final long mask; | |
| public BitmaskLong(String name, int mask) { | |
| this.name = name; | |
| this.mask = mask; | |
| } | |
| public boolean isBitSet(long number) { | |
| return (number & mask) != 0; | |
| } | |
| public long setBitMask(long number) { | |
| return number | mask; | |
| } | |
| public long unsetBitMask(long number) { | |
| return number & ~mask; | |
| } | |
| private String getBinaryString() { | |
| return getBinaryString(8); | |
| } | |
| private String getBinaryString(int grouping) { | |
| return BitSlotLong.binaryString(mask, grouping); | |
| } | |
| private long clearMask(){ | |
| long tempMask = mask; | |
| return tempMask; | |
| } | |
| public static long unsetBitMask(long number, long mask) { | |
| return number & ~mask; | |
| } | |
| @Override | |
| public String toString() { | |
| return "Permission{" + | |
| "name='" + name + '\'' + | |
| ", mask=" + mask + | |
| '}'; | |
| } | |
| @Override | |
| public boolean equals(Object o) { | |
| if (this == o) return true; | |
| if (!(o instanceof BitmaskInt)) return false; | |
| BitmaskInt that = (BitmaskInt) o; | |
| return mask == that.mask; | |
| } | |
| @Override | |
| public int hashCode() { | |
| return Objects.hash(mask); | |
| } | |
| public static boolean hasBitmask(long number, BitmaskLong... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| if ((number & masks[i].mask) == 0) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| public static long setBitmask(long number, BitmaskLong... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number | masks[i].mask; | |
| } | |
| return number; | |
| } | |
| public static long unsetBitmasks(long number, BitmaskLong... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number & ~masks[i].mask; | |
| } | |
| return number; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.virtual_hex.types; | |
| //@formatter:off - IntelliJ | |
| /* @formatter:off - Eclipse */ | |
| /** | |
| * Utility for visualizing bit operations | |
| * | |
| * Author: mr00anderson | |
| * | |
| * License: free to use | |
| */ | |
| public enum BitSlotInt { | |
| _0 (0b00000000_00000000_00000000_00000000), | |
| _1 (0b00000000_00000000_00000000_00000001), | |
| _2 (0b00000000_00000000_00000000_00000010), | |
| _3 (0b00000000_00000000_00000000_00000100), | |
| _4 (0b00000000_00000000_00000000_00001000), | |
| _5 (0b00000000_00000000_00000000_00010000), | |
| _6 (0b00000000_00000000_00000000_00100000), | |
| _7 (0b00000000_00000000_00000000_01000000), | |
| _8 (0b00000000_00000000_00000000_10000000), | |
| _9 (0b00000000_00000000_00000001_00000000), | |
| _10 (0b00000000_00000000_00000010_00000000), | |
| _11 (0b00000000_00000000_00000100_00000000), | |
| _12 (0b00000000_00000000_00001000_00000000), | |
| _13 (0b00000000_00000000_00010000_00000000), | |
| _14 (0b00000000_00000000_00100000_00000000), | |
| _15 (0b00000000_00000000_01000000_00000000), | |
| _16 (0b00000000_00000000_10000000_00000000), | |
| _17 (0b00000000_00000001_00000000_00000000), | |
| _18 (0b00000000_00000010_00000000_00000000), | |
| _19 (0b00000000_00000100_00000000_00000000), | |
| _20 (0b00000000_00001000_00000000_00000000), | |
| _21 (0b00000000_00010000_00000000_00000000), | |
| _22 (0b00000000_00100000_00000000_00000000), | |
| _23 (0b00000000_01000000_00000000_00000000), | |
| _24 (0b00000000_10000000_00000000_00000000), | |
| _25 (0b00000001_00000000_00000000_00000000), | |
| _26 (0b00000010_00000000_00000000_00000000), | |
| _27 (0b00000100_00000000_00000000_00000000), | |
| _28 (0b00001000_00000000_00000000_00000000), | |
| _29 (0b00010000_00000000_00000000_00000000), | |
| _30 (0b00100000_00000000_00000000_00000000), | |
| _31 (0b01000000_00000000_00000000_00000000), | |
| _32 (0b10000000_00000000_00000000_00000000); | |
| public final int value; | |
| BitSlotInt(int value) { | |
| this.value = value; | |
| } | |
| public static boolean isBitSet(int number, int mask) { | |
| return (number & mask) != 0; | |
| } | |
| public static int setBitmask(int number, int mask) { | |
| return number | mask; | |
| } | |
| public static int unsetBitMask(int number, BitSlotInt mask) { | |
| return number & ~mask.value; | |
| } | |
| public static int unsetBitMask(int number, int mask) { | |
| return number & ~mask; | |
| } | |
| public static int setBitmaskSlot(int number, BitSlotInt slot, boolean setBit) { | |
| return setBitmaskSlot(number, slot.value, setBit); | |
| } | |
| public static int setBitmaskSlot(int number, int slot, boolean setBit) { | |
| if(setBit){ | |
| return number | slot; | |
| } else { | |
| return number & ~slot; | |
| } | |
| } | |
| public static boolean isBitSet(int number, BitSlotInt mask) { | |
| return (number & mask.value) != 0; | |
| } | |
| public static int setBitmask(int number, BitSlotInt mask) { | |
| return number | mask.value; | |
| } | |
| public static String binaryString(int number) { | |
| return binaryString(number, 8); | |
| } | |
| public static String binaryString(int number, int groupSize) { | |
| StringBuilder result = new StringBuilder(); | |
| for (int i = 31; i >= 0; i--) { | |
| int mask = 1 << i; | |
| result.append((number & mask) != 0 ? "1" : "0"); | |
| if (i % groupSize == 0) | |
| result.append(" "); | |
| } | |
| return result.toString().trim(); | |
| } | |
| public static boolean hasBitmask(int number, int... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| if ((number & masks[i]) == 0) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| public static int setBitmask(int number, int... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number | masks[i]; | |
| } | |
| return number; | |
| } | |
| public static int unsetBitmasks(int number, int... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number & ~masks[i]; | |
| } | |
| return number; | |
| } | |
| } | |
| //@formatter:on - IntelliJ | |
| /* @formatter:on - Eclipse */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.virtual_hex.types; | |
| //@formatter:off - IntelliJ | |
| /* @formatter:off - Eclipse */ | |
| /** | |
| * | |
| * Utility for visualizing bit operations | |
| * | |
| * Author: mr00anderson | |
| * | |
| * License: free to use | |
| * | |
| */ | |
| public enum BitSlotLong { | |
| _0 (0b00000000_00000000_00000000_00000000), | |
| _1 (0b00000000_00000000_00000000_00000001), | |
| _2 (0b00000000_00000000_00000000_00000010), | |
| _3 (0b00000000_00000000_00000000_00000100), | |
| _4 (0b00000000_00000000_00000000_00001000), | |
| _5 (0b00000000_00000000_00000000_00010000), | |
| _6 (0b00000000_00000000_00000000_00100000), | |
| _7 (0b00000000_00000000_00000000_01000000), | |
| _8 (0b00000000_00000000_00000000_10000000), | |
| _9 (0b00000000_00000000_00000001_00000000), | |
| _10 (0b00000000_00000000_00000010_00000000), | |
| _11 (0b00000000_00000000_00000100_00000000), | |
| _12 (0b00000000_00000000_00001000_00000000), | |
| _13 (0b00000000_00000000_00010000_00000000), | |
| _14 (0b00000000_00000000_00100000_00000000), | |
| _15 (0b00000000_00000000_01000000_00000000), | |
| _16 (0b00000000_00000000_10000000_00000000), | |
| _17 (0b00000000_00000001_00000000_00000000), | |
| _18 (0b00000000_00000010_00000000_00000000), | |
| _19 (0b00000000_00000100_00000000_00000000), | |
| _20 (0b00000000_00001000_00000000_00000000), | |
| _21 (0b00000000_00010000_00000000_00000000), | |
| _22 (0b00000000_00100000_00000000_00000000), | |
| _23 (0b00000000_01000000_00000000_00000000), | |
| _24 (0b00000000_10000000_00000000_00000000), | |
| _25 (0b00000001_00000000_00000000_00000000), | |
| _26 (0b00000010_00000000_00000000_00000000), | |
| _27 (0b00000100_00000000_00000000_00000000), | |
| _28 (0b00001000_00000000_00000000_00000000), | |
| _29 (0b00010000_00000000_00000000_00000000), | |
| _30 (0b00100000_00000000_00000000_00000000), | |
| _31 (0b01000000_00000000_00000000_00000000), | |
| _32 (0b10000000_00000000_00000000_00000000), | |
| _33 (0b00000000_00000000_00000000_00000001_00000000_00000000_00000000_00000000L), | |
| _34 (0b00000000_00000000_00000000_00000010_00000000_00000000_00000000_00000000L), | |
| _35 (0b00000000_00000000_00000000_00000100_00000000_00000000_00000000_00000000L), | |
| _36 (0b00000000_00000000_00000000_00001000_00000000_00000000_00000000_00000000L), | |
| _37 (0b00000000_00000000_00000000_00010000_00000000_00000000_00000000_00000000L), | |
| _38 (0b00000000_00000000_00000000_00100000_00000000_00000000_00000000_00000000L), | |
| _39 (0b00000000_00000000_00000000_01000000_00000000_00000000_00000000_00000000L), | |
| _40 (0b00000000_00000000_00000000_10000000_00000000_00000000_00000000_00000000L), | |
| _41 (0b00000000_00000000_00000001_00000000_00000000_00000000_00000000_00000000L), | |
| _42 (0b00000000_00000000_00000010_00000000_00000000_00000000_00000000_00000000L), | |
| _43 (0b00000000_00000000_00000100_00000000_00000000_00000000_00000000_00000000L), | |
| _44 (0b00000000_00000000_00001000_00000000_00000000_00000000_00000000_00000000L), | |
| _45 (0b00000000_00000000_00010000_00000000_00000000_00000000_00000000_00000000L), | |
| _46 (0b00000000_00000000_00100000_00000000_00000000_00000000_00000000_00000000L), | |
| _47 (0b00000000_00000000_01000000_00000000_00000000_00000000_00000000_00000000L), | |
| _48 (0b00000000_00000000_10000000_00000000_00000000_00000000_00000000_00000000L), | |
| _49 (0b00000000_00000001_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _50 (0b00000000_00000010_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _51 (0b00000000_00000100_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _52 (0b00000000_00001000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _53 (0b00000000_00010000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _54 (0b00000000_00100000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _55 (0b00000000_01000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _56 (0b00000000_10000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _57 (0b00000001_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _58 (0b00000010_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _59 (0b00000100_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _60 (0b00001000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _61 (0b00010000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _62 (0b00100000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _63 (0b01000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L), | |
| _64 (0b10000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000L); | |
| public final long value; | |
| BitSlotLong(long value) { | |
| this.value = value; | |
| } | |
| public static boolean isBitSet(long number, long mask) { | |
| return (number & mask) != 0; | |
| } | |
| public static long setBitmask(long number, long mask) { | |
| return number | mask; | |
| } | |
| public static boolean isBitSet(long number, BitSlotLong mask) { | |
| return (number & mask.value) != 0; | |
| } | |
| public static long setBitmaskSlot(long number, BitSlotLong slot, boolean setBit) { | |
| return setBitmaskSlot(number, slot.value, setBit); | |
| } | |
| public static long setBitmaskSlot(long number, long slot, boolean setBit) { | |
| if(setBit){ | |
| return number | slot; | |
| } else { | |
| return number & ~slot; | |
| } | |
| } | |
| public static long unsetBitMask(long number, BitSlotLong mask) { | |
| return number & ~mask.value; | |
| } | |
| public static long setBitmask(long number, BitSlotLong mask) { | |
| return number | mask.value; | |
| } | |
| public static String binaryString(long number) { | |
| return binaryString(number, 8); | |
| } | |
| public static String binaryString(long number, int groupSize) { | |
| StringBuilder result = new StringBuilder(); | |
| for (int i = 31; i >= 0; i--) { | |
| int mask = 1 << i; | |
| result.append((number & mask) != 0 ? "1" : "0"); | |
| if (i % groupSize == 0) | |
| result.append(" "); | |
| } | |
| return result.toString().trim(); | |
| } | |
| public static boolean hasBitmask(long number, long... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| if ((number & masks[i]) == 0) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| public static long setBitmask(long number, long... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number | masks[i]; | |
| } | |
| return number; | |
| } | |
| public static long unsetBitmasks(long number, long... masks) { | |
| int length = masks.length; | |
| for (int i = 0; i < length; i++) { | |
| number = number & ~masks[i]; | |
| } | |
| return number; | |
| } | |
| } | |
| //@formatter:on - IntelliJ | |
| /* @formatter:on - Eclipse */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment