All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.util.BitUtil Maven / Gradle / Ivy

There is a newer version: 2.1.0-Beta1-1.0.25
Show newest version
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.util;

import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

public final class BitUtil {
  @Contract(pure = true)
  public static boolean isSet(byte value, byte mask) {
    assertOneBitMask(mask);
    return (value & mask) == mask;
  }
  @Contract(pure = true)
  public static boolean isSet(int value, int mask) {
    assertOneBitMask(mask);
    return (value & mask) == mask;
  }
  @Contract(pure = true)
  public static boolean isSet(long flags, long mask) {
    assertOneBitMask(mask);
    return (flags & mask) == mask;
  }

  @Contract(pure = true)
  public static byte set(byte value, byte mask, boolean setBit) {
    assertOneBitMask(mask);
    return (byte)(setBit ? value | mask : value & ~mask);
  }

  @Contract(pure = true)
  public static int set(int value, int mask, boolean setBit) {
    assertOneBitMask(mask);
    return setBit ? value | mask : value & ~mask;
  }

  @Contract(pure = true)
  public static long set(long value, long mask, boolean setBit) {
    assertOneBitMask(mask);
    return setBit ? value | mask : value & ~mask;
  }

  @Contract(pure = true)
  public static byte clear(byte value, byte mask) {
    return set(value, mask, false);
  }
  @Contract(pure = true)
  public static int clear(int value, int mask) {
    return set(value, mask, false);
  }
  @Contract(pure = true)
  public static long clear(long value, long mask) {
    return set(value, mask, false);
  }

  private static void assertOneBitMask(byte mask) {
    assertOneBitMask(mask & 0xFFL);
  }
  public static void assertOneBitMask(int mask) {
    assert (mask & mask - 1) == 0 : invalidMaskError(mask);
  }

  private static void assertOneBitMask(long mask) {
    assert (mask & mask - 1) == 0 : invalidMaskError(mask);
  }

  @NotNull
  private static String invalidMaskError(long mask) {
    return "Mask must have only one bit set, but got: " + Long.toBinaryString(mask);
  }

  public static boolean isPowerOfTwo(int i) {
    return (i & (i - 1)) == 0;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy