package org.jacorb.poa.util; /* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /** * This class wraps byte arrays so that they can be used as keys * in hashtables. * * @author Steve Osselton */ public class ByteArrayKey { private int cacheH = 0; private byte[] bytes = null; private String cacheS = null; public ByteArrayKey (byte[] array) { bytes = array; } public ByteArrayKey (ByteArrayKey bak) { cacheH = bak.cacheH; cacheS = bak.cacheS; bytes = bak.bytes; } public byte[] getBytes () { return bytes; } /** * Overrides hashCode () in Object */ public int hashCode () { if( cacheH == 0 ) { long h = 1234; if ((bytes != null) && (bytes.length > 0)) { for (int i = bytes.length; --i >= 0; ) { h ^= bytes[i] * (i + 1); } cacheH = (int)((h >> 32) ^ h); } } return cacheH; } /** * Overrides equals () in Object */ public boolean equals (Object obj) { boolean result = false; if (obj instanceof ByteArrayKey) { ByteArrayKey key = (ByteArrayKey) obj; if ((bytes == key.bytes) || ((bytes == null) && (key.bytes == null))) { result = true; } else if ((bytes != null) && (key.bytes != null)) { if (bytes.length == key.bytes.length) { result = true; for (int i = 0; i < bytes.length; i++) { if (bytes[i] != key.bytes[i]) { result = false; break; } } } } } return result; } public String toString() { if( cacheS == null ) { if( bytes == null ) { cacheS = ""; } else { cacheS = new String(bytes); } } return cacheS; } }