@Override
public NFA<T> deserialize(DataInputView source) throws IOException {
Set<State<T>> states = deserializeStates(source);
long windowTime = source.readLong();
boolean handleTimeout = source.readBoolean();
NFA<T> nfa = new NFA<>(eventSerializer, windowTime, handleTimeout);
nfa.states = states;
nfa.eventSharedBuffer = sharedBufferSerializer.deserialize(source);
Queue<ComputationState<T>> computationStates = new LinkedList<>();
StringSerializer stateNameSerializer = StringSerializer.INSTANCE;
LongSerializer timestampSerializer = LongSerializer.INSTANCE;
DeweyNumber.DeweyNumberSerializer versionSerializer = new DeweyNumber.DeweyNumberSerializer();
int computationStateNo = source.readInt();
for (int i = 0; i < computationStateNo; i++) {
State<T> state = getStateByName(stateNameSerializer.deserialize(source), nfa);
State<T> prevState = getStateByName(stateNameSerializer.deserialize(source), nfa);
long timestamp = timestampSerializer.deserialize(source);
DeweyNumber version = versionSerializer.deserialize(source);
long startTimestamp = timestampSerializer.deserialize(source);
int counter = source.readInt();
T event = null;
if (source.readBoolean()) {
event = eventSerializer.deserialize(source);
}
computationStates.add(ComputationState.createState(
nfa, state, prevState, event, counter, timestamp, version, startTimestamp));
}
nfa.computationStates = computationStates;
return nfa;
}