Made UniqueId a subclass of Bytes.

This commit is contained in:
str4d
2016-02-02 22:00:08 +00:00
committed by akwizgran
parent 0f1dc554bd
commit 5a6ab9bb96
8 changed files with 49 additions and 60 deletions

View File

@@ -1,47 +1,12 @@
package org.briarproject.api;
import java.util.Arrays;
import java.util.Comparator;
public abstract class UniqueId {
public abstract class UniqueId extends Bytes {
/** The length of a unique identifier in bytes. */
public static final int LENGTH = 32;
protected final byte[] id;
private int hashCode = -1;
protected UniqueId(byte[] id) {
super(id);
if (id.length != LENGTH) throw new IllegalArgumentException();
this.id = id;
}
public byte[] getBytes() {
return id;
}
@Override
public int hashCode() {
// Thread-safe because if two or more threads check and update the
// value, they'll calculate the same value
if (hashCode == -1) hashCode = Arrays.hashCode(id);
return hashCode;
}
public static class IdComparator implements Comparator<UniqueId> {
public static final IdComparator INSTANCE = new IdComparator();
@Override
public int compare(UniqueId a, UniqueId b) {
byte[] aBytes = a.getBytes(), bBytes = b.getBytes();
for (int i = 0; i < UniqueId.LENGTH; i++) {
int aUnsigned = aBytes[i] & 0xFF, bUnsigned = bBytes[i] & 0xFF;
if (aUnsigned < bUnsigned) return -1;
if (aUnsigned > bUnsigned) return 1;
}
return 0;
}
}
}