History = function(oHashChanger) {
		var that = this;

		this._iHistoryLength = window.history.length;
		this.aHistory = [];
		this._bIsInitial = true;

		function initHistory(sCurrentHash) {
			if (History._bUsePushState && !History.getInstance()) {
				var oState = window.history.state === null ? {} : window.history.state;

				if (typeof oState === "object") {
					oState.sap = oState.sap ? oState.sap : {};

					if (oState.sap.history && Array.isArray(oState.sap.history) && oState.sap.history[oState.sap.history.length - 1] === sCurrentHash) {
						History._aStateHistory = oState.sap.history;
					} else {
						History._aStateHistory.push(sCurrentHash);
						oState.sap.history = History._aStateHistory;
						window.history.replaceState(oState, window.document.title);
					}
				} else {
					Log.debug("Unable to determine HistoryDirection as history.state is already set: " + window.history.state, "sap.ui.core.routing.History");
				}
			}

			that._reset();
		}

		if (!oHashChanger) {
			future.errorThrows("sap.ui.core.routing.History constructor was called and it did not get a hashChanger as parameter");
		}

		this._setHashChanger(oHashChanger);

		if (oHashChanger._initialized) {
			initHistory(oHashChanger.getHash());
		} else {
			oHashChanger.attachEventOnce("hashChanged", function(oEvent) {
				initHistory(oEvent.getParameter("newHash"));
			});
		}
	}
Used to determine the {@link sap.ui.core.routing.HistoryDirection} of the current or a future navigation,
done with a {@link sap.ui.core.routing.Router} or {@link sap.ui.core.routing.HashChanger}.

<strong>ATTENTION:</strong> this class will not be accurate if someone does hash-replacement without the named classes above.
If you are manipulating the hash directly, this class is not supported anymore.

@param {sap.ui.core.routing.HashChanger} oHashChanger required, without a HashChanger this class cannot work. The class needs to be aware of the hash-changes.
@public
@class
@alias sap.ui.core.routing.History