/// <summary> /// Метод резолюции узлов /// </summary> /// <param name="code"></param> /// <param name="cached"></param> /// <returns></returns> public Node ResolveNode(string code, bool cached = true) { if (null != Parent) { return(Parent.ResolveNode(code)); } var __code = DotLanguageUtils.EscapeCode(code); if (cached && _nodeResolutionCache.ContainsKey(__code)) { return(_nodeResolutionCache[__code]); } var resolved = EnumerateNodes().FirstOrDefault(_ => _.Code == __code); if (cached && null != resolved) { _nodeResolutionCache[__code] = resolved; } return(resolved); }
/// <summary> /// Метод резолюции узлов /// </summary> /// <returns></returns> public Edge[] ResolveEdges(string from, string to, bool cached = true) { if (null != Parent) { return(Parent.ResolveEdges(from, to)); } var __from = DotLanguageUtils.EscapeCode(from); var __to = DotLanguageUtils.EscapeCode(to); var key = from + "->" + to; if (cached && _edgeResolutionCache.ContainsKey(key)) { return(_edgeResolutionCache[key]); } var resolved = EnumerateEdges().Where(_ => _.From == __from && _.To == __to).ToArray(); if (cached) { _edgeResolutionCache[key] = resolved; } return(resolved); }