synchronized void update(final InputState state) {
		currentState_ = state;
		for (CharacterTime characterTime : state.pressed) {
			Integer value = values.get(characterTime.character);
			if (value != null) {
				for (ControllerListener listener : listeners_) {
					listener.onKeyPressed(value, characterTime.time);
				}
			}
		}
		for (CharacterTime characterTime : state.released) {
			Integer value = values.get(characterTime.character);
			if (value != null) {
				for (ControllerListener listener : listeners_) {
					listener.onKeyReleased(value, characterTime.time);
				}
			}
		}
		for (Character character : state.typed) {
			Integer value = values.get(character);
			if (value != null) {
				for (ControllerListener listener : listeners_) {
					listener.onKeyTyped(value);
				}
			}
		}
	}