@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; }
@Override public void serialize(NFA<T> record, DataOutputView target) throws IOException { serializeStates(record.states, target); target.writeLong(record.windowTime); target.writeBoolean(record.handleTimeout); sharedBufferSerializer.serialize(record.eventSharedBuffer, target); target.writeInt(record.computationStates.size()); StringSerializer stateNameSerializer = StringSerializer.INSTANCE; LongSerializer timestampSerializer = LongSerializer.INSTANCE; DeweyNumber.DeweyNumberSerializer versionSerializer = new DeweyNumber.DeweyNumberSerializer(); for (ComputationState<T> computationState: record.computationStates) { stateNameSerializer.serialize(computationState.getState().getName(), target); stateNameSerializer.serialize(computationState.getPreviousState() == null ? null : computationState.getPreviousState().getName(), target); timestampSerializer.serialize(computationState.getTimestamp(), target); versionSerializer.serialize(computationState.getVersion(), target); timestampSerializer.serialize(computationState.getStartTimestamp(), target); target.writeInt(computationState.getCounter()); if (computationState.getEvent() == null) { target.writeBoolean(false); } else { target.writeBoolean(true); eventSerializer.serialize(computationState.getEvent(), target); } } }
DeweyNumber.DeweyNumberSerializer versionSerializer = new DeweyNumber.DeweyNumberSerializer();
public SharedBufferSerializer( TypeSerializer<K> keySerializer, TypeSerializer<V> valueSerializer) { this(keySerializer, valueSerializer, new DeweyNumber.DeweyNumberSerializer()); }