コード例 #1
0
ファイル: CompilerServices.cs プロジェクト: jpbruyere/Crow
        /// <summary>
        /// Gets the node adress from binding expression splitted with '/' starting at a given node
        /// </summary>
        public static NodeAddress getNodeAdressFromBindingExp(NodeAddress sourceAddr, string[] bindingExp)
        {
            int ptr = sourceAddr.Count - 1;

            //if exp start with '/' => Graphic tree parsing start at source
            if (string.IsNullOrEmpty (bindingExp [0])) {
                //TODO:
            } else if (bindingExp [0] == ".") { //search template root
                ptr--;
                while (ptr >= 0) {
                    if (typeof(TemplatedControl).IsAssignableFrom (sourceAddr [ptr].CrowType))
                        break;
                    ptr--;
                }
            } else if (bindingExp [0] == "..") { //search starting at current node
                int levelUp = bindingExp.Length - 1;
                if (levelUp > ptr + 1)
                    throw new Exception ("Binding error: try to bind outside IML source");
                ptr -= levelUp;
            }
            //TODO:change Template special address identified with Nodecount = 0 to something not using array count to 0,
            //here linq is working without limits checking in compile option
            //but defining a 0 capacity array with limits cheking enabled, cause 'out of memory' error
            return new NodeAddress (sourceAddr.Take(ptr+1).ToArray());//[ptr+1];
            //Array.Copy (sourceAddr.ToArray (), targetNode, ptr + 1);
            //return new NodeAddress (targetNode);
        }