Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }