package php.runtime.loader.dump;
import php.runtime.env.Context;
import php.runtime.env.Environment;
import php.runtime.loader.dump.io.DumpException;
import php.runtime.loader.dump.io.DumpInputStream;
import php.runtime.loader.dump.io.DumpOutputStream;
import php.runtime.reflection.ParameterEntity;
import php.runtime.reflection.helper.GeneratorEntity;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class GeneratorDumper extends Dumper<GeneratorEntity> {
protected final ClassDumper classDumper;
protected ParameterDumper parameterDumper = new ParameterDumper(context, env, debugInformation);
public GeneratorDumper(Context context, Environment env, boolean debugInformation) {
super(context, env, debugInformation);
classDumper = new ClassDumper(context, null, env, debugInformation);
}
@Override
public int getType() {
return Types.GENERATOR;
}
@Override
public void setIncludeData(boolean includeData) {
super.setIncludeData(includeData);
classDumper.setIncludeData(includeData);
}
@Override
public void save(GeneratorEntity entity, OutputStream output) throws IOException {
classDumper.save(entity, output);
DumpOutputStream printer = new DumpOutputStream(output);
printer.writeBoolean(entity.isReturnReference());
printer.writeInt(entity.parameters == null ? 0 : entity.parameters.length);
if (entity.parameters != null) {
for (ParameterEntity param : entity.parameters) {
parameterDumper.save(param, output);
}
}
}
@Override
public GeneratorEntity load(InputStream input) throws IOException {
GeneratorEntity entity = classDumper.load(input, GeneratorEntity.class);
DumpInputStream data = new DumpInputStream(input);
entity.setReturnReference(data.readBoolean());
int paramCount = data.readInt();
if (paramCount < 0)
throw new DumpException("Invalid param count");
entity.parameters = new ParameterEntity[paramCount];
for(int i = 0; i < paramCount; i++){
ParameterEntity param = parameterDumper.load(input);
param.setTrace(entity.getTrace());
entity.parameters[i] = param;
}
return entity;
}
}