Free cookie consent management tool by TermsFeed Policy Generator

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

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

#2665 Expressions are splitted into StatefullExpressions and StatelessExpressions, Added traits for tests

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