summaryrefslogtreecommitdiff
path: root/common/framework/com/android/net/module/util/BitUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/framework/com/android/net/module/util/BitUtils.java')
-rw-r--r--common/framework/com/android/net/module/util/BitUtils.java140
1 files changed, 0 insertions, 140 deletions
diff --git a/common/framework/com/android/net/module/util/BitUtils.java b/common/framework/com/android/net/module/util/BitUtils.java
deleted file mode 100644
index 3062d8cf..00000000
--- a/common/framework/com/android/net/module/util/BitUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.net.module.util;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-
-/**
- * @hide
- */
-public class BitUtils {
- /**
- * Unpacks long value into an array of bits.
- */
- public static int[] unpackBits(long val) {
- int size = Long.bitCount(val);
- int[] result = new int[size];
- int index = 0;
- int bitPos = 0;
- while (val != 0) {
- if ((val & 1) == 1) result[index++] = bitPos;
- val = val >>> 1;
- bitPos++;
- }
- return result;
- }
-
- /**
- * Packs a list of ints in the same way as packBits()
- *
- * Each passed int is the rank of a bit that should be set in the returned long.
- * Example : passing (1,3) will return in 0b00001010 and passing (5,6,0) will return 0b01100001
- *
- * @param bits bits to pack
- * @return a long with the specified bits set.
- */
- public static long packBitList(int... bits) {
- return packBits(bits);
- }
-
- /**
- * Packs array of bits into a long value.
- *
- * Each passed int is the rank of a bit that should be set in the returned long.
- * Example : passing [1,3] will return in 0b00001010 and passing [5,6,0] will return 0b01100001
- *
- * @param bits bits to pack
- * @return a long with the specified bits set.
- */
- public static long packBits(int[] bits) {
- long packed = 0;
- for (int b : bits) {
- packed |= (1L << b);
- }
- return packed;
- }
-
- /**
- * An interface for a function that can retrieve a name associated with an int.
- *
- * This is useful for bitfields like network capabilities or network score policies.
- */
- @FunctionalInterface
- public interface NameOf {
- /** Retrieve the name associated with the passed value */
- String nameOf(int value);
- }
-
- /**
- * Given a bitmask and a name fetcher, append names of all set bits to the builder
- *
- * This method takes all bit sets in the passed bitmask, will figure out the name associated
- * with the weight of each bit with the passed name fetcher, and append each name to the
- * passed StringBuilder, separated by the passed separator.
- *
- * For example, if the bitmask is 0110, and the name fetcher return "BIT_1" to "BIT_4" for
- * numbers from 1 to 4, and the separator is "&", this method appends "BIT_2&BIT3" to the
- * StringBuilder.
- */
- public static void appendStringRepresentationOfBitMaskToStringBuilder(@NonNull StringBuilder sb,
- long bitMask, @NonNull NameOf nameFetcher, @NonNull String separator) {
- int bitPos = 0;
- boolean firstElementAdded = false;
- while (bitMask != 0) {
- if ((bitMask & 1) != 0) {
- if (firstElementAdded) {
- sb.append(separator);
- } else {
- firstElementAdded = true;
- }
- sb.append(nameFetcher.nameOf(bitPos));
- }
- bitMask >>>= 1;
- ++bitPos;
- }
- }
-
- /**
- * Returns a short but human-readable string of updates between an old and a new bit fields.
- *
- * @param oldVal the old bit field to diff from
- * @param newVal the new bit field to diff to
- * @return a string fit for logging differences, or null if no differences.
- * this method cannot return the empty string.
- */
- @Nullable
- public static String describeDifferences(final long oldVal, final long newVal,
- @NonNull final NameOf nameFetcher) {
- final long changed = oldVal ^ newVal;
- if (0 == changed) return null;
- // If the control reaches here, there are changes (additions, removals, or both) so
- // the code below is guaranteed to add something to the string and can't return "".
- final long removed = oldVal & changed;
- final long added = newVal & changed;
- final StringBuilder sb = new StringBuilder();
- if (0 != removed) {
- sb.append("-");
- appendStringRepresentationOfBitMaskToStringBuilder(sb, removed, nameFetcher, "-");
- }
- if (0 != added) {
- sb.append("+");
- appendStringRepresentationOfBitMaskToStringBuilder(sb, added, nameFetcher, "+");
- }
- return sb.toString();
- }
-}