001/* 002 * PlotSquared, a land and world management plugin for Minecraft. 003 * Copyright (C) IntellectualSites <https://intellectualsites.com> 004 * Copyright (C) IntellectualSites team and contributors 005 * 006 * This program is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with this program. If not, see <https://www.gnu.org/licenses/>. 018 */ 019package com.plotsquared.core.util; 020 021import org.checkerframework.checker.nullness.qual.NonNull; 022 023public final class HashUtil { 024 025 private HashUtil() { 026 } 027 028 /** 029 * Hashcode of a boolean array.<br> 030 * - Used for traversing mega plots quickly. 031 * 032 * @param array Booleans to hash 033 * @return hashcode 034 */ 035 public static int hash(final @NonNull boolean[] array) { 036 if (array.length == 4) { 037 if (!array[0] && !array[1] && !array[2] && !array[3]) { 038 return 0; 039 } 040 return ((array[0] ? 1 : 0) << 3) + ((array[1] ? 1 : 0) << 2) + ((array[2] ? 1 : 0) << 1) 041 + (array[3] ? 1 : 0); 042 } 043 int n = 0; 044 for (boolean anArray : array) { 045 n = (n << 1) + (anArray ? 1 : 0); 046 } 047 return n; 048 } 049 050}