Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Algorithms.PushGP/Expressions/PushExpressions.cs @ 14392

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

#2665 Full Push 3.0 instruction set and tests; Added first benchmark test (count odds) for random walk tests;

File size: 3.9 KB
Line 
1using HeuristicLab.Algorithms.PushGP.Interpreter;
2using HeuristicLab.Algorithms.PushGP.Stack;
3using HeuristicLab.Common;
4
5namespace HeuristicLab.Algorithms.PushGP.Expressions
6{
7    public abstract class PushExpression<T> : Expression
8    {
9        protected readonly T value;
10
11        public PushExpression(T value) : base(value.ToString(), value.GetHashCode())
12        {
13            this.value = value;
14        }
15
16        // copy constructor
17        public PushExpression(PushExpression<T> expression, Cloner cloner) : base(expression, cloner)
18        {
19            this.value = expression.value;
20        }
21
22        protected void Eval(IStack<T> stack)
23        {
24            stack.Push(this.value);
25        }
26
27        public override bool Equals(object obj)
28        {
29            if (obj == null || !(obj is PushExpression<T>))
30            {
31                return false;
32            }
33
34            var other = obj as PushExpression<T>;
35
36            return this.value.Equals(value);
37        }
38    }
39
40    public class IntegerPushExpression : PushExpression<long>
41    {
42        public IntegerPushExpression(long value) : base(value)
43        { }
44
45        // copy constructor
46        public IntegerPushExpression(IntegerPushExpression expression, Cloner cloner) : base(expression, cloner)
47        { }
48
49        public override void Eval(IInterpreter interpreter)
50        {
51            this.Eval(interpreter.IntegerStack);
52        }
53
54        public override IDeepCloneable Clone(Cloner cloner)
55        {
56            return new IntegerPushExpression(this, cloner);
57        }
58    }
59
60    public class FloatPushExpression : PushExpression<double>
61    {
62        public FloatPushExpression(double value) : base(value)
63        { }
64
65        // copy constructor
66        public FloatPushExpression(FloatPushExpression expression, Cloner cloner) : base(expression, cloner)
67        { }
68
69        public override void Eval(IInterpreter interpreter)
70        {
71            this.Eval(interpreter.FloatStack);
72        }
73
74        public override IDeepCloneable Clone(Cloner cloner)
75        {
76            return new FloatPushExpression(this, cloner);
77        }
78    }
79
80    public class BooleanPushExpression : PushExpression<bool>
81    {
82        public BooleanPushExpression(bool value) : base(value)
83        { }
84
85        // copy constructor
86        public BooleanPushExpression(BooleanPushExpression expression, Cloner cloner) : base(expression, cloner)
87        { }
88
89        public override void Eval(IInterpreter interpreter)
90        {
91            this.Eval(interpreter.BooleanStack);
92        }
93
94        public override IDeepCloneable Clone(Cloner cloner)
95        {
96            return new BooleanPushExpression(this, cloner);
97        }
98    }
99
100    public class NamePushExpression : PushExpression<string>
101    {
102        public NamePushExpression(string value) : base(value)
103        { }
104
105        // copy constructor
106        public NamePushExpression(NamePushExpression expression, Cloner cloner) : base(expression, cloner)
107        { }
108
109        public override void Eval(IInterpreter interpreter)
110        {
111            this.Eval(interpreter.NameStack);
112        }
113
114        public override IDeepCloneable Clone(Cloner cloner)
115        {
116            return new NamePushExpression(this, cloner);
117        }
118    }
119
120    public class ExecPushExpression : PushExpression<Expression>
121    {
122        public ExecPushExpression(Expression value) : base(value)
123        { }
124
125        // copy constructor
126        public ExecPushExpression(ExecPushExpression expression, Cloner cloner) : base(expression, cloner)
127        { }
128
129        public override void Eval(IInterpreter interpreter)
130        {
131            this.Eval(interpreter.ExecStack);
132        }
133
134        public override IDeepCloneable Clone(Cloner cloner)
135        {
136            return new ExecPushExpression(this, cloner);
137        }
138    }
139}
Note: See TracBrowser for help on using the repository browser.