private void Add(TransitionTable table, IState source, ITransition transition)
            {
                if (!table._transitions.TryGetValue(source, out var transitions))
                {
                    transitions = new List <ITransition>();
                    table._transitions.Add(source, transitions);
                }

                transitions.Add(transition);
            }
            /// <summary>
            /// TODO
            /// </summary>
            public TransitionTable Build()
            {
                //find all the submitted states (needed for AnyTransition)
                foreach (var t in _collections)
                {
                    _allStates.UnionWith(t.States);
                }

                var table = new TransitionTable();

                foreach (var collection in _collections)
                {
                    foreach (var transition in collection)
                    {
                        Add(table, transition.Source, transition.Transition);
                    }
                }

                return(table);
            }