/*
* Created on May 27, 2008
* Created by Paul Gardner
*
* Copyright 2008 Vuze, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
package org.gudy.azureus2.core3.util;
/**
* This class DOES NOT COPY THE UNDERLYING BYTES AND ONLY SUPPORTS Short.MAX_VALUE bytes
* @author Azureus
*
*/
public class
HashWrapper2
{
final private byte[] hash;
final private short offset;
final private short length;
final private int hash_code;
public
HashWrapper2(
byte[] hash )
{
this( hash, 0, hash.length );
}
public
HashWrapper2(
byte[] _hash,
int _offset,
int _length )
{
if ( _offset >= Short.MAX_VALUE ){
throw( new RuntimeException( "Illegal value - offset too large" ));
}
if ( _length >= Short.MAX_VALUE ){
throw( new RuntimeException( "Illegal value - length too large" ));
}
hash = _hash;
offset = (short)_offset;
length = (short)_length;
int hc = 0;
for (int i=offset; i<offset+length; i++) {
hc = 31*hc + hash[i];
}
hash_code = hc;
}
public final boolean
equals(
Object o)
{
if( !( o instanceof HashWrapper2 )){
return false;
}
HashWrapper2 other = (HashWrapper2)o;
if ( other.length != length ){
return( false );
}
byte[] other_hash = other.hash;
int other_offset = other.offset;
for ( int i=0;i<length;i++){
if ( hash[offset+i] != other_hash[other_offset+i] ){
return( false );
}
}
return( true );
}
public int
hashCode()
{
return( hash_code );
}
}