Files
DRAMSys/analyzer/analyzer/businessObjects/phases/phasefactory.cpp
2014-07-10 11:16:16 +02:00

46 lines
2.8 KiB
C++

#include "phasefactory.h"
#include <exception>
#include "phase.h"
#include "businessObjects/transaction.h"
#include "data/tracedb.h"
#include "businessObjects/timespan.h"
using namespace std;
shared_ptr<Phase> PhaseFactory::CreatePhase(ID id, const QString& dbPhaseName,const Timespan& span, const shared_ptr<Transaction>& trans, TraceDB& database)
{
traceTime clk = database.getGeneralInfo().clkPeriod;
if(dbPhaseName == "REQ")
return shared_ptr<Phase>(new REQ(id, span,trans,{},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "RESP")
return shared_ptr<Phase>(new RESP(id, span,trans,{},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "PRE")
return shared_ptr<Phase>(new PRE(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "ACT")
return shared_ptr<Phase>(new ACT(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "PRE_ALL")
return shared_ptr<Phase>(new PRECHARGE_ALL(id,span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "AUTO_REFRESH")
return shared_ptr<Phase>(new AUTO_REFRESH(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "RD")
return shared_ptr<Phase>(new RD(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
else if(dbPhaseName == "RDA")
return shared_ptr<Phase>(new RDA(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
else if(dbPhaseName == "WR")
return shared_ptr<Phase>(new WR(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
else if(dbPhaseName == "WRA")
return shared_ptr<Phase>(new WRA(id, span,trans,{Timespan(span.Begin(),span.Begin()+clk)},std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
else if(dbPhaseName == "SREF")
return shared_ptr<Phase>(new SREF(id, span, trans,{Timespan(span.Begin(),span.Begin()+clk),Timespan(span.End()-clk,span.End())},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "PDNA")
return shared_ptr<Phase>(new PDNA(id, span,trans, {Timespan(span.Begin(),span.Begin()+clk),Timespan(span.End()-clk,span.End())},std::shared_ptr<Timespan>()));
else if(dbPhaseName == "PDNP")
return shared_ptr<Phase>(new PDNP(id, span,trans, {Timespan(span.Begin(),span.Begin()+clk),Timespan(span.End()-clk,span.End())},std::shared_ptr<Timespan>()));
else
throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");
}