示例#1
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
        internal void AddTask(Node downNode, PointerToNode ptrUpNode)
        {
            ObjectHashtable objHash;
            MemoSpecState   memo = this.state.Memorize(this.varsHash, out objHash);

            this.AddTask(downNode, new Data(memo, objHash, ptrUpNode));
        }
示例#2
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
        private void getUpNode(Node downNode, MemoSpecState memo, out Variable[] vars1, out Node upNode, out Variable[] vars2)
        {
            NodeAndVariables nodeVars = this.getUpNodes(downNode)[memo.MemoState] as NodeAndVariables;

            if (nodeVars == null)
            {
                vars1  = null;
                upNode = null;
                vars2  = null;
            }
            else
            {
                vars1  = memo.Variables;
                upNode = nodeVars.Node;
                vars2  = nodeVars.Variables;
            }
        }
示例#3
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
        protected override void DispatchNode(Node downNode, object o)
        {
            Data          data      = o as Data;
            MemoSpecState memo      = data.MemoSpecState;
            PointerToNode ptrUpNode = data.PointerToNode;

            this.state.Recall(memo, data.ObjectHashtable);

            BTType btType = Annotation.GetNodeBTType(downNode);

            if (btType == BTType.Static)
            {
                Node nextDownNode = this.state.InterpretNode(downNode);
                this.AddTask(nextDownNode, ptrUpNode);
            }
            else
            {
                Variable[] vars1;
                Node       upNode;
                Variable[] vars2;
                this.getUpNode(downNode, memo, out vars1, out upNode, out vars2);
                if (upNode != null)
                {
                    SpecializingVisitor.createSubstitution(vars2, vars1, ptrUpNode, upNode);
                }
                else if (btType == BTType.eXclusive)
                {
                    this.CallVisitorMethod(downNode, data);
                }
                else
                {
                    upNode = ptrUpNode.Node = downNode.Clone();
                    for (int i = 0; i < downNode.NextArray.Count; i++)
                    {
                        this.AddTask(downNode.NextArray[i], new PointerToNode(upNode, i));
                    }
                }
            }

            if (ptrUpNode.Node != null)
            {
                this.setUpAndDownNode(downNode, memo, ptrUpNode.Node);
            }
        }
示例#4
0
文件: Spec.cs 项目: DragonXYZ/cilpe
 internal void Recall(MemoSpecState memo, ObjectHashtable objHash)
 {
     this.state.Recall(memo.MemoState, objHash);
 }
示例#5
0
文件: Spec.cs 项目: DragonXYZ/cilpe
 internal Data(MemoSpecState memo, ObjectHashtable objHash, PointerToNode ptrUpNode)
 {
     this.MemoSpecState = memo;
     this.ObjectHashtable = objHash;
     this.PointerToNode = ptrUpNode;
 }
示例#6
0
文件: Spec.cs 项目: DragonXYZ/cilpe
 private void setUpAndDownNode(Node downNode, MemoSpecState memo, Node upNode)
 {
     this.getUpNodes(downNode)[memo.MemoState] = new NodeAndVariables(upNode, memo.Variables);
 }
示例#7
0
文件: Spec.cs 项目: DragonXYZ/cilpe
 private void getUpNode(Node downNode, MemoSpecState memo, out Variable[] vars1, out Node upNode, out Variable[] vars2)
 {
     NodeAndVariables nodeVars = this.getUpNodes(downNode)[memo.MemoState] as NodeAndVariables;
     if (nodeVars == null)
     {
         vars1 = null;
         upNode = null;
         vars2 = null;
     }
     else
     {
         vars1 = memo.Variables;
         upNode = nodeVars.Node;
         vars2 = nodeVars.Variables;
     }
 }
示例#8
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
 private void setUpAndDownNode(Node downNode, MemoSpecState memo, Node upNode)
 {
     this.getUpNodes(downNode)[memo.MemoState] = new NodeAndVariables(upNode, memo.Variables);
 }
示例#9
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
 internal Data(MemoSpecState memo, ObjectHashtable objHash, PointerToNode ptrUpNode)
 {
     this.MemoSpecState   = memo;
     this.ObjectHashtable = objHash;
     this.PointerToNode   = ptrUpNode;
 }
示例#10
0
文件: Spec.cs 项目: PlumpMath/cilpe-1
 internal void Recall(MemoSpecState memo, ObjectHashtable objHash)
 {
     this.state.Recall(memo.MemoState, objHash);
 }