OccurrenceReference.java
Home
/
src /
main /
java /
br /
ufrgs /
inf /
prosoft /
memoizeit /
OccurrenceReference.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.ufrgs.inf.prosoft.memoizeit;
import br.ufrgs.inf.prosoft.trace.TraceConcrete;
import br.ufrgs.inf.prosoft.trace.Traces;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* @author romulo
*/
public class OccurrenceReference extends Occurrence {
private final int index;
private OccurrenceConcrete occurrenceConcrete;
public OccurrenceReference(int index, String instance, long startTime, long endTime) {
super(instance, startTime, endTime);
this.index = index;
}
@Override
public Object getReturnValue() {
if (this.occurrenceConcrete != null) {
return this.occurrenceConcrete.getReturnValue();
}
TraceConcrete traceConcrete = Traces.getTraceConcrete(this.index);
if (traceConcrete != null && traceConcrete.getReturn() != null) {
return traceConcrete.getReturn().getData();
}
return null;
}
@Override
public List<Parameter> getParameters() {
if (this.occurrenceConcrete != null) {
return this.occurrenceConcrete.getParameters();
}
TraceConcrete traceConcrete = Traces.getTraceConcrete(this.index);
if (traceConcrete != null && traceConcrete.getParameters() != null) {
return traceConcrete.getParameters().stream()
.map(parameter -> new Parameter(parameter.getType(), parameter.getData()))
.collect(Collectors.toList());
}
return new ArrayList<>();
}
@Override
public OccurrenceConcrete getConcrete() {
TraceConcrete traceConcrete = Traces.getTraceConcrete(this.index);
Object returnValue = null;
List<Parameter> parameters = new ArrayList<>();
if (traceConcrete != null) {
returnValue = traceConcrete.getReturn().getData();
parameters = traceConcrete.getParameters().stream()
.map(parameter -> new Parameter(parameter.getType(), parameter.getData()))
.collect(Collectors.toList());
}
return new OccurrenceConcrete(getInstance(), returnValue, parameters, getStartTime(), getEndTime());
}
@Override
public OccurrenceConcrete loadConcrete() {
this.occurrenceConcrete = getConcrete();
return this.occurrenceConcrete;
}
public OccurrenceReference cleanConcrete() {
this.occurrenceConcrete = null;
return this;
}
}