private State<O> updateSignature(State<O> state, int idx, State<O> succ) {
        StateSignature<O> sig = state.getSignature();
        if (sig.successors.array[idx] == succ) {
            return state;
        }

        register.remove(sig);
        if (sig.successors.array[idx] != null) {
            sig.successors.array[idx].decreaseIncoming();
        }
        sig.successors.array[idx] = succ;
        succ.increaseIncoming();
        sig.updateHashCode();
        return replaceOrRegister(state);
    }
private State < O > updateSignature ( State < O > state , int idx , State < O > succ ) { StateSignature < O > sig = state . getSignature ( ) ; if ( sig . successors . array [ idx ] == succ ) { return state ; } register . remove ( sig ) ; if ( sig . successors . array [ idx ] != null ) { sig . successors . array [ idx ] . decreaseIncoming ( ) ; } sig . successors . array [ idx ] = succ ; succ . increaseIncoming ( ) ; sig . updateHashCode ( ) ; return replaceOrRegister ( state ) ; }
Update the signature of a state, changing only the successor state of a single transition index.

@param state
the state which's signature to update
@param idx
the transition index to modify
@param succ
the new successor state

@return the resulting state, which can either be the same as the input state (if the new signature is unique), or
the result of merging with another state.