Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CharExpressions.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.8 KB
Line 
1namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
2  using System;
3
4  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
5  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
6  using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
7
8  [PushExpression(StackTypes.Char, "CHAR.ISWHITESPACE", StackTypes.Boolean)]
9  public class CharIsWhitespaceExpression : StatelessExpression {
10    public override bool Eval(IInternalPushInterpreter interpreter) {
11      if (interpreter.CharStack.IsEmpty) return false;
12
13      var c = interpreter.CharStack.Pop();
14      interpreter.BooleanStack.Push(char.IsWhiteSpace(c));
15      return true;
16    }
17  }
18
19  [PushExpression(StackTypes.Char, "CHAR.ISLETTER", StackTypes.Boolean)]
20  public class CharIsLetterExpression : StatelessExpression {
21    public override bool Eval(IInternalPushInterpreter interpreter) {
22      if (interpreter.CharStack.IsEmpty) return false;
23
24      var c = interpreter.CharStack.Pop();
25      interpreter.BooleanStack.Push(char.IsLetter(c));
26      return true;
27    }
28  }
29
30  [PushExpression(StackTypes.Char, "CHAR.ISDIGIT", StackTypes.Boolean)]
31  public class CharIsDigitExpression : StatelessExpression {
32    public override bool Eval(IInternalPushInterpreter interpreter) {
33      if (interpreter.CharStack.IsEmpty) return false;
34
35      var c = interpreter.CharStack.Pop();
36      interpreter.BooleanStack.Push(char.IsDigit(c));
37      return true;
38    }
39  }
40
41  [PushExpression(StackTypes.Char, "CHAR.FROMINTEGER", StackTypes.Integer)]
42  public class CharFromIntegerExpression : StatelessExpression {
43    public override bool Eval(IInternalPushInterpreter interpreter) {
44      if (interpreter.IntegerStack.IsEmpty) return false;
45
46      var value = (int)Math.Abs(interpreter.IntegerStack.Pop() % 128);
47      var c = Convert.ToChar(value);
48
49      interpreter.CharStack.Push(c);
50      return true;
51    }
52  }
53
54  [PushExpression(StackTypes.Char, "CHAR.FROMFLOAT", StackTypes.Float)]
55  public class CharFromFloatExpression : StatelessExpression {
56    public override bool Eval(IInternalPushInterpreter interpreter) {
57      if (interpreter.FloatStack.IsEmpty) return false;
58
59      var value = (int)Math.Abs(interpreter.FloatStack.Pop() % 128);
60      var c = Convert.ToChar(value);
61
62      interpreter.CharStack.Push(c);
63      return true;
64    }
65  }
66
67  [PushExpression(StackTypes.Char, "CHAR.ALLFROMSTRING", StackTypes.String)]
68  public class CharAllFromStringExpression : StatelessExpression {
69    public override bool Eval(IInternalPushInterpreter interpreter) {
70      if (interpreter.StringStack.IsEmpty) return false;
71
72      var chars = interpreter.StringStack.Pop().ToCharArray();
73      interpreter.CharStack.Push(chars);
74      return true;
75    }
76  }
77
78}
Note: See TracBrowser for help on using the repository browser.