private TrieNode GetOrCreateNextState(TrieNode node, char c) { TransitionTarget transitionTarget; var transition = new TransitionKey(node.NodeId, c); if (!transitions.TryGetValue(transition, out transitionTarget)) { var newNode = AddNode(node, c); // Creating new outgoing edge and store character corresponding to // existing outgoing edge (this way outgoing edges for single vertex form a linked list) transitionTarget = new TransitionTarget(newNode.NodeId, node.FirstOutgointChar); // Updating reference to top of linked list of node.UpdateOutgoingChar(c); transitions.Add(transition, transitionTarget); return(newNode); } return(nodes[transitionTarget.NextNodeId]); }
// Create new transition. Checks if valid transition target private void CreateTransition(GameObject from, GameObject to) { // Check if valid transition target TransitionTarget transitionTarget = to.GetComponent <TransitionTarget>(); if (transitionTarget == null) { Debug.Log("Object " + to.GetHashCode() + " is not a valid transition target"); return; } // Create transition GameObject transitionObject = Instantiate(arrowPrefab); transitionObject.GetComponent <Transition>().SetTransition(from, to); transitionObject.transform.parent = arrowRoot.transform; transitions.Add(transitionObject.GetComponent <Transition>()); }