Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/VectorLastExpressions.cs @ 14834

Last change on this file since 14834 was 14834, checked in by pkimmesw, 7 years ago

#2665 LexicaseSelector, Performance improvements, UI Fixes, Debugger only shows used stacks, fixed Debugger stepping, Added vector expressions, ERCOptions,

File size: 2.0 KB
Line 
1using System.Collections.Generic;
2
3namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
4  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
5  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
6  using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
7
8  /// <summary>
9  /// Gets the last item from the type stack
10  /// </summary>
11  /// <typeparam name="T"></typeparam>
12  public abstract class VectorLastExpression<T> : StatelessExpression {
13    protected bool Eval(IPushStack<List<T>> vectorStack, IPushStack<T> literalStack) {
14      if (vectorStack.IsEmpty || vectorStack.Top.Count == 0) return false;
15
16      var vector = vectorStack.Pop();
17      literalStack.Push(vector[vector.Count - 1]);
18      return true;
19    }
20  }
21
22  [PushExpression(StackTypes.IntegerVector, "INTEGER[].LAST", StackTypes.Integer)]
23  public class IntegerVectorLastExpression : VectorLastExpression<long> {
24    public override bool Eval(IInternalPushInterpreter interpreter) {
25      return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
26    }
27  }
28
29  [PushExpression(StackTypes.FloatVector, "FLOAT[].LAST", StackTypes.Float)]
30  public class FloatVectorLastExpression : VectorLastExpression<double> {
31    public override bool Eval(IInternalPushInterpreter interpreter) {
32      return Eval(interpreter.FloatVectorStack, interpreter.FloatStack);
33    }
34  }
35
36  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].LAST", StackTypes.Boolean)]
37  public class BooleanVectorLastExpression : VectorLastExpression<bool> {
38    public override bool Eval(IInternalPushInterpreter interpreter) {
39      return Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
40    }
41  }
42
43  [PushExpression(StackTypes.StringVector, "STRING[].LAST", StackTypes.String)]
44  public class StringVectorLastExpression : VectorLastExpression<string> {
45    public override bool Eval(IInternalPushInterpreter interpreter) {
46      return Eval(interpreter.StringVectorStack, interpreter.StringStack);
47    }
48  }
49}
50
Note: See TracBrowser for help on using the repository browser.