package com.ripple.core.coretypes;
import com.ripple.core.coretypes.hash.Hash256;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Quality {
/**
* Finds the quality (TakerPays/TakerGets) ratio packed into the last 64
* bits of root DirectoryNode ledger indexes.
*/
public static BigDecimal fromBookDirectory(Hash256 bookDirectory,
boolean payIsNative,
boolean getIsNative) {
// The last 7 bytes contains the mantissa
byte[] mantissa = bookDirectory.slice(-7);
// Most significant byte has the exponent packed
int exponent = ( bookDirectory.get(-8) & 0xFF) - 100;
// Return the value in XRP scale, rather than drops, as stored.
int scale = -(payIsNative ? exponent - 6 :
getIsNative ? exponent + 6 : exponent);
BigInteger unsignedBig = new BigInteger(1, mantissa);
return new BigDecimal(unsignedBig, scale);
}
}