Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Algorithms.PushGP/Expressions/Templates/PushResultExpressionTemplate.cs @ 14328

Last change on this file since 14328 was 14328, checked in by pkimmesw, 8 years ago

#2665 Set .NET version to 4.5, C# version to 5.0, Added expression templates and factory

File size: 1.5 KB
Line 
1using System;
2using HeuristicLab.Algorithms.PushGP.Interpreter;
3using HeuristicLab.Algorithms.PushGP.Stack;
4
5namespace HeuristicLab.Algorithms.PushGP.Expressions.Templates
6{
7    public class PushResultExpressionTemplate<T, R> : ExpressionTemplate
8    {
9        private readonly Func<IInterpreter, IStack<T>> sourceStackProvider;
10        private readonly Func<IInterpreter, IStack<R>> targetStackProvider;
11        private readonly Func<T[], R> templateFunc;
12        private readonly bool isCodeOp;
13        public PushResultExpressionTemplate(string symbol, Func<IInterpreter, IStack<T>> sourceStackProvider, Func<IInterpreter, IStack<R>> targetSourceProvider, Func<T[], R> templateFunc, bool isCodeOp = false) : base(symbol)
14        {
15            this.sourceStackProvider = sourceStackProvider;
16            this.targetStackProvider = targetSourceProvider;
17            this.templateFunc = templateFunc;
18
19            this.isCodeOp = isCodeOp;
20        }
21
22        public override bool IsCodeOp { get { return this.isCodeOp; } }
23
24        public override void Eval(IInterpreter interpreter)
25        {
26            var sourceStack = this.sourceStackProvider(interpreter);
27
28            // not enough arguments on stack
29            if (sourceStack.Count < 2)
30                return;
31
32            var targetStack = this.targetStackProvider(interpreter);
33
34            var values = sourceStack.Pop(2);
35            var result = this.templateFunc(values);
36
37            targetStack.Push(result);
38        }
39    }
40}
Note: See TracBrowser for help on using the repository browser.