SCViewer/com.minres.scviewer.databas.../src/org/apache/jdbm/Utils.java

111 lines
2.8 KiB
Java

package org.apache.jdbm;
import javax.crypto.Cipher;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOError;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Comparator;
/**
* Various utilities used in JDBM
*/
@SuppressWarnings("rawtypes")
class Utils {
/**
* empty string is used as dummy value to represent null values in HashSet and TreeSet
*/
static final String EMPTY_STRING = "";
public static byte[] encrypt(Cipher cipherIn, ByteBuffer b) {
if(cipherIn==null && b.hasArray())
return b.array();
byte[] bb = new byte[Storage.PAGE_SIZE];
b.rewind();
b.get(bb,0,Storage.PAGE_SIZE);
return encrypt(cipherIn,bb);
}
public static byte[] encrypt(Cipher cipherIn, byte[] b) {
if (cipherIn == null)
return b;
try {
return cipherIn.doFinal(b);
} catch (Exception e) {
throw new IOError(e);
}
}
/**
* Compares comparables. Default comparator for most of java types
*/
static final Comparator COMPARABLE_COMPARATOR = new Comparator<Comparable>() {
@SuppressWarnings("unchecked")
public int compare(Comparable o1, Comparable o2) {
return o1 == null && o2 != null ? -1 : (o1 != null && o2 == null ? 1 : o1.compareTo(o2));
}
};
static String formatSpaceUsage(long size) {
if (size < 1e4)
return size + "B";
else if (size < 1e7)
return "" + Math.round(1D * size / 1024D) + "KB";
else if (size < 1e10)
return "" + Math.round(1D * size / 1e6) + "MB";
else
return "" + Math.round(1D * size / 1e9) + "GB";
}
static boolean allZeros(byte[] b) {
for (int i = 0; i < b.length; i++) {
if (b[i] != 0) return false;
}
return true;
}
@SuppressWarnings("unchecked")
static <E> E max(E e1, E e2, Comparator comp){
if(e1 == null) return e2;
if(e2 == null) return e1;
if(comp == null)
comp = COMPARABLE_COMPARATOR;
return comp.compare(e1,e2)<0 ? e2:e1;
}
@SuppressWarnings("unchecked")
static <E> E min(E e1, E e2, Comparator comp){
if(e1 == null) return e2;
if(e2 == null) return e1;
if(comp == null)
comp = COMPARABLE_COMPARATOR;
return comp.compare(e1,e2)>0 ? e2:e1;
}
static final Serializer<Object> NULL_SERIALIZER = new Serializer<Object>() {
public void serialize(DataOutput out, Object obj) throws IOException {
out.writeByte(11);
}
public Object deserialize(DataInput in) throws IOException, ClassNotFoundException {
in.readByte();
return null;
}
};
}