/*
* Copyright (c) 2008-2010 by Christian Lorenz,
* Zuse Institute Berlin
*
* Licensed under the BSD License, see LICENSE file for details.
*
*/
package de.mxro.thrd.xstreemfs.foundation.checksums.algorithms;
import java.nio.ByteBuffer;
import de.mxro.thrd.xstreemfs.foundation.checksums.StringChecksumAlgorithm;
/**
* The Java algorithm, which is used for string.hashCode(). It uses the Java
* internal implementation.
*
* 02.09.2008
*
* @author clorenz
*/
public class JavaHash implements StringChecksumAlgorithm {
private Long hash = null;
private String name = "Java-Hash";
/**
* Updates checksum with specified data.
*
* @param data
*/
public void digest(String data) {
this.hash = Long.valueOf(data.hashCode());
}
/*
* (non-Javadoc)
*
* @see org.xtreemfs.foundation.checksums.ChecksumAlgorithm#digest(java.nio.ByteBuffer)
*/
@Override
public void update(ByteBuffer data) {
byte[] array;
if (data.hasArray()) {
array = data.array();
} else {
array = new byte[data.capacity()];
final int oldPos = data.position();
data.position(0);
data.get(array);
data.position(oldPos);
}
this.hash = (long)new String(array).hashCode();
}
/*
* (non-Javadoc)
*
* @see org.xtreemfs.foundation.checksums.ChecksumAlgorithm#getName()
*/
@Override
public String getName() {
return this.name;
}
/*
* (non-Javadoc)
*
* @see org.xtreemfs.foundation.checksums.ChecksumAlgorithm#getValue()
*/
@Override
public long getValue() {
long value;
if (this.hash != null)
value = this.hash;
else
value = 0;
reset();
return value;
}
/*
* (non-Javadoc)
*
* @see org.xtreemfs.foundation.checksums.ChecksumAlgorithm#reset()
*/
@Override
public void reset() {
hash = null;
}
/*
* (non-Javadoc)
*
* @see org.xtreemfs.common.checksum.ChecksumAlgorithm#clone()
*/
@Override
public JavaHash clone() {
return new JavaHash();
}
}