public void AddTran(StateTransition trans) { //step1. check conflict LogManager.Assert(!_check_conflict(trans), "new trans conflict with other trans"); //step2. add //condition a : single transition if (trans is ST_Single) { ST_Single single_tran = trans as ST_Single; _single_tran_set.Add(single_tran); _add_single_tran(single_tran); } //condition b : group transition else if (trans is ST_Group) { ST_Group group_tran = trans as ST_Group; _group_tran_set.Add(group_tran); foreach (var single_tran in group_tran.trans_list) { _add_single_tran(single_tran); } } else { LogManager.Error("AddTran : transition type [{0}] unhandled", trans.GetType()); } }
public void RemoveTran(StateTransition trans) { if (trans is ST_Single) { ST_Single single_tran = trans as ST_Single; //remove from set LogManager.Assert(_single_tran_set.Contains(single_tran), "RemoveTran Error11"); _single_tran_set.Remove(single_tran); //remove from map _remove_single_tran(single_tran); } else if (trans is ST_Group) { ST_Group group_tran = trans as ST_Group; //remove from set LogManager.Assert(_group_tran_set.Contains(group_tran), "RemoveTran Error22"); _group_tran_set.Remove(group_tran); //remove from map foreach (var st_single in group_tran.trans_list) { _remove_single_tran(st_single); } } else { LogManager.Error("Remove Tran : transition type [{0}] unhandled", trans.GetType()); } }