package edu.brown.benchmark.tpce.generators;
import edu.brown.benchmark.tpce.util.EGenRandom;
public class CETxnMixGenerator {
public CETxnMixGenerator( TDriverCETxnSettings driverCETxnSettings, BaseLogger logger ){
this.driverCETxnSettings = driverCETxnSettings;
rnd = new EGenRandom(EGenRandom.RNG_SEED_BASE_TXN_MIX_GENERATOR );
this.logger = logger;
txnArrayCurrentIndex = 0;
txnArray = null;
}
public CETxnMixGenerator( TDriverCETxnSettings driverCETxnSettings, long RNGSeed, BaseLogger logger ){
this.driverCETxnSettings = driverCETxnSettings;
rnd = new EGenRandom(RNGSeed );
this.logger = logger;
txnArrayCurrentIndex = 0;
txnArray = null;
}
public long getRNGSeed(){
return rnd.getSeed();
}
public void setRNGSeed(long RNGSeed ){
rnd.setSeed( RNGSeed );
}
public void updateTunables( ){
int i;
int BrokerVolumeMixLimit;
int CustomerPositionMixLimit;
int MarketWatchMixLimit;
int SecurityDetailMixLimit;
int TradeLookupMixLimit;
int TradeOrderMixLimit;
int TradeStatusMixLimit;
int TradeUpdateMixLimit;
transactionMixTotalCE = driverCETxnSettings.TxnMixGenerator_settings.cur_BrokerVolumeMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_CustomerPositionMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_MarketWatchMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_SecurityDetailMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_TradeLookupMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_TradeOrderMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_TradeStatusMixLevel +
driverCETxnSettings.TxnMixGenerator_settings.cur_TradeUpdateMixLevel;
TradeStatusMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeStatusMixLevel;
MarketWatchMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_MarketWatchMixLevel + TradeStatusMixLimit;
SecurityDetailMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_SecurityDetailMixLevel + MarketWatchMixLimit;
CustomerPositionMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_CustomerPositionMixLevel + SecurityDetailMixLimit;
TradeOrderMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeOrderMixLevel + CustomerPositionMixLimit;
TradeLookupMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeLookupMixLevel + TradeOrderMixLimit;
TradeUpdateMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_TradeUpdateMixLevel + TradeLookupMixLimit;
BrokerVolumeMixLimit = driverCETxnSettings.TxnMixGenerator_settings.cur_BrokerVolumeMixLevel + TradeUpdateMixLimit;
if (txnArray != null){
txnArray = null;
}
txnArray = new char[transactionMixTotalCE];
for (i = 0; i < TradeStatusMixLimit; ++i){
txnArray[i] = TRADE_STATUS;
}
for (; i < MarketWatchMixLimit; ++i){
txnArray[i] = MARKET_WATCH;
}
for (; i < SecurityDetailMixLimit; ++i){
txnArray[i] = SECURITY_DETAIL;
}
for (; i < CustomerPositionMixLimit; ++i){
txnArray[i] = CUSTOMER_POSITION;
}
for (; i < TradeOrderMixLimit; ++i){
txnArray[i] = TRADE_ORDER;
}
for (; i < TradeLookupMixLimit; ++i){
txnArray[i] = TRADE_LOOKUP;
}
for (; i < TradeUpdateMixLimit; ++i){
txnArray[i] = TRADE_UPDATE;
}
for (; i < BrokerVolumeMixLimit; ++i){
txnArray[i] = BROKER_VOLUME;
}
txnArrayCurrentIndex = 0;
logger.sendToLogger(driverCETxnSettings.TxnMixGenerator_settings);
}
public int generateNextTxnType(){
int threshold = rnd.intRange( txnArrayCurrentIndex, transactionMixTotalCE - 1);
char iTxnType = txnArray[threshold];
txnArray[threshold] = txnArray[txnArrayCurrentIndex];
txnArray[txnArrayCurrentIndex] = iTxnType;
txnArrayCurrentIndex = (txnArrayCurrentIndex + 1) % transactionMixTotalCE;
return iTxnType;
}
public static final int INVALID_TRANSACTION_TYPE = -1;
public static final int SECURITY_DETAIL = 0;
public static final int BROKER_VOLUME = 1;
public static final int CUSTOMER_POSITION = 2;
public static final int MARKET_WATCH = 3;
public static final int TRADE_STATUS = 4;
public static final int TRADE_LOOKUP = 5;
public static final int TRADE_ORDER = 6;
public static final int TRADE_UPDATE = 7;
public static final int MARKET_FEED = 8;
public static final int TRADE_RESULT = 9;
private final TDriverCETxnSettings driverCETxnSettings;
private EGenRandom rnd;
private BaseLogger logger;
private int transactionMixTotalCE;
private int txnArrayCurrentIndex;
private char[] txnArray;
}