Add BitUtils (from "Support multiple filters per association request")

This patch is a cherry-pick of the BitUtils class from commit
36e866b8e0.

(cherry picked from commit 36e866b8e0)

Test: none
Change-Id: Iaf33929f6841db273a92d650e84287bf2964fa3d
Merged-In: I0a978787551a1ee5750ec5544b241d3bbfed5a7c
This commit is contained in:
Eugene Susla
2017-02-23 18:24:39 -08:00
committed by Hugo Benichi
parent f2e6988350
commit 8ab86a6dc6

View File

@@ -0,0 +1,58 @@
/*
* Copyright (C) 2017 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.internal.util;
import android.annotation.Nullable;
import libcore.util.Objects;
import java.util.Arrays;
import java.util.UUID;
public class BitUtils {
private BitUtils() {}
public static boolean maskedEquals(long a, long b, long mask) {
return (a & mask) == (b & mask);
}
public static boolean maskedEquals(byte a, byte b, byte mask) {
return (a & mask) == (b & mask);
}
public static boolean maskedEquals(byte[] a, byte[] b, @Nullable byte[] mask) {
if (a == null || b == null) return a == b;
Preconditions.checkArgument(a.length == b.length, "Inputs must be of same size");
if (mask == null) return Arrays.equals(a, b);
Preconditions.checkArgument(a.length == mask.length, "Mask must be of same size as inputs");
for (int i = 0; i < mask.length; i++) {
if (!maskedEquals(a[i], b[i], mask[i])) return false;
}
return true;
}
public static boolean maskedEquals(UUID a, UUID b, @Nullable UUID mask) {
if (mask == null) {
return Objects.equal(a, b);
}
return maskedEquals(a.getLeastSignificantBits(), b.getLeastSignificantBits(),
mask.getLeastSignificantBits())
&& maskedEquals(a.getMostSignificantBits(), b.getMostSignificantBits(),
mask.getMostSignificantBits());
}
}