diff --git a/src/main/java/org/qora/account/Forging.java b/src/main/java/org/qora/account/Forging.java index 5f9102b7..51f06c5f 100644 --- a/src/main/java/org/qora/account/Forging.java +++ b/src/main/java/org/qora/account/Forging.java @@ -2,13 +2,14 @@ package org.qora.account; import org.qora.block.BlockChain; import org.qora.repository.DataException; +import org.qora.utils.BitTwiddling; /** Relating to whether accounts can forge. */ public class Forging { /** Returns mask for account flags for forging bits. */ public static int getForgingMask() { - return (1 << BlockChain.getInstance().getForgingTiers().size()) - 1; + return BitTwiddling.calcMask(BlockChain.getInstance().getForgingTiers().size() - 1); } public static boolean canForge(Account account) throws DataException { diff --git a/src/main/java/org/qora/utils/BitTwiddling.java b/src/main/java/org/qora/utils/BitTwiddling.java new file mode 100644 index 00000000..1dc6cbfd --- /dev/null +++ b/src/main/java/org/qora/utils/BitTwiddling.java @@ -0,0 +1,24 @@ +package org.qora.utils; + +public class BitTwiddling { + + /** + * Returns bit-mask for values up to, and including, maxValue. + *

+ * e.g. for values up to 5 (0101b) this returns a mask of 7 (0111b). + *

+ * Based on Integer.highestOneBit. + * + * @param maxValue + * @return mask + */ + public static int calcMask(int maxValue) { + maxValue |= maxValue >> 1; + maxValue |= maxValue >> 2; + maxValue |= maxValue >> 4; + maxValue |= maxValue >> 8; + maxValue |= maxValue >> 16; + return maxValue; + } + +}