Introduce IdentifierManager to improve PDT evaluator performance.
This commit is contained in:
@@ -50,43 +50,38 @@ namespace Cryville.Common.Pdt {
|
||||
}
|
||||
}
|
||||
public class PushVariable : PdtInstruction {
|
||||
private string m_name;
|
||||
public string Name { get { return m_name; } }
|
||||
public int Name { get; private set; }
|
||||
public PushVariable(string name) {
|
||||
m_name = name;
|
||||
Name = IdentifierManager.SharedInstance.Request(name);
|
||||
}
|
||||
internal override void Execute(PdtEvaluatorBase etor) {
|
||||
etor.PushVariable(ref m_name);
|
||||
etor.PushVariable(Name);
|
||||
}
|
||||
public override string ToString() {
|
||||
return string.Format("pushv {0}", Name);
|
||||
}
|
||||
}
|
||||
public class Operate : PdtInstruction {
|
||||
private string m_name;
|
||||
public string Name { get { return m_name; } }
|
||||
public int ParamCount { get; private set; }
|
||||
public PdtOperatorSignature Signature { get; private set; }
|
||||
public Operate(string name, int paramCount) {
|
||||
m_name = name;
|
||||
ParamCount = paramCount;
|
||||
Signature = new PdtOperatorSignature(name, paramCount);
|
||||
}
|
||||
internal override void Execute(PdtEvaluatorBase etor) {
|
||||
etor.Operate(ref m_name, ParamCount);
|
||||
etor.Operate(Signature);
|
||||
}
|
||||
public override string ToString() {
|
||||
return string.Format("op {0}({1})", Name, ParamCount);
|
||||
return string.Format("op {0}", Signature);
|
||||
}
|
||||
}
|
||||
public class Collapse : PdtInstruction {
|
||||
private string m_name;
|
||||
public string Name { get { return m_name; } }
|
||||
public int Name { get; private set; }
|
||||
public LinkedListNode<PdtInstruction> Target { get; internal set; }
|
||||
public Collapse(string name, LinkedListNode<PdtInstruction> target) {
|
||||
m_name = name;
|
||||
Name = IdentifierManager.SharedInstance.Request(name);
|
||||
Target = target;
|
||||
}
|
||||
internal override void Execute(PdtEvaluatorBase etor) {
|
||||
etor.Collapse(ref m_name, Target);
|
||||
etor.Collapse(Name, Target);
|
||||
}
|
||||
public override string ToString() {
|
||||
return string.Format("col {0}{{{1}}}", Name, Target.Value);
|
||||
|
Reference in New Issue
Block a user