#pragma once

typedef struct state State;
typedef struct state_machine StateMachine;
typedef State *(StateFunc)(StateMachine *sm, void *event_data);
typedef void NoEventData;

struct state {
	StateFunc *state_func;
};

struct state_machine {
	State *current_state;
};

void sm_run(StateMachine *sm, void *event_data);