// Path: src/main/resources/super/java/util/concurrent/locks/Lock.java
// public interface Lock {
//     void lock();
//     void unlock();
// }


import java.util.concurrent.locks.Lock;
package se.fearless.fettle;


public interface StateMachineTemplate<S, E, C> {
	/**
	 * Creates a new state machine using the transition model as a template
	 * @param init the state the machine will be in when created
	 * @return a new state machine with the transitions and actions defined in this model
	 */
	StateMachine<S, E, C> newStateMachine(S init);

// Path: src/main/resources/super/java/util/concurrent/locks/Lock.java
// public interface Lock {
//     void lock();
//     void unlock();
// }


// Path: src/main/java/se/fearless/fettle/StateMachineTemplate.java
import java.util.concurrent.locks.Lock;

package se.fearless.fettle;


public interface StateMachineTemplate<S, E, C> {
	/**
	 * Creates a new state machine using the transition model as a template
	 * @param init the state the machine will be in when created
	 * @return a new state machine with the transitions and actions defined in this model
	 */
	StateMachine<S, E, C> newStateMachine(S init);

	StateMachine<S, E, C> newStateMachine(S init, Lock lock);