/// <summary>
 ///
 /// </summary>
 /// <param name="quantumProcessor">An instance of a class implementing <see cref="IQuantumProcessor"/> interface to be wrapped. If the parameter is null <see cref="QuantumProcessorBase"/> is used.</param>
 /// <param name="qubitManager">An instance of a class implementing <see cref="IQubitManager"/> interface. If the parameter is null <see cref="QubitManagerTrackingScope"/> is used.</param>
 /// <param name="randomSeed">A seed to be used by Q# <a href="https://docs.microsoft.com/qsharp/api/qsharp/microsoft.quantum.intrinsic.random">Microsoft.Quantum.Intrinsic.Random</a> operation.</param>
 public QuantumProcessorDispatcher(IQuantumProcessor?quantumProcessor = null, IQubitManager?qubitManager = null, int?randomSeed = null)
     : base(qubitManager ?? new QubitManagerTrackingScope(PreallocatedQubitCount, mayExtendCapacity: true, disableBorrowing: false))
 {
     random            = new System.Random(randomSeed == null ? DateTime.Now.Millisecond : randomSeed.Value);
     QuantumProcessor  = quantumProcessor ?? new QuantumProcessorBase();
     OnOperationStart += QuantumProcessor.OnOperationStart;
     OnOperationEnd   += QuantumProcessor.OnOperationEnd;
     OnFail           += QuantumProcessor.OnFail;
     OnLog            += QuantumProcessor.OnMessage;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="quantumProcessor">An instance of a class implementing <see cref="IQuantumProcessor"/> interface to be wrapped.</param>
 /// <param name="qubitManager">An instance of a class implementing <see cref="IQubitManager"/> interface. If the parameter is null <see cref="QubitManager"/> is used.</param>
 /// <param name="randomSeed">A seed to be used by Q# <a href="https://docs.microsoft.com/qsharp/api/qsharp/microsoft.quantum.intrinsic.random">Microsoft.Quantum.Intrinsic.Random</a> operation.</param>
 public QuantumProcessorDispatcher(IQuantumProcessor quantumProcessor, IQubitManager?qubitManager = null, int?randomSeed = null)
     : base(
         qubitManager ?? new QubitManager(
             PreallocatedQubitCount,
             mayExtendCapacity: true, disableBorrowing: false
             ),
         randomSeed
         )
 {
     QuantumProcessor  = quantumProcessor;
     OnOperationStart += QuantumProcessor.OnOperationStart;
     OnOperationEnd   += QuantumProcessor.OnOperationEnd;
     OnFail           += QuantumProcessor.OnFail;
     OnLog            += QuantumProcessor.OnMessage;
 }