package org.multiverse.stms.gamma;
import org.multiverse.api.Txn;
import org.multiverse.api.exceptions.TxnMandatoryException;
import org.multiverse.stms.gamma.transactionalobjects.GammaObject;
import org.multiverse.stms.gamma.transactions.GammaTxn;
import static java.lang.String.format;
import static org.multiverse.api.TxnThreadLocal.getThreadLocalTxn;
public final class GammaStmUtils {
public static String toDebugString(GammaObject o) {
if (o == null) {
return "null";
} else {
return o.getClass().getName() + '@' + System.identityHashCode(o);
}
}
public static GammaTxn getRequiredThreadLocalGammaTxn() {
final Txn tx = getThreadLocalTxn();
if (tx == null) {
throw new TxnMandatoryException();
}
return asGammaTxn(tx);
}
public static GammaTxn asGammaTxn(final Txn tx) {
if (tx instanceof GammaTxn) {
return (GammaTxn) tx;
}
if (tx == null) {
throw new NullPointerException("Txn can't be null");
}
tx.abort();
throw new ClassCastException(
format("Expected Txn of class %s, found %s", GammaTxn.class.getName(), tx.getClass().getName()));
}
public static boolean longAsBoolean(long value) {
return value == 1;
}
public static long booleanAsLong(boolean b) {
return b ? 1 : 0;
}
public static double longAsDouble(long value) {
return Double.longBitsToDouble(value);
}
public static long doubleAsLong(double value) {
return Double.doubleToLongBits(value);
}
//we don't want instances.
private GammaStmUtils() {
}
}