/// <summary> /// 여기서 중요한게 수정할때를 따로 판단하지 못하기 때문에(deserialize할떄마다 호출) /// 매번 호출되면서 수정될때, 새로 등록될때, 등등을 전부 판단해서 처리 해야함. /// </summary> /// <param name="target"></param> public void RegisterString(GNString target) { foreach (var pair in allInstanceDic) { if (pair.Value.Contains(target)) { if (target.id != pair.Key) { //이미 등록이 되어 있는데 재등록을 하는데 키가 다르다면..(복잡하네;;) var oldKey = pair.Key; if (allInstanceDic[oldKey].Count == 1) { allInstanceDic.Remove(oldKey); allWords.Remove(oldKey); } else { allInstanceDic[oldKey].Remove(target); foreach (var u in allInstanceDic[oldKey]) { u.stringList[0] = u.id; allWords[oldKey][0] = u.id; } } if (!allWords.ContainsKey(target.id)) { ///리스트가 이미 공유되어 있어서 분열되어야할때임. var makeList = new List<string>(); makeList.AddRange(target.stringList); makeList[0] = target.id; target.stringList = makeList; } else { target.stringList = allWords[target.id]; } break;// return;//종료 이미 등록되어 있었기 때문에 } } } if (allWords.ContainsKey(target.id)) { //이미 target.stringList = allWords[target.id]; } else { allWords.Add(target.id, target.stringList); } if (!allInstanceDic.ContainsKey(target.id)) allInstanceDic.Add(target.id, new List<GNString>()); if (!allInstanceDic[target.id].Contains(target)) { allInstanceDic[target.id].Add(target); } }
//이게 파괴자에서 호출이 될까...?// public void ReleaseString(GNString target) { foreach (var pair in allInstanceDic) { if (pair.Value.Contains(target)) { if(pair.Value.Count == 1) { allInstanceDic.Remove(pair.Key); allWords.Remove(pair.Key); } else { pair.Value.Remove(target); } return; } } }