diff options
| author | Hugo Benichi <hugobenichi@google.com> | 2017-04-21 02:16:20 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-04-21 02:16:20 +0000 |
| commit | 00aae481fafb6ef26eb4aa2a6879b0f166716cc2 (patch) | |
| tree | e0fc26ab1e54d02c0a74d4dac0a248d6e809b945 | |
| parent | 559f49a4a8bd571b276ea94e28b6b017365aeb0e (diff) | |
| parent | 232198d02b4b4109a472d5aacc6c88ff75e70045 (diff) | |
Merge "Add BitUtils (from "Support multiple filters per association request")" am: 1321e592fe
am: 232198d02b
Change-Id: I755f87e0dbe8169de01ea5cd09094eed3555ee65
| -rw-r--r-- | core/java/com/android/internal/util/BitUtils.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/BitUtils.java b/core/java/com/android/internal/util/BitUtils.java new file mode 100644 index 000000000000..a208ccb8f35f --- /dev/null +++ b/core/java/com/android/internal/util/BitUtils.java @@ -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()); + } +} |
