use of il.ac.bgu.cs.bp.bpjs.model.BThreadSyncSnapshot in project BPjs by bThink-BGU.
the class BProgramSyncSnapshotIO method deserialize.
public BProgramSyncSnapshot deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
try {
Context ctxt = ContextFactory.getGlobal().enterContext();
// must use interpreter mode
ctxt.setOptimizationLevel(-1);
final ScriptableObject globalScope = ctxt.initStandardObjects();
try (ScriptableInputStream sis = new ScriptableInputStream(new ByteArrayInputStream(bytes), globalScope)) {
Header header = (Header) sis.readObject();
Set<BThreadSyncSnapshot> bthreads = new HashSet<>(header.bthreadCount);
for (int i = 0; i < header.bthreadCount; i++) {
bthreads.add(readBThreadSnapshot(sis, globalScope));
}
List<BEvent> events = new ArrayList<>(header.externalEventCount);
for (int i = 0; i < header.externalEventCount; i++) {
events.add((BEvent) sis.readObject());
}
return new BProgramSyncSnapshot(bprogram, bthreads, events, header.fa);
}
} finally {
Context.exit();
}
}
use of il.ac.bgu.cs.bp.bpjs.model.BThreadSyncSnapshot in project BPjs by bThink-BGU.
the class BProgramSyncSnapshotIO method serialize.
public byte[] serialize(BProgramSyncSnapshot bpss) throws IOException {
try {
// need Javascript environment for
Context ctxt = Context.enter();
// this, even though we're not
// executing code per se.
final ScriptableObject globalScope = ctxt.initStandardObjects();
try (ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream outs = new ObjectOutputStream(bytes)) {
outs.writeObject(new Header(bpss.getBThreadSnapshots().size(), bpss.getExternalEvents().size(), bpss.getFailedAssertion()));
for (BThreadSyncSnapshot bss : bpss.getBThreadSnapshots()) {
writeBThreadSnapshot(bss, outs, globalScope);
}
for (BEvent ee : bpss.getExternalEvents()) {
outs.writeObject(ee);
}
outs.flush();
return bytes.toByteArray();
}
} finally {
Context.exit();
}
}
use of il.ac.bgu.cs.bp.bpjs.model.BThreadSyncSnapshot in project BPjs by bThink-BGU.
the class BProgramSyncSnapshotIO method readBThreadSnapshot.
private BThreadSyncSnapshot readBThreadSnapshot(ScriptableInputStream sis, ScriptableObject scope) throws IOException, ClassNotFoundException {
String name = (String) sis.readObject();
byte[] contBytes = (byte[]) sis.readObject();
final BThreadJsProxy btProxy = new BThreadJsProxy();
final BProgramJsProxy bpProxy = new BProgramJsProxy(bprogram);
StubProvider stubPrv = (StreamObjectStub stub) -> {
if (stub == StreamObjectStub.BP_PROXY) {
return bpProxy;
}
if (stub == StreamObjectStub.BT_PROXY) {
return btProxy;
}
throw new IllegalArgumentException("Unknown stub " + stub);
};
try (ByteArrayInputStream inBytes = new ByteArrayInputStream(contBytes);
BThreadSyncSnapshotInputStream bssis = new BThreadSyncSnapshotInputStream(inBytes, scope, stubPrv)) {
Scriptable btScope = (Scriptable) bssis.readObject();
Function entryPoint = (Function) bssis.readObject();
Function interruptHandler = (Function) bssis.readObject();
BSyncStatement stmt = (BSyncStatement) bssis.readObject();
Object cont = bssis.readObject();
final BThreadSyncSnapshot bThreadSyncSnapshot = new BThreadSyncSnapshot(name, entryPoint, interruptHandler, btScope, cont, stmt);
btProxy.setBThread(bThreadSyncSnapshot);
return bThreadSyncSnapshot;
}
}
Aggregations