public StateChangedEventArgs(TStateCode oldState, TStateCode newState, ulong stateChangeCount, DateTime?ts = null) { TimeStamp = ts ?? TimeStampSource.Now; OldState = oldState; NewState = newState; StateChangeCount = stateChangeCount; _stringRep = new LocklessLazyWriteOnce <string>(() => $"At [{TimeStamp:O}], the state (change# {StateChangeCount}) changed from [{OldState.ToString()}] to [{NewState.ToString()}]."); }
private TransitionPredicateTrueEventArgs(TStateCode origin, int priority, [NotNull] string name, [NotNull] string predText, ImmutableArray <TStateCode> destinations) { _timeStamp = TimeStampSource.Now; _priority = priority; _originState = origin; _predicateText = predText ?? throw new ArgumentNullException(nameof(predText)); _destinationStates = destinations; _transitionName = name ?? throw new ArgumentNullException(nameof(predText)); _stringRep = new LocklessLazyWriteOnce <string>(GetStringRep); }
protected StateMachineStateBase(TStateCode code, [NotNull] TFlagVault flagVault, [NotNull] IEventRaiser raiser) { if (!code.IsValueDefined()) { throw new ArgumentException($"The enum value [{code}] is not defined.", nameof(code)); } if (raiser == null) { throw new ArgumentNullException(nameof(raiser)); } if (!raiser.ThreadActive || raiser.IsDisposed) { throw new ArgumentException("The event raiser is disposed or faulted.", nameof(raiser)); } _raiser = raiser; _transitionTable = new LocklessLazyWriteOnce <ImmutableSortedSet <TStateTransition> >(InitTransitionTable); FlagVault = flagVault ?? throw new ArgumentNullException(nameof(flagVault)); _concreteType = new LocklessConcreteType(this); StateCode = code; }
TTaskResult, TStateType, TStateCodeBacker, TStateTransition, TFlagVault> PerformGetNextState(TStateCode code);