Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Example.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Example.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Example.cs (revision 14952)
@@ -66,4 +66,5 @@
OutputStringVector = (string[][])origin.OutputStringVector.Clone();
OutputPrint = origin.OutputPrint;
+ OutputPrintLineCount = origin.OutputPrintLineCount;
}
@@ -115,4 +116,6 @@
[Storable]
public string OutputPrint { get; set; }
+ [Storable]
+ public int OutputPrintLineCount { get; set; }
public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Checksum.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Checksum.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Checksum.cs (revision 14952)
@@ -4,5 +4,5 @@
public class Checksum : BenchmarkSuiteDataDescriptor {
- private const string name = "Checksum";
+ private const string name = "Checksum - Hard";
private const string fileName = "Checksum.csv";
private const string description = "Given a string, convert each character in the string into its integer ASCII value, sum them, take the sum modulo 64, add the integer value of the space character, and then convert that integer back into its corresponding character(the checksum character). The program must print Check sum is X, where X is replaced by the correct checksum character.";
@@ -31,9 +31,9 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(64),
- new IntegerRangeErcValue(-128, 128)),
+ new IntegerConstantErc(64),
+ new IntegerRangeErc(-128, 128)),
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue(' '),
- new IntegerRangeErcValue(0x20, 0x7e))
+ new IntegerConstantErc(' '),
+ new IntegerRangeErc(0x20, 0x7e))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CollatzNumbers.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CollatzNumbers.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CollatzNumbers.cs (revision 14952)
@@ -3,5 +3,5 @@
public class CollatzNumbers : BenchmarkSuiteDataDescriptor {
- private const string name = "Collatz Numbers";
+ private const string name = "Collatz Numbers - Hard";
private const string fileName = "CollatzNumbers.csv";
private const string description = "Given an integer, find the number of terms in the Collatz(hailstone) sequence starting from that integer.";
@@ -30,6 +30,6 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(0, 1),
- new IntegerRangeErcValue(-100, 100))
+ new IntegerConstantErc(0, 1),
+ new IntegerRangeErc(-100, 100))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CompareStringLengths.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CompareStringLengths.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CompareStringLengths.cs (revision 14952)
@@ -3,5 +3,5 @@
public class CompareStringLengths : BenchmarkSuiteDataDescriptor {
- private const string name = "Compare String Lengths";
+ private const string name = "Compare String Lengths - Hard";
private const string fileName = "CompareStringLengths.csv";
private const string description = " Given three strings n1, n2, and n3, return true if length(n1) < length(n2) < length(n3), and false otherwise";
@@ -30,5 +30,5 @@
ErcProbability = 0.05,
BooleanErcOptions = new BooleanErcOptions(
- new BooleanRandomErcValue {
+ new BooleanRandomErc {
AllowTrue = true,
AllowFalse = true
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CountOdds.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CountOdds.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/CountOdds.cs (revision 14952)
@@ -3,5 +3,5 @@
public class CountOdds : BenchmarkSuiteDataDescriptor {
- private const string name = "Count Odds";
+ private const string name = "Count Odds - Hard";
private const string fileName = "CountOdds.csv";
private const string description = "Given a vector of integers, return the number of integers that are odd, without use of a specific even or odd instruction(but allowing instructions such as mod and quotient)";
@@ -30,6 +30,6 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(0, 1, 2),
- new IntegerRangeErcValue(-1000, 1000)),
+ new IntegerConstantErc(0, 1, 2),
+ new IntegerRangeErc(-1000, 1000)),
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Digits.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Digits.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Digits.cs (revision 14952)
@@ -4,5 +4,5 @@
public class Digits : BenchmarkSuiteDataDescriptor {
- private const string name = "Digits";
+ private const string name = "Digits - Hard";
private const string fileName = "Digits.csv";
private const string description = "Given an integer, print that integer’s digits each on their own line starting with the least significant digit.A negative integer should have the negative sign printed before the most significant digit.";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-10, 10)),
+ new IntegerRangeErc(-10, 10)),
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue('\r'))
+ new IntegerConstantErc('\n'))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/DoubleLetters.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/DoubleLetters.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/DoubleLetters.cs (revision 14952)
@@ -4,5 +4,5 @@
public class DoubleLetters : BenchmarkSuiteDataDescriptor {
- private const string name = "Double Letters";
+ private const string name = "Double Letters - Hard";
private const string fileName = "DoubleLetters.csv";
private const string description = "Given a string, print the string, doubling every letter character, and tripling every exclamation point.All other non-alphabetic and non-exclamation characters should be printed a single time each";
@@ -31,5 +31,5 @@
ErcProbability = 0.02,
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue('!'))
+ new IntegerConstantErc('!'))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/EvenSquares.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/EvenSquares.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/EvenSquares.cs (revision 14952)
@@ -1,5 +1,5 @@
namespace HeuristicLab.BenchmarkSuite.Problems {
public class EvenSquares : BenchmarkSuiteDataDescriptor {
- private const string name = "Even Sqaures";
+ private const string name = "Even Sqaures - Hard";
private const string fileName = "EvenSquares.csv";
private const string description = " Given an integer n, print all of the positive even perfect squares less than n on separate lines.";
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ForLoopIndex.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ForLoopIndex.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ForLoopIndex.cs (revision 14952)
@@ -1,5 +1,5 @@
namespace HeuristicLab.BenchmarkSuite.Problems {
public class ForLoopIndex : BenchmarkSuiteDataDescriptor {
- private const string name = "For Loop Index";
+ private const string name = "For Loop Index - Hard";
private const string fileName = "ForLoopIndex.csv";
private const string description = "Given 3 integer inputs start,end, and step, print the integers in the sequence n|0 = start, n|i = n|i−1 + step for each n|i < end, each on their own line.";
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Grades.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Grades.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Grades.cs (revision 14952)
@@ -4,5 +4,5 @@
public class Grades : BenchmarkSuiteDataDescriptor {
- private const string name = "Grades";
+ private const string name = "Grades - Hard";
private const string fileName = "Grades.csv";
private const string description = "Given 5 integers, the first four represent the lower numeric thresholds for achieving an A, B, C, and D, and will be distinct and in descending order.The fifth represents the student’s numeric grade.The program must print Student has a X grade., where X is A, B, C, D, or F depending on the thresholds and the numeric grade.";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(0, 100)),
+ new IntegerRangeErc(0, 100)),
StringErcOptions = new StringErcOptions(
- new StringConstantErcValue("Student has a ", " grade", "A", "B", "C", "D", "F"))
+ new StringConstantErc("Student has a ", " grade", "A", "B", "C", "D", "F"))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/LastIndexOfZero.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/LastIndexOfZero.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/LastIndexOfZero.cs (revision 14952)
@@ -3,5 +3,5 @@
public class LastIndexOfZero : BenchmarkSuiteDataDescriptor {
- private const string name = "Last Index of Zero";
+ private const string name = "Last Index of Zero - Hard";
private const string fileName = "LastIndexOfZero.csv";
private const string description = "Given a vector of integers, at least one of which is 0, return the index of the last occurrence of 0 in the vector.";
@@ -30,6 +30,6 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(0),
- new IntegerRangeErcValue(-50, 50))
+ new IntegerConstantErc(0),
+ new IntegerRangeErc(-50, 50))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Median.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Median.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Median.cs (revision 14952)
@@ -3,5 +3,5 @@
public class Median : BenchmarkSuiteDataDescriptor {
- private const string name = "Median";
+ private const string name = "Median - Medium";
private const string fileName = "Median.csv";
private const string description = "Given 3 integers, print their median.";
@@ -30,6 +30,6 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(0),
- new IntegerRangeErcValue(-1000, 100))
+ new IntegerConstantErc(0),
+ new IntegerRangeErc(-1000, 100))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/MirrorImage.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/MirrorImage.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/MirrorImage.cs (revision 14952)
@@ -3,5 +3,5 @@
public class MirrorImage : BenchmarkSuiteDataDescriptor {
- private const string name = "Mirror Image";
+ private const string name = "Mirror Image - Easy";
private const string fileName = "MirrorImage.csv";
private const string description = "Given two vectors of integers, return true if one vector is the reverse of the other, and false otherwise.";
@@ -30,5 +30,5 @@
ErcProbability = 0.05,
BooleanErcOptions = new BooleanErcOptions(
- new BooleanRandomErcValue {
+ new BooleanRandomErc {
AllowFalse = true,
AllowTrue = true
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NegativeToZero.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NegativeToZero.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NegativeToZero.cs (revision 14952)
@@ -4,5 +4,5 @@
public class NegativeToZero : BenchmarkSuiteDataDescriptor {
- private const string name = "Negative to Zero";
+ private const string name = "Negative to Zero - Medium";
private const string fileName = "NegativeToZero.csv";
private const string description = "Given a vector of integers, return the vector where all negative integers have been replaced by 0.";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(0)),
+ new IntegerConstantErc(0)),
IntegerVectorErcOptions = new IntegerVectorErcOptions(
- new IntegerVectorConstantsErcValue(new int[0]))
+ new IntegerVectorConstantsErc(new int[0]))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NumberIo.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NumberIo.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/NumberIo.cs (revision 14952)
@@ -4,5 +4,5 @@
public class NumberIO : BenchmarkSuiteDataDescriptor {
- private const string name = "NumberIO";
+ private const string name = "NumberIO - Easy";
private const string fileName = "NumberIO.csv";
private const string description = "Given an integer and a float, calc their sum.";
@@ -25,5 +25,5 @@
TrainingCount = 25,
TestCount = 1000,
- EnabledDataTypes = DataTypes.Integer | DataTypes.Float,
+ EnabledDataTypes = DataTypes.Integer | DataTypes.Float | DataTypes.Print,
EvalLimit = 200,
MaxSize = 200,
@@ -31,7 +31,7 @@
ErcProbability = 0.01,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-100, 100)),
+ new IntegerRangeErc(-100, 100)),
FloatErcOptions = new FloatErcOptions(
- new FloatRangeErcValue(-100, 100))
+ new FloatRangeErc(-100, 100))
}
};
@@ -44,5 +44,6 @@
InputFloat = ExampleArgumentConverter.ConvertDoubles(input[0]),
InputInteger = ExampleArgumentConverter.ConvertIntegers(input[1]),
- OutputFloat = ExampleArgumentConverter.ConvertDoubles(output[0])
+ OutputFloat = ExampleArgumentConverter.ConvertDoubles(output[0]),
+ //OutputPrint = output[0]
};
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/PigLatin.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/PigLatin.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/PigLatin.cs (revision 14952)
@@ -5,5 +5,5 @@
public class PigLatin : BenchmarkSuiteDataDescriptor {
- private const string name = "Pig Latin";
+ private const string name = "Pig Latin - Hard";
private const string fileName = "PigLatin.csv";
private const string description = "Given a string containing lowercase words separated by single spaces, print the string with each word translated to pig Latin.Specifically, if a word starts with a vowel, it should have“ay”added to its end; otherwise, the first letter is moved to the end of the word, followed by “ay”.";
@@ -32,9 +32,9 @@
ErcProbability = 0.05,
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue(' ', 'a', 'e', 'i', 'o', 'u'),
- new IntegerRangeErcValue(0x20, 0x7e)),
+ new IntegerConstantErc(' ', 'a', 'e', 'i', 'o', 'u'),
+ new IntegerRangeErc(0x20, 0x7e)),
StringErcOptions = new StringErcOptions(
- new StringConstantErcValue("ay", "aeiou"),
- new StringRandomErcValue {
+ new StringConstantErc("ay", "aeiou"),
+ new StringRandomErc {
IsEnabled = true,
AllowLowercaseLetters = true,
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ReplaceSpaceWithNewline.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ReplaceSpaceWithNewline.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ReplaceSpaceWithNewline.cs (revision 14952)
@@ -5,5 +5,5 @@
public class ReplaceSpaceWithNewline : BenchmarkSuiteDataDescriptor {
- private const string name = "Replace Space with Newline";
+ private const string name = "Replace Space with Newline - Medium";
private const string fileName = "ReplaceSpaceWithNewline.csv";
private const string description = " Given a string input, print the string, replacing spaces with newlines.Also, return the integer count of the non- whitespace characters. The input string will not have tabs or newlines.";
@@ -32,8 +32,8 @@
ErcProbability = 0.05,
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue(' ', '\r'),
- new IntegerRangeErcValue(0x20, 0x7e)),
+ new IntegerConstantErc(' ', '\n'),
+ new IntegerRangeErc(0x20, 0x7e)),
StringErcOptions = new StringErcOptions(
- new StringRandomErcValue {
+ new StringRandomErc {
IsEnabled = true,
AllowLowercaseLetters = true,
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ScrabbleScore.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ScrabbleScore.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/ScrabbleScore.cs (revision 14952)
@@ -4,5 +4,5 @@
public class ScrabbleScore : BenchmarkSuiteDataDescriptor {
- private const string name = "Scrabble Score";
+ private const string name = "Scrabble Score - Hard";
private const string fileName = "ScrabbleScore.csv";
private const string description = "Given a string of visible ASCII characters, return the Scrabble score for that string. Each letter has a corresponding value according to normal Scrabble rules, and non-letter characters are worth zero.";
@@ -61,7 +61,7 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerConstantErcValue(ScrabbleValues)),
+ new IntegerConstantErc(ScrabbleValues)),
IntegerVectorErcOptions = new IntegerVectorErcOptions(
- new IntegerVectorConstantsErcValue(ScrabbleValues))
+ new IntegerVectorConstantsErc(ScrabbleValues))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SmallOrLarge.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SmallOrLarge.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SmallOrLarge.cs (revision 14952)
@@ -4,5 +4,5 @@
public class SmallOrLarge : BenchmarkSuiteDataDescriptor {
- private const string name = "Small or Large";
+ private const string name = "Small or Large - Hard";
private const string fileName = "SmallOrLarge.csv";
private const string description =
@@ -32,7 +32,7 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-10000, 10000)),
+ new IntegerRangeErc(-10000, 10000)),
StringErcOptions = new StringErcOptions(
- new StringConstantErcValue("small", "large"))
+ new StringConstantErc("small", "large"))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Smallest.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Smallest.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Smallest.cs (revision 14952)
@@ -3,5 +3,5 @@
public class Smallest : BenchmarkSuiteDataDescriptor {
- private const string name = "Smallest";
+ private const string name = "Smallest - Easy";
private const string fileName = "Smallest.csv";
private const string description = "Given 4 integers, print the smallest of them.";
@@ -30,5 +30,5 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-100, 100)),
+ new IntegerRangeErc(-100, 100)),
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringDifferences.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringDifferences.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringDifferences.cs (revision 14952)
@@ -4,5 +4,5 @@
public class StringDifferences : BenchmarkSuiteDataDescriptor {
- private const string name = "String Differences";
+ private const string name = "String Differences - Hard";
private const string fileName = "StringDifferences.csv";
private const string description = "Given 2 strings (without whitespace) as input, find the indices at which the strings have different characters, stopping at the end of the shorter one.For each such index, print a line containing the index as well as the character in each string. For example, if the strings are “dealer” and “dollars”, the program should print: 1 e o, 2 a l, 4 e a";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue(' ', '\r')),
+ new IntegerConstantErc(' ', '\n')),
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-10, 10))
+ new IntegerRangeErc(-10, 10))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringLengthsBackwards.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringLengthsBackwards.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/StringLengthsBackwards.cs (revision 14952)
@@ -3,5 +3,5 @@
public class StringLengthsBackwards : BenchmarkSuiteDataDescriptor {
- private const string name = "String Length Backwards";
+ private const string name = "String Length Backwards - Medium";
private const string fileName = "StringLengthsBackwards.csv";
private const string description = "Given a vector of strings, print the length of each string in the vector starting with the last and ending with the first.";
@@ -30,5 +30,5 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-100, 100))
+ new IntegerRangeErc(-100, 100))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SumOfSquares.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SumOfSquares.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SumOfSquares.cs (revision 14952)
@@ -3,5 +3,5 @@
public class SumOfSquares : BenchmarkSuiteDataDescriptor {
- private const string name = "Sum of Squares";
+ private const string name = "Sum of Squares - Hard";
private const string fileName = "SumOfSquares.csv";
private const string description = "Given integer n, return the sum of squaring each integer in the range[1, n].";
@@ -30,5 +30,5 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-100, 100))
+ new IntegerRangeErc(-100, 100))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SuperAnagrams.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SuperAnagrams.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/SuperAnagrams.cs (revision 14952)
@@ -5,5 +5,5 @@
public class SuperAnagrams : BenchmarkSuiteDataDescriptor {
- private const string name = "Super Anagrams";
+ private const string name = "Super Anagrams - Hard";
private const string fileName = "SuperAnagrams.csv";
private const string description = "Given strings x and y of lowercase letters, return true if y is a super anagram of x, which is the case if every character in x is in y.To be true, y may contain extra characters, but must have at least as many copies of each character as x does.";
@@ -32,5 +32,5 @@
ErcProbability = 0.05,
BooleanErcOptions = new BooleanErcOptions(
- new BooleanRandomErcValue {
+ new BooleanRandomErc {
IsEnabled = true,
AllowFalse = true,
@@ -38,7 +38,7 @@
}),
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-1000, 1000)),
+ new IntegerRangeErc(-1000, 1000)),
CharErcOptions = new CharErcOptions(
- new IntegerRangeErcValue(0x20, 0x7e))
+ new IntegerRangeErc(0x20, 0x7e))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Syllables.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Syllables.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/Syllables.cs (revision 14952)
@@ -5,5 +5,5 @@
public class Syllables : BenchmarkSuiteDataDescriptor {
- private const string name = "Syllables";
+ private const string name = "Syllables - Hard";
private const string fileName = "Syllables.csv";
private const string description = "Given a string containing symbols, spaces, digits, and lowercase letters, count the number of occurrences of vowels(a, e, i, o, u, y) in the string and print that number as X in The number of syllables is X.";
@@ -32,6 +32,6 @@
ErcProbability = 0.05,
StringErcOptions = new StringErcOptions(
- new StringConstantErcValue("The number of syllables is ", "aeiouy" ),
- new StringRandomErcValue {
+ new StringConstantErc("The number of syllables is ", "aeiouy" ),
+ new StringRandomErc {
AllowLowercaseLetters = true,
AllowUppercaseLetters = false,
@@ -43,6 +43,6 @@
}),
CharErcOptions = new CharErcOptions (
- new IntegerConstantErcValue('a', 'e', 'i', 'o', 'u'),
- new IntegerRangeErcValue(0x20, 0x7e))
+ new IntegerConstantErc('a', 'e', 'i', 'o', 'u'),
+ new IntegerRangeErc(0x20, 0x7e))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorAverage.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorAverage.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorAverage.cs (revision 14952)
@@ -1,5 +1,5 @@
namespace HeuristicLab.BenchmarkSuite.Problems {
public class VectorAverage : BenchmarkSuiteDataDescriptor {
- private const string name = "Vector Average";
+ private const string name = "Vector Average - Medium";
private const string fileName = "VectorAverage.csv";
private const string description = "Given a vector of floats, return the average of those floats. Results are rounded to 4 decimal places.";
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorSummed.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorSummed.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/VectorSummed.cs (revision 14952)
@@ -4,5 +4,5 @@
public class VectorSummed : BenchmarkSuiteDataDescriptor {
- private const string name = "Vector Summed";
+ private const string name = "Vector Summed - Hard";
private const string fileName = "VectorSummed.csv";
private const string description = "Given two equal-sized vectors of integers, return a vector of integers that contains the sum of the input vectors at each index.";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
IntegerVectorErcOptions = new IntegerVectorErcOptions(
- new IntegerVectorConstantsErcValue(new int[0])),
+ new IntegerVectorConstantsErc(new int[0])),
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-1000, 1000))
+ new IntegerRangeErc(-1000, 1000))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WallisPi.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WallisPi.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WallisPi.cs (revision 14952)
@@ -4,5 +4,5 @@
public class WallisPi : BenchmarkSuiteDataDescriptor {
- private const string name = "Wallis Pi";
+ private const string name = "Wallis Pi - Hard";
private const string fileName = "WallisPi.csv";
private const string description = " John Wallis gave a infinite product that converges to π/4. Given an integer input n, compute an approximation of this product out to n terms.Results are rounded to 5 decimal place";
@@ -31,7 +31,7 @@
ErcProbability = 0.05,
FloatErcOptions = new FloatErcOptions(
- new FloatRangeErcValue(-500, 500)),
+ new FloatRangeErc(-500, 500)),
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-500, 500))
+ new IntegerRangeErc(-500, 500))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WordStats.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WordStats.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/WordStats.cs (revision 14952)
@@ -6,5 +6,5 @@
public class WordStats : BenchmarkSuiteDataDescriptor {
- private const string name = "Word Stats";
+ private const string name = "Word Stats - Hard";
private const string fileName = "WordStats.csv";
private const string description = "Given a string, print the number of words containing n characters for n from 1 to the length of the longest word. At the end of the output, print a line that gives the number of sentences and line that gives the average sentence length. A word is any string of consecutive non-whitespace characters(including sentence terminators). Every string will contain at least one sentence terminator(period, exclamation point, or question mark). The average sentence length is the number of words in the file divided by the number of sentence terminator characters.";
@@ -33,11 +33,11 @@
ErcProbability = 0.05,
IntegerErcOptions = new IntegerErcOptions(
- new IntegerRangeErcValue(-100, 100)),
+ new IntegerRangeErc(-100, 100)),
IntegerVectorErcOptions = new IntegerVectorErcOptions(
- new IntegerVectorConstantsErcValue(new int[0])),
+ new IntegerVectorConstantsErc(new int[0])),
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue('.', '?', '!', ' ', '\t', '\r', ':')),
+ new IntegerConstantErc('.', '?', '!', ' ', '\t', '\n', ':')),
StringErcOptions = new StringErcOptions(
- new StringConstantErcValue("words of length ", ": ", "number of sentences: ", "average sentence length: "))
+ new StringConstantErc("words of length ", ": ", "number of sentences: ", "average sentence length: "))
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/XWordLines.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/XWordLines.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Problems/XWordLines.cs (revision 14952)
@@ -4,5 +4,5 @@
public class XWordLines : BenchmarkSuiteDataDescriptor {
- private const string name = "X-Word Lines";
+ private const string name = "X-Word Lines - Hard";
private const string fileName = "XWordLines.csv";
private const string description = "Given an integer X and a string that can contain spaces and newlines, print the string with exactly X words per line.The last line may have fewer than X words.";
@@ -31,5 +31,5 @@
ErcProbability = 0.05,
CharErcOptions = new CharErcOptions(
- new IntegerConstantErcValue(' ', '\r')),
+ new IntegerConstantErc(' ', '\n')),
}
};
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.Designer.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.Designer.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.Designer.cs (revision 14952)
@@ -44,7 +44,9 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
+ this.dataGridView.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView.Location = new System.Drawing.Point(6, 26);
this.dataGridView.Name = "dataGridView";
+ this.dataGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
this.dataGridView.Size = new System.Drawing.Size(832, 612);
this.dataGridView.TabIndex = 3;
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.cs (revision 14952)
@@ -4,5 +4,4 @@
using System.Collections.Generic;
- using HeuristicLab.BenchmarkSuite.Problems;
using HeuristicLab.Core.Views;
using HeuristicLab.MainForm;
@@ -152,5 +151,5 @@
nameTextBox.Text = Content.Name;
- var cellTemplate = new DataGridViewTextBoxCell();
+ var cellTemplate = new DataGridViewTextBoxCell { Style = { WrapMode = DataGridViewTriState.True } };
for (var i = 0; i < Content.InputArgumentTypes.Length; i++) {
@@ -176,16 +175,27 @@
}
- foreach (var example in Content.Examples) {
- var row = new DataGridViewRow();
- row.HeaderCell.Value = row.Index + 1;
-
+ for (var rowIdx = 0; rowIdx < Content.Examples.Length; rowIdx++) {
+ var example = Content.Examples[rowIdx];
+ var row = new DataGridViewRow {
+ HeaderCell = {
+ Value = (rowIdx + 1).ToString(),
+ }
+ };
row.CreateCells(dataGridView);
+ var inputArgumentCountDict = ViewHelper.CreateArgumentCountDict();
for (var i = 0; i < Content.InputArgumentTypes.Length; i++) {
- row.Cells[i].Value = ViewHelper.StringifyInput(Content.InputArgumentTypes[i], example, ValueSeparator);
- }
-
+ var type = Content.InputArgumentTypes[i];
+ var offset = inputArgumentCountDict[type];
+ row.Cells[i].Value = ViewHelper.StringifyInput(type, offset, example, ValueSeparator);
+ inputArgumentCountDict[type]++;
+ }
+
+ var outputArgumentCountDict = ViewHelper.CreateArgumentCountDict();
for (var i = 0; i < Content.OutputArgumentTypes.Length; i++) {
- row.Cells[Content.InputArgumentTypes.Length + i].Value = ViewHelper.StringifyOutput(Content.OutputArgumentTypes[i], example, ValueSeparator);
+ var type = Content.OutputArgumentTypes[i];
+ var offset = outputArgumentCountDict[type];
+ row.Cells[Content.InputArgumentTypes.Length + i].Value = ViewHelper.StringifyOutput(type, offset, example, ValueSeparator);
+ outputArgumentCountDict[type]++;
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.resx
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.resx (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.resx (revision 14952)
@@ -1,16 +1,16 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 17, 17
+
+
+ 140, 17
+
+
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/WeightedErcItem.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/WeightedErcItem.cs (revision 14952)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/WeightedErcItem.cs (revision 14952)
@@ -0,0 +1,62 @@
+namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc {
+ using System;
+
+ using HeuristicLab.Common;
+ using HeuristicLab.Core;
+ using HeuristicLab.Data;
+ using HeuristicLab.Parameters;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+ [StorableClass]
+ public abstract class WeightedErcItem : ParameterizedNamedItem, IWeightedErcItem {
+ private const string WeightParameterName = "Weight";
+
+ [Storable]
+ protected bool isEnabled;
+
+ public event EventHandler EnabledChanged;
+
+ protected WeightedErcItem() : this(false, 1d) { }
+
+ protected WeightedErcItem(bool isEnabled, double weigth) {
+ this.isEnabled = isEnabled;
+ Parameters.Add(new FixedValueParameter(WeightParameterName, new DoubleValue(weigth)));
+ }
+
+ [StorableConstructor]
+ protected WeightedErcItem(bool deserializing) : base(deserializing) { }
+
+ protected WeightedErcItem(WeightedErcItem origin, Cloner cloner)
+ : base(origin, cloner) {
+ isEnabled = origin.IsEnabled;
+ }
+
+ public IValueParameter WeightParameter
+ {
+ get { return (IValueParameter)Parameters[WeightParameterName]; }
+ }
+
+ public double Weight
+ {
+ get { return WeightParameter.Value.Value; }
+ set { WeightParameter.Value.Value = value; }
+ }
+
+ public bool IsEnabled
+ {
+ get { return isEnabled; }
+ set
+ {
+ if (value == isEnabled)
+ return;
+
+ isEnabled = value;
+
+ if (EnabledChanged != null)
+ EnabledChanged(this, value);
+ }
+ }
+
+ public abstract T GetErcValue(IRandom random);
+ }
+}
Index: anches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/WeightedErcValueItem.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/WeightedErcValueItem.cs (revision 14951)
+++ (revision )
@@ -1,62 +1,0 @@
-namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc {
- using System;
-
- using HeuristicLab.Common;
- using HeuristicLab.Core;
- using HeuristicLab.Data;
- using HeuristicLab.Parameters;
- using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
- [StorableClass]
- public abstract class WeightedErcValueItem : ParameterizedNamedItem, IWeightedErcValueItem {
- private const string WeightParameterName = "Weight";
-
- [Storable]
- protected bool isEnabled;
-
- public event EventHandler EnabledChanged;
-
- protected WeightedErcValueItem() : this(false, 1d) { }
-
- protected WeightedErcValueItem(bool isEnabled, double weigth) {
- this.isEnabled = isEnabled;
- Parameters.Add(new FixedValueParameter(WeightParameterName, new DoubleValue(weigth)));
- }
-
- [StorableConstructor]
- protected WeightedErcValueItem(bool deserializing) : base(deserializing) { }
-
- protected WeightedErcValueItem(WeightedErcValueItem origin, Cloner cloner)
- : base(origin, cloner) {
- isEnabled = origin.IsEnabled;
- }
-
- public IValueParameter WeightParameter
- {
- get { return (IValueParameter)Parameters[WeightParameterName]; }
- }
-
- public double Weight
- {
- get { return WeightParameter.Value.Value; }
- set { WeightParameter.Value.Value = value; }
- }
-
- public bool IsEnabled
- {
- get { return isEnabled; }
- set
- {
- if (value == isEnabled)
- return;
-
- isEnabled = value;
-
- if (EnabledChanged != null)
- EnabledChanged(this, value);
- }
- }
-
- public abstract T GetErcValue(IRandom random);
- }
-}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/HeuristicLab.Problems.ProgramSynthesis.Base.csproj
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/HeuristicLab.Problems.ProgramSynthesis.Base.csproj (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/HeuristicLab.Problems.ProgramSynthesis.Base.csproj (revision 14952)
@@ -44,6 +44,18 @@
..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll
+
+ ..\..\..\..\trunk\sources\bin\HeuristicLab.Core.Views-3.3.dll
+
..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll
+
+
+ ..\..\..\..\trunk\sources\bin\HeuristicLab.Data.Views-3.3.dll
+
+
+ ..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll
+
+
+ ..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll
@@ -62,4 +74,6 @@
+
+
@@ -71,5 +85,5 @@
-
+
@@ -78,23 +92,34 @@
-
-
+
+
+ UserControl
+
+
+ CheckedErcItemCollectionView.cs
+
+
+ UserControl
+
+
+ ErcOptionsView.cs
+
+
+
-
-
-
+
+
+
-
-
+
-
-
-
+
+
+
-
-
-
+
+
@@ -103,4 +128,9 @@
+
+
+
+ ErcOptionsView.cs
+
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Plugin.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Plugin.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Plugin.cs (revision 14952)
@@ -31,8 +31,12 @@
[PluginDependency("HeuristicLab.Common", "3.3")]
[PluginDependency("HeuristicLab.Core", "3.3")]
+ [PluginDependency("HeuristicLab.Core.Views", "3.3")]
[PluginDependency("HeuristicLab.Data", "3.3")]
+ [PluginDependency("HeuristicLab.Data.Views", "3.3")]
[PluginDependency("HeuristicLab.Parameters", "3.3")]
[PluginDependency("HeuristicLab.Persistence", "3.3")]
[PluginDependency("HeuristicLab.Random", "3.3")]
+ [PluginDependency("HeuristicLab.MainForm", "3.3")]
+ [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
public class Plugin : PluginBase {
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj (revision 14952)
@@ -139,5 +139,5 @@
-
+
@@ -216,4 +216,5 @@
+
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Attributes/PushExpressionAttriubte.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Attributes/PushExpressionAttriubte.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Attributes/PushExpressionAttriubte.cs (revision 14952)
@@ -9,4 +9,5 @@
public readonly StackTypes AdditionalStackDependencies;
public readonly string ExpressionName;
+ public readonly bool ManipulatesExec;
public PushExpressionAttribute(StackTypes stackType, string expressionName, StackTypes additionalStackDependencies = default(StackTypes)) {
@@ -14,4 +15,5 @@
AdditionalStackDependencies = additionalStackDependencies;
ExpressionName = expressionName;
+ ManipulatesExec = stackType == StackTypes.Exec || AdditionalStackDependencies.HasFlag(StackTypes.Exec);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Constants/Environment.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Constants/Environment.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Constants/Environment.cs (revision 14952)
@@ -7,4 +7,5 @@
public const char CharacterSymbol = '\'';
public const char StringSymbol = '\"';
+ public const string NewLine = "\n";
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/BooleanExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/BooleanExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/BooleanExpressions.cs (revision 14952)
@@ -3,4 +3,8 @@
using Attributes;
+
+ using HeuristicLab.Common;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
@@ -10,10 +14,15 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.AND")]
+ [StorableClass]
public class BooleanAndExpression : StatelessExpression {
- public bool IsNoop(IInternalPushInterpreter interpreter) {
+ public BooleanAndExpression() { }
+ [StorableConstructor]
+ public BooleanAndExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
return interpreter.BooleanStack.Count < 2;
}
- public void TryEval(IInternalPushInterpreter interpreter) {
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.BooleanStack.Pop();
var second = interpreter.BooleanStack.Top;
@@ -21,12 +30,4 @@
interpreter.BooleanStack.SetTop(result);
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (IsNoop(interpreter))
- return false;
-
- TryEval(interpreter);
- return true;
}
}
@@ -36,9 +37,15 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.OR")]
+ [StorableClass]
public class BooleanOrExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count < 2)
- return false;
+ public BooleanOrExpression() { }
+ [StorableConstructor]
+ public BooleanOrExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.BooleanStack.Pop();
var second = interpreter.BooleanStack.Top;
@@ -46,5 +53,4 @@
interpreter.BooleanStack.SetTop(result);
- return true;
}
}
@@ -54,11 +60,16 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.NOT")]
+ [StorableClass]
public class BooleanNotExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.IsEmpty)
- return false;
+ public BooleanNotExpression() { }
+ [StorableConstructor]
+ public BooleanNotExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.BooleanStack.SetTop(!interpreter.BooleanStack.Top);
- return true;
}
}
@@ -68,12 +79,17 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.FROMFLOAT", StackTypes.Float)]
+ [StorableClass]
public class BooleanFromFloatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count == 0) return false;
+ public BooleanFromFloatExpression() { }
+ [StorableConstructor]
+ public BooleanFromFloatExpression(bool deserializing) : base(deserializing) { }
- var value = Math.Abs(interpreter.FloatStack.Pop()) > 0.0000001;
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count == 0;
+ }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ var value = !Math.Abs(interpreter.FloatStack.Pop()).IsAlmost(0);
interpreter.BooleanStack.Push(value);
- return true;
}
}
@@ -83,12 +99,17 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.FROMINTEGER", StackTypes.Integer)]
+ [StorableClass]
public class BooleanFromIntegerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0) return false;
+ public BooleanFromIntegerExpression() { }
+ [StorableConstructor]
+ public BooleanFromIntegerExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.IntegerStack.Pop() != 0;
-
interpreter.BooleanStack.Push(value);
- return true;
}
}
@@ -98,9 +119,15 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_FIRST_THEN_AND")]
+ [StorableClass]
public class BooleanInvertFirstThenAnd : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count < 2)
- return false;
+ public BooleanInvertFirstThenAnd() { }
+ [StorableConstructor]
+ public BooleanInvertFirstThenAnd(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.BooleanStack.Pop();
var second = interpreter.BooleanStack.Top;
@@ -108,5 +135,4 @@
interpreter.BooleanStack.SetTop(result);
- return true;
}
}
@@ -116,9 +142,15 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_SECOND_THEN_AND")]
+ [StorableClass]
public class BooleanInvertSecondThenAnd : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count < 2)
- return false;
+ public BooleanInvertSecondThenAnd() { }
+ [StorableConstructor]
+ public BooleanInvertSecondThenAnd(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.BooleanStack.Pop();
var second = interpreter.BooleanStack.Top;
@@ -126,5 +158,4 @@
interpreter.BooleanStack.SetTop(result);
- return true;
}
}
@@ -135,9 +166,15 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.XOR")]
+ [StorableClass]
public class BooleanXorExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count < 2)
- return false;
+ public BooleanXorExpression() { }
+ [StorableConstructor]
+ public BooleanXorExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.BooleanStack.Pop();
var second = interpreter.BooleanStack.Top;
@@ -145,5 +182,4 @@
interpreter.BooleanStack.SetTop(result);
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CharExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CharExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CharExpressions.cs (revision 14952)
@@ -1,76 +1,112 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
using System;
-
- using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
- using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
- using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
+ using Attributes;
+ using Interpreter;
+ using Persistence.Default.CompositeSerializers.Storable;
+ using Stack;
[PushExpression(StackTypes.Char, "CHAR.ISWHITESPACE", StackTypes.Boolean)]
+ [StorableClass]
public class CharIsWhitespaceExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CharStack.IsEmpty) return false;
+ public CharIsWhitespaceExpression() { }
+ [StorableConstructor]
+ public CharIsWhitespaceExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var c = interpreter.CharStack.Pop();
interpreter.BooleanStack.Push(char.IsWhiteSpace(c));
- return true;
}
}
[PushExpression(StackTypes.Char, "CHAR.ISLETTER", StackTypes.Boolean)]
+ [StorableClass]
public class CharIsLetterExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CharStack.IsEmpty) return false;
+ public CharIsLetterExpression() { }
+ [StorableConstructor]
+ public CharIsLetterExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var c = interpreter.CharStack.Pop();
interpreter.BooleanStack.Push(char.IsLetter(c));
- return true;
}
}
[PushExpression(StackTypes.Char, "CHAR.ISDIGIT", StackTypes.Boolean)]
+ [StorableClass]
public class CharIsDigitExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CharStack.IsEmpty) return false;
+ public CharIsDigitExpression() { }
+ [StorableConstructor]
+ public CharIsDigitExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var c = interpreter.CharStack.Pop();
interpreter.BooleanStack.Push(char.IsDigit(c));
- return true;
}
}
[PushExpression(StackTypes.Char, "CHAR.FROMINTEGER", StackTypes.Integer)]
+ [StorableClass]
public class CharFromIntegerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.IsEmpty) return false;
+ public CharFromIntegerExpression() { }
+ [StorableConstructor]
+ public CharFromIntegerExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = (int)Math.Abs(interpreter.IntegerStack.Pop() % 128);
var c = Convert.ToChar(value);
interpreter.CharStack.Push(c);
- return true;
}
}
[PushExpression(StackTypes.Char, "CHAR.FROMFLOAT", StackTypes.Float)]
+ [StorableClass]
public class CharFromFloatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.IsEmpty) return false;
+ public CharFromFloatExpression() { }
+ [StorableConstructor]
+ public CharFromFloatExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = (int)Math.Abs(interpreter.FloatStack.Pop() % 128);
var c = Convert.ToChar(value);
interpreter.CharStack.Push(c);
- return true;
}
}
[PushExpression(StackTypes.Char, "CHAR.ALLFROMSTRING", StackTypes.String)]
+ [StorableClass]
public class CharAllFromStringExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty) return false;
+ public CharAllFromStringExpression() { }
+ [StorableConstructor]
+ public CharAllFromStringExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var chars = interpreter.StringStack.Pop().ToCharArray();
interpreter.CharStack.Push(chars);
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CodeExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CodeExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/CodeExpressions.cs (revision 14952)
@@ -10,4 +10,7 @@
using System.Linq;
using Attributes;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
@@ -19,13 +22,17 @@
///
[PushExpression(StackTypes.Code, "CODE.DO", StackTypes.Exec)]
+ [StorableClass]
public class CodeDoExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeDoExpression() { }
+ [StorableConstructor]
+ public CodeDoExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var codePopExpression = ExpressionTable.GetStatelessExpression();
interpreter.ExecStack.Push(codePopExpression, interpreter.CodeStack.Top);
-
- return true;
}
}
@@ -35,23 +42,36 @@
///
[PushExpression(StackTypes.Code, "CODE.DO*", StackTypes.Exec)]
+ [StorableClass]
public class CodeDoXExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeDoXExpression() { }
+ [StorableConstructor]
+ public CodeDoXExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = interpreter.CodeStack.Pop();
interpreter.ExecStack.Push(expression);
-
+ }
+ }
+
+ ///
+ /// Does nothing.
+ ///
+ [PushExpression(StackTypes.Code, "CODE.NOOP")]
+ [StorableClass]
+ public class CodeNoopExpression : StatelessExpression {
+ public CodeNoopExpression() { }
+ [StorableConstructor]
+ public CodeNoopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
return true;
}
- }
-
- ///
- /// Does nothing.
- ///
- [PushExpression(StackTypes.Code, "CODE.NOOP")]
- public class CodeNoopExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return false;
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ // do nothing
}
}
@@ -62,13 +82,17 @@
///
[PushExpression(StackTypes.Code, "CODE.QUOTE", StackTypes.Exec)]
+ [StorableClass]
public class CodeQuoteExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if (interpreter.ExecStack.Count == 0) return false;
-
+ public CodeQuoteExpression() { }
+ [StorableConstructor]
+ public CodeQuoteExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = interpreter.ExecStack.Pop();
interpreter.CodeStack.Push(expression);
-
- return true;
}
}
@@ -80,11 +104,15 @@
///
[PushExpression(StackTypes.Code, "CODE.IF", StackTypes.Exec | StackTypes.Boolean)]
+ [StorableClass]
public class CodeIfExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if (interpreter.BooleanStack.Count == 0 ||
- interpreter.CodeStack.Count < 2)
- return false;
-
+ public CodeIfExpression() { }
+ [StorableConstructor]
+ public CodeIfExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty || interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var condition = interpreter.BooleanStack.Pop();
var first = interpreter.CodeStack[1];
@@ -93,6 +121,4 @@
interpreter.CodeStack.Remove(2);
interpreter.ExecStack.Push(condition ? first : second);
-
- return true;
}
}
@@ -103,8 +129,15 @@
///
[PushExpression(StackTypes.Code, "CODE.APPEND")]
+ [StorableClass]
public class CodeAppendExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2) return false;
-
+ public CodeAppendExpression() { }
+ [StorableConstructor]
+ public CodeAppendExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.CodeStack.Top;
var second = interpreter.CodeStack[1];
@@ -116,5 +149,5 @@
firstProgram = (PushProgram)first;
- if (firstProgram.Depth > interpreter.Configuration.MaxDepth) return false;
+ if (firstProgram.Depth > interpreter.Configuration.MaxDepth) return;
if (second.IsProgram) {
@@ -123,13 +156,13 @@
if (secondProgram.Depth > interpreter.Configuration.MaxDepth ||
firstProgram.Count + secondProgram.Count > interpreter.Configuration.MaxPointsInProgram)
- return false;
- } else if (firstProgram.Count + 1 > interpreter.Configuration.MaxPointsInProgram) return false;
+ return;
+ } else if (firstProgram.Count + 1 > interpreter.Configuration.MaxPointsInProgram) return;
} else if (second.IsProgram) {
secondProgram = (PushProgram)second;
if (secondProgram.Depth > interpreter.Configuration.MaxDepth
- || secondProgram.Count + 1 > interpreter.Configuration.MaxPointsInProgram) return false;
+ || secondProgram.Count + 1 > interpreter.Configuration.MaxPointsInProgram) return;
} else if (interpreter.Configuration.MaxPointsInProgram <= 2) {
- return false;
+ return;
}
@@ -153,6 +186,4 @@
interpreter.CodeStack.SetTop(result);
-
- return true;
}
}
@@ -163,13 +194,19 @@
///
[PushExpression(StackTypes.Code, "CODE.ATOM", StackTypes.Boolean)]
+ [StorableClass]
public class CodeAtomExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeAtomExpression() { }
+ [StorableConstructor]
+ public CodeAtomExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = interpreter.CodeStack.Pop();
var isExpandExpression = expression.IsProgram;
interpreter.BooleanStack.Push(!isExpandExpression);
- return true;
}
}
@@ -182,16 +219,21 @@
///
[PushExpression(StackTypes.Code, "CODE.CAR")]
+ [StorableClass]
public class CodeCarExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0 ||
- !interpreter.CodeStack.Top.IsProgram) return false;
-
- var expand = interpreter.CodeStack.Top as PushProgram;
-
- if (expand.IsEmpty) return false;
+ public CodeCarExpression() { }
+ [StorableConstructor]
+ public CodeCarExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty ||
+ !interpreter.CodeStack.Top.IsProgram ||
+ ((PushProgram)interpreter.CodeStack.Top).IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ var expand = (PushProgram)interpreter.CodeStack.Top;
var first = expand.Expressions[expand.Expressions.Count - 1];
interpreter.CodeStack.SetTop(first);
- return true;
}
}
@@ -204,8 +246,16 @@
///
[PushExpression(StackTypes.Code, "CODE.CDR")]
+ [StorableClass]
public class CodeCdrExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeCdrExpression() { }
+ [StorableConstructor]
+ public CodeCdrExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty ||
+ (interpreter.CodeStack.Top.IsProgram && ((PushProgram)interpreter.CodeStack.Top).IsEmpty);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
PushProgram result;
var top = interpreter.CodeStack.Top;
@@ -213,17 +263,12 @@
if (top.IsProgram) {
var program = (PushProgram)top;
-
- if (program.IsEmpty) return false;
-
var expressions = program.CopyExpressions(interpreter.PoolContainer.ExpressionListPool);
expressions.RemoveAt(expressions.Count - 1);
result = PushProgram.Create(interpreter.PoolContainer.PushProgramPool, expressions as IReadOnlyList);
- } else {
- result = PushProgram.Empty;
- }
+ } else result = PushProgram.Empty;
+
interpreter.CodeStack.SetTop(result);
- return true;
}
}
@@ -235,11 +280,17 @@
///
[PushExpression(StackTypes.Code, "CODE.CONS")]
+ [StorableClass]
public class CodeConsExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2 ||
- (interpreter.CodeStack.Top.IsProgram &&
- ((PushProgram)interpreter.CodeStack.Top).Expressions.Count + 1 > interpreter.Configuration.MaxPointsInProgram))
- return false;
-
+ public CodeConsExpression() { }
+ [StorableConstructor]
+ public CodeConsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2 ||
+ (interpreter.CodeStack.Top.IsProgram &&
+ ((PushProgram)interpreter.CodeStack.Top).Expressions.Count + 1 > interpreter.Configuration.MaxPointsInProgram);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expressions = interpreter.PoolContainer.ExpressionListPool.Get();
var first = interpreter.CodeStack.Pop();
@@ -254,6 +305,4 @@
var result = PushProgram.Create(interpreter.PoolContainer.PushProgramPool, expressions);
interpreter.CodeStack.SetTop(result);
-
- return true;
}
}
@@ -268,10 +317,16 @@
///
[PushExpression(StackTypes.Code, "CODE.CONTAINER")]
+ [StorableClass]
public class CodeContainerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if ((interpreter.CodeStack.Count < 2) ||
- (interpreter.CodeStack[1].GetType() !=
- typeof(PushProgram))) return false;
-
+ public CodeContainerExpression() { }
+ [StorableConstructor]
+ public CodeContainerExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return (interpreter.CodeStack.Count < 2) ||
+ (interpreter.CodeStack[1].GetType() != typeof(PushProgram));
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var target = interpreter.CodeStack.Pop();
var source = interpreter.CodeStack.Top;
@@ -281,9 +336,8 @@
interpreter.CodeStack.SetTop(result);
- return true;
}
private static PushProgram GetContainer(PushProgram current, Expression target) {
- if (current == target)
+ if (Equals(current, target))
return null;
@@ -307,10 +361,15 @@
///
[PushExpression(StackTypes.Code, "CODE.CONTAINS", StackTypes.Boolean)]
+ [StorableClass]
public class CodeContainsExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2 ||
- !interpreter.CodeStack[1].IsProgram)
- return false;
-
+ public CodeContainsExpression() { }
+ [StorableConstructor]
+ public CodeContainsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2 || !interpreter.CodeStack[1].IsProgram;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var second = (PushProgram)interpreter.CodeStack[1];
var first = interpreter.CodeStack.Top;
@@ -319,5 +378,4 @@
var contains = second.Expressions.Contains(first);
interpreter.BooleanStack.Push(contains);
- return true;
}
}
@@ -329,15 +387,20 @@
///
[PushExpression(StackTypes.Code, "CODE.DEFINITION", StackTypes.Name)]
+ [StorableClass]
public class CodeDefinitionExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if ((interpreter.NameStack.Count == 0) ||
- !interpreter.CustomExpressions.ContainsKey(interpreter.NameStack.Top)) return false;
-
+ public CodeDefinitionExpression() { }
+ [StorableConstructor]
+ public CodeDefinitionExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.IsEmpty ||
+ !interpreter.CustomExpressions.ContainsKey(interpreter.NameStack.Top);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var name = interpreter.NameStack.Pop();
var definition = interpreter.CustomExpressions[name];
interpreter.CodeStack.Push(definition);
-
- return true;
}
}
@@ -369,8 +432,15 @@
///
[PushExpression(StackTypes.Code, "CODE.DISCREPANCY", StackTypes.Integer)]
+ [StorableClass]
public class CodeDiscrepancyExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2) return false;
-
+ public CodeDiscrepancyExpression() { }
+ [StorableConstructor]
+ public CodeDiscrepancyExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var second = interpreter.CodeStack[1];
var first = interpreter.CodeStack.Top;
@@ -385,6 +455,4 @@
var discrepancy = GetDiscrepancy(firstItems, secondItems);
interpreter.IntegerStack.Push(discrepancy);
-
- return true;
}
@@ -429,11 +497,17 @@
///
[PushExpression(StackTypes.Code, "CODE.EXTRACT", StackTypes.Integer)]
+ [StorableClass]
public class CodeExtractExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0 ||
- interpreter.CodeStack.Count == 0 ||
- !interpreter.CodeStack.Top.IsProgram)
- return false;
-
+ public CodeExtractExpression() { }
+ [StorableConstructor]
+ public CodeExtractExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty ||
+ interpreter.CodeStack.IsEmpty ||
+ !interpreter.CodeStack.Top.IsProgram;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = (PushProgram)interpreter.CodeStack.Top;
var index = (int)Math.Abs(interpreter.IntegerStack.Pop() % expression.TotalCount);
@@ -441,6 +515,4 @@
interpreter.CodeStack.SetTop(result);
-
- return true;
}
}
@@ -450,14 +522,19 @@
///
[PushExpression(StackTypes.Code, "CODE.FROMBOOLEAN", StackTypes.Boolean)]
+ [StorableClass]
public class CodeFromBooleanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count == 0) return false;
-
+ public CodeFromBooleanExpression() { }
+ [StorableConstructor]
+ public CodeFromBooleanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.BooleanStack.Pop();
var expression = new BooleanPushExpression(value);
interpreter.CodeStack.Push(expression);
-
- return true;
}
}
@@ -467,14 +544,19 @@
///
[PushExpression(StackTypes.Code, "CODE.FROMFLOAT", StackTypes.Float)]
+ [StorableClass]
public class CodeFromFloatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count == 0) return false;
-
+ public CodeFromFloatExpression() { }
+ [StorableConstructor]
+ public CodeFromFloatExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.FloatStack.Pop();
var expression = new FloatPushExpression(value);
interpreter.CodeStack.Push(expression);
-
- return true;
}
}
@@ -484,14 +566,19 @@
///
[PushExpression(StackTypes.Code, "CODE.FROMINTEGER", StackTypes.Integer)]
+ [StorableClass]
public class CodeFromIntegerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0) return false;
-
+ public CodeFromIntegerExpression() { }
+ [StorableConstructor]
+ public CodeFromIntegerExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.IntegerStack.Pop();
var expression = new IntegerPushExpression(value);
interpreter.CodeStack.Push(expression);
-
- return true;
}
}
@@ -501,14 +588,19 @@
///
[PushExpression(StackTypes.Code, "CODE.FROMNAME", StackTypes.Name)]
+ [StorableClass]
public class CodeFromNameExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.NameStack.Count == 0) return false;
-
+ public CodeFromNameExpression() { }
+ [StorableConstructor]
+ public CodeFromNameExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.NameStack.Pop();
var expression = new NameDefineXExecExpression(value);
interpreter.CodeStack.Push(expression);
-
- return true;
}
}
@@ -519,11 +611,17 @@
///
[PushExpression(StackTypes.Code, "CODE.CODEINSERT", StackTypes.Integer)]
+ [StorableClass]
public class CodeInsertExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0 ||
- interpreter.CodeStack.Count < 2 ||
- !interpreter.CodeStack.Top.IsProgram)
- return false;
-
+ public CodeInsertExpression() { }
+ [StorableConstructor]
+ public CodeInsertExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty ||
+ interpreter.CodeStack.Count < 2 ||
+ !interpreter.CodeStack.Top.IsProgram;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var source = interpreter.CodeStack[1];
var target = (PushProgram)interpreter.CodeStack.Pop();
@@ -545,6 +643,4 @@
var result = PushProgram.Create(interpreter.PoolContainer.PushProgramPool, newExpressions as IReadOnlyList);
interpreter.CodeStack.SetTop(result);
-
- return true;
}
}
@@ -557,8 +653,15 @@
///
[PushExpression(StackTypes.Code, "CODE.LENGTH", StackTypes.Integer)]
+ [StorableClass]
public class CodeLengthExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeLengthExpression() { }
+ [StorableConstructor]
+ public CodeLengthExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = interpreter.CodeStack.Pop();
var count = 1;
@@ -568,6 +671,4 @@
interpreter.IntegerStack.Push(count);
-
- return true;
}
}
@@ -577,11 +678,17 @@
///
[PushExpression(StackTypes.Code, "CODE.LIST")]
+ [StorableClass]
public class CodeListExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2 ||
- (interpreter.CodeStack.Top.IsProgram && ((PushProgram)interpreter.CodeStack.Top).Depth == interpreter.Configuration.MaxDepth) ||
- (interpreter.CodeStack[1].IsProgram && ((PushProgram)interpreter.CodeStack[1]).Depth == interpreter.Configuration.MaxDepth))
- return false;
-
+ public CodeListExpression() { }
+ [StorableConstructor]
+ public CodeListExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2 ||
+ (interpreter.CodeStack.Top.IsProgram && ((PushProgram)interpreter.CodeStack.Top).Depth == interpreter.Configuration.MaxDepth) ||
+ (interpreter.CodeStack[1].IsProgram && ((PushProgram)interpreter.CodeStack[1]).Depth == interpreter.Configuration.MaxDepth);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.CodeStack.Pop();
var second = interpreter.CodeStack.Top;
@@ -592,8 +699,5 @@
var expandExpression = PushProgram.Create(interpreter.PoolContainer.PushProgramPool, expressions);
-
interpreter.CodeStack.SetTop(expandExpression);
-
- return true;
}
}
@@ -604,8 +708,15 @@
///
[PushExpression(StackTypes.Code, "CODE.MEMBER", StackTypes.Boolean)]
+ [StorableClass]
public class CodeMemberExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2) return false;
-
+ public CodeMemberExpression() { }
+ [StorableConstructor]
+ public CodeMemberExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.CodeStack[1];
var second = interpreter.CodeStack.Top;
@@ -617,6 +728,4 @@
interpreter.BooleanStack.Push(contains);
-
- return true;
}
}
@@ -628,8 +737,15 @@
///
[PushExpression(StackTypes.Code, "CODE.NTH", StackTypes.Integer)]
+ [StorableClass]
public class CodeNthExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if ((interpreter.CodeStack.Count == 0) || (interpreter.IntegerStack.Count == 0)) return false;
-
+ public CodeNthExpression() { }
+ [StorableConstructor]
+ public CodeNthExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty || interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var n = interpreter.IntegerStack.Pop();
var expression = interpreter.CodeStack.Top;
@@ -652,6 +768,4 @@
interpreter.CodeStack.SetTop(nthExpression);
-
- return true;
}
}
@@ -666,8 +780,15 @@
///
[PushExpression(StackTypes.Code, "CODE.NTHCDR", StackTypes.Integer)]
+ [StorableClass]
public class CodeNthCdrExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if ((interpreter.CodeStack.Count == 0) || (interpreter.IntegerStack.Count == 0)) return false;
-
+ public CodeNthCdrExpression() { }
+ [StorableConstructor]
+ public CodeNthCdrExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty || interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var n = interpreter.IntegerStack.Pop();
var expression = interpreter.CodeStack.Top;
@@ -690,6 +811,4 @@
interpreter.CodeStack.SetTop(nthExpression);
-
- return true;
}
}
@@ -699,13 +818,18 @@
///
[PushExpression(StackTypes.Code, "CODE.NULL", StackTypes.Boolean)]
+ [StorableClass]
public class CodeNullExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeNullExpression() { }
+ [StorableConstructor]
+ public CodeNullExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var top = interpreter.CodeStack.Pop();
var result = top.IsProgram && ((PushProgram)top).IsEmpty;
interpreter.BooleanStack.Push(result);
-
- return true;
}
}
@@ -716,8 +840,15 @@
///
[PushExpression(StackTypes.Code, "CODE.POSITION", StackTypes.Integer)]
+ [StorableClass]
public class CodePositionExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count < 2) return false;
-
+ public CodePositionExpression() { }
+ [StorableConstructor]
+ public CodePositionExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var second = interpreter.CodeStack[1];
var first = interpreter.CodeStack.Top;
@@ -733,6 +864,4 @@
interpreter.IntegerStack.Push(position);
-
- return true;
}
}
@@ -743,8 +872,15 @@
///
[PushExpression(StackTypes.Code, "CODE.SIZE", StackTypes.Integer)]
+ [StorableClass]
public class CodeSizeExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CodeStack.Count == 0) return false;
-
+ public CodeSizeExpression() { }
+ [StorableConstructor]
+ public CodeSizeExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var expression = interpreter.CodeStack.Pop();
var points = expression.IsProgram
@@ -753,6 +889,4 @@
interpreter.IntegerStack.Push(points);
-
- return true;
}
}
@@ -765,10 +899,16 @@
///
[PushExpression(StackTypes.Code, "CODE.SUBST")]
+ [StorableClass]
public class CodeSubstitutionExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if ((interpreter.CodeStack.Count < 3) ||
- (interpreter.CodeStack.Top.GetType() != typeof(PushProgram)))
- return false;
-
+ public CodeSubstitutionExpression() { }
+ [StorableConstructor]
+ public CodeSubstitutionExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return (interpreter.CodeStack.Count < 3) ||
+ (interpreter.CodeStack.Top.GetType() != typeof(PushProgram));
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var third = interpreter.CodeStack[2];
var second = interpreter.CodeStack[1];
@@ -789,8 +929,5 @@
var result = PushProgram.Create(interpreter.PoolContainer.PushProgramPool, newExpressions);
-
interpreter.CodeStack.SetTop(result);
-
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DefineExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DefineExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DefineExpressions.cs (revision 14952)
@@ -4,4 +4,7 @@
using Attributes;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
@@ -12,13 +15,15 @@
///
/// Stacktype
+ [StorableClass]
public abstract class DefineExpression : StatelessExpression {
- protected bool Eval(
+ protected DefineExpression() { }
+ [StorableConstructor]
+ protected DefineExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(
IPushStack stack,
IPushStack nameStack,
IDictionary customExpressions,
Func creator) {
- // not enough arguments on stack
- if ((nameStack.Count == 0) || (stack.Count < 1)) return false;
-
var name = nameStack.Pop();
var expression = creator(stack.Top);
@@ -26,14 +31,21 @@
if (customExpressions.ContainsKey(name)) customExpressions[name] = expression;
else customExpressions.Add(name, expression);
-
- return true;
}
}
[PushExpression(StackTypes.Code, "CODE.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class CodeDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.Configuration.TopLevelPushCode && (interpreter.CodeStack.Count < 2)) return false;
-
+ public CodeDefineExpression() { }
+ [StorableConstructor]
+ protected CodeDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return (interpreter.Configuration.TopLevelPushCode && interpreter.CodeStack.Count < 2) ||
+ interpreter.CodeStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
Eval(
interpreter.CodeStack,
@@ -43,15 +55,21 @@
interpreter.CodeStack.Pop();
-
- return true;
}
}
[PushExpression(StackTypes.Exec, "EXEC.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class ExecDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.Count < 2) return false;
-
- var noop = Eval(
+ public ExecDefineExpression() { }
+ [StorableConstructor]
+ protected ExecDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count < 2 ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.ExecStack,
interpreter.NameStack,
@@ -59,16 +77,22 @@
v => new ExecPushExpression(v));
- if (!noop)
- interpreter.ExecStack.Pop();
-
- return noop;
+ interpreter.ExecStack.Pop();
}
}
[PushExpression(StackTypes.Float, "FLOAT.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class FloatDefineExpression : DefineExpression {
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public FloatDefineExpression() { }
+ [StorableConstructor]
+ protected FloatDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.FloatStack,
interpreter.NameStack,
@@ -79,7 +103,17 @@
[PushExpression(StackTypes.Integer, "INTEGER.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class IntegerDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public IntegerDefineExpression() { }
+ [StorableConstructor]
+ protected IntegerDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.IntegerStack,
interpreter.NameStack,
@@ -90,7 +124,17 @@
[PushExpression(StackTypes.Boolean, "BOOLEAN.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class BooleanDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public BooleanDefineExpression() { }
+ [StorableConstructor]
+ protected BooleanDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.BooleanStack,
interpreter.NameStack,
@@ -101,7 +145,17 @@
[PushExpression(StackTypes.Char, "CHAR.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class CharDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public CharDefineExpression() { }
+ [StorableConstructor]
+ protected CharDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.CharStack,
interpreter.NameStack,
@@ -112,7 +166,17 @@
[PushExpression(StackTypes.String, "STRING.DEFINE", StackTypes.Name)]
+ [StorableClass]
public class StringDefineExpression : DefineExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public StringDefineExpression() { }
+ [StorableConstructor]
+ protected StringDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.StringStack,
interpreter.NameStack,
@@ -123,7 +187,17 @@
[PushExpression(StackTypes.IntegerVector, "INTEGER[].DEFINE", StackTypes.Name)]
+ [StorableClass]
public class IntegerVectorDefineExpression : DefineExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public IntegerVectorDefineExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.IntegerVectorStack,
interpreter.NameStack,
@@ -134,7 +208,17 @@
[PushExpression(StackTypes.FloatVector, "FLOAT[].DEFINE", StackTypes.Name)]
+ [StorableClass]
public class FloatVectorDefineExpression : DefineExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public FloatVectorDefineExpression() { }
+ [StorableConstructor]
+ protected FloatVectorDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.FloatVectorStack,
interpreter.NameStack,
@@ -145,7 +229,17 @@
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].DEFINE", StackTypes.Name)]
+ [StorableClass]
public class BooleanVectorDefineExpression : DefineExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public BooleanVectorDefineExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.BooleanVectorStack,
interpreter.NameStack,
@@ -156,7 +250,17 @@
[PushExpression(StackTypes.StringVector, "STRING[].DEFINE", StackTypes.Name)]
+ [StorableClass]
public class StringVectorDefineExpression : DefineExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(
+ public StringVectorDefineExpression() { }
+ [StorableConstructor]
+ protected StringVectorDefineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.IsEmpty ||
+ interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(
interpreter.StringVectorStack,
interpreter.NameStack,
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoCountExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoCountExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoCountExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
@@ -7,8 +8,11 @@
[Serializable]
+ [StorableClass]
public abstract class DoCountExpression : LoopExpression {
protected DoCountExpression() { }
protected DoCountExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected DoCountExpression(bool deserializing) : base(deserializing) { }
protected override bool HasInsufficientArguments(IInternalPushInterpreter interpreter, IPushStack sourceStack) {
return interpreter.IntegerStack.Count < 1 ||
@@ -44,13 +48,18 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.DO*COUNT", StackTypes.Integer)]
public class CodeDoCountExpression : DoCountExpression {
public CodeDoCountExpression() { }
+ public CodeDoCountExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected CodeDoCountExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.CodeStack);
+ }
- public CodeDoCountExpression(LoopState state) : base(state) { }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.CodeStack);
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.CodeStack);
}
@@ -78,11 +87,18 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.DO*COUNT", StackTypes.Integer)]
public class ExecDoCountExpression : DoCountExpression {
public ExecDoCountExpression() { }
public ExecDoCountExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected ExecDoCountExpression(bool deserializing) : base(deserializing) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.ExecStack);
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.ExecStack);
+ }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.ExecStack);
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoRangeExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoRangeExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoRangeExpressions.cs (revision 14952)
@@ -3,11 +3,18 @@
using Attributes;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
[Serializable]
+ [StorableClass]
public abstract class DoRangeExpression : LoopExpression {
protected DoRangeExpression() { }
protected DoRangeExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected DoRangeExpression(bool deserializing) : base(deserializing) { }
+
protected override bool HasInsufficientArguments(IInternalPushInterpreter interpreter, IPushStack sourceStack) {
return interpreter.IntegerStack.Count < 2 ||
@@ -51,11 +58,18 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.DO*RANGE", StackTypes.Integer)]
public class CodeDoRangeExpression : DoRangeExpression {
public CodeDoRangeExpression() { }
+ public CodeDoRangeExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected CodeDoRangeExpression(bool deserializing) : base(deserializing) { }
- public CodeDoRangeExpression(LoopState state) : base(state) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.CodeStack);
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.CodeStack);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.CodeStack);
}
@@ -93,4 +107,5 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.DO*RANGE", StackTypes.Integer)]
public class ExecDoRangeExpression : DoRangeExpression {
@@ -98,6 +113,13 @@
public ExecDoRangeExpression(LoopState state) : base(state) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.ExecStack);
+ [StorableConstructor]
+ protected ExecDoRangeExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.ExecStack);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.ExecStack);
}
protected override LoopExpression Clone(LoopState state, IInternalPushInterpreter interpreter) {
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoTimesExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoTimesExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DoTimesExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
@@ -7,7 +8,11 @@
[Serializable]
+ [StorableClass]
public abstract class DoTimesExpression : LoopExpression {
protected DoTimesExpression() { }
protected DoTimesExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected DoTimesExpression(bool deserializing) : base(deserializing) { }
+
protected override bool HasInsufficientArguments(IInternalPushInterpreter interpreter, IPushStack sourceStack) {
return (interpreter.IntegerStack.Count < 1) || (sourceStack.Count == 0) || (interpreter.IntegerStack.Top <= 0);
@@ -41,11 +46,17 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.DO*TIMES", StackTypes.Integer)]
public class CodeDoTimesExpression : DoTimesExpression {
public CodeDoTimesExpression() { }
public CodeDoTimesExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected CodeDoTimesExpression(bool deserializing) : base(deserializing) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.CodeStack);
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.CodeStack);
+ }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.CodeStack);
}
@@ -68,11 +79,18 @@
///
[Serializable]
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.DO*TIMES", StackTypes.Integer)]
public class ExecDoTimesExpression : DoTimesExpression {
public ExecDoTimesExpression() { }
public ExecDoTimesExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected ExecDoTimesExpression(bool deserializing) : base(deserializing) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.ExecStack);
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.ExecStack);
+ }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return State.Body == null && HasInsufficientArguments(interpreter, interpreter.ExecStack);
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DuplicateExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DuplicateExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DuplicateExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
@@ -11,81 +12,172 @@
///
/// Stacktype
+ [StorableClass]
public abstract class DuplicateExpression : StatelessExpression {
- protected bool Eval(IPushStack stack) {
- if (stack.Count == 0) return false;
+ protected DuplicateExpression() { }
+ [StorableConstructor]
+ protected DuplicateExpression(bool deserializing) : base(deserializing) { }
+ protected void Eval(IPushStack stack) {
stack.Push(stack.Top);
-
- return true;
}
}
+ [StorableClass]
[PushExpression(StackTypes.Integer, "INTEGER.DUP")]
public class IntegerDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
+ public IntegerDuplicateExpression() { }
+ [StorableConstructor]
+ protected IntegerDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Float, "FLOAT.DUP")]
public class FloatDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
+ public FloatDuplicateExpression() { }
+ [StorableConstructor]
+ protected FloatDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Boolean, "BOOLEAN.DUP")]
public class BooleanDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack);
+ public BooleanDuplicateExpression() { }
+ [StorableConstructor]
+ protected BooleanDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Name, "NAME.DUP")]
public class NameDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack);
+ public NameDuplicateExpression() { }
+ [StorableConstructor]
+ protected NameDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.DUP")]
public class ExecDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack);
+ public ExecDuplicateExpression() { }
+ [StorableConstructor]
+ protected ExecDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.DUP")]
public class CodeDuplicateExpression : DuplicateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack);
+ public CodeDuplicateExpression() { }
+ [StorableConstructor]
+ protected CodeDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.IntegerVector, "INTEGER[].DUP")]
public class IntegerVectorDuplicateExpression : DuplicateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack);
+ public IntegerVectorDuplicateExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.FloatVector, "FLOAT[].DUP")]
public class FloatVectorDuplicateExpression : DuplicateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack);
+ public FloatVectorDuplicateExpression() { }
+ [StorableConstructor]
+ protected FloatVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].DUP")]
public class BooleanVectorDuplicateExpression : DuplicateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack);
+ public BooleanVectorDuplicateExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.StringVector, "STRING[].DUP")]
public class StringVectorDuplicateExpression : DuplicateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack);
+ public StringVectorDuplicateExpression() { }
+ [StorableConstructor]
+ protected StringVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EmptyExpression.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EmptyExpression.cs (revision 14952)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EmptyExpression.cs (revision 14952)
@@ -0,0 +1,141 @@
+namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
+ using System.Collections.Generic;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+ using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
+ using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
+
+ using Stack;
+
+ ///
+ /// Tells whether that stack is empty.
+ ///
+ [StorableClass]
+ public abstract class EmptyExpression : StatelessExpression {
+ protected EmptyExpression() { }
+ [StorableConstructor]
+ protected EmptyExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return false;
+ }
+
+ public void Eval(IPushStack stack, IPushStack booleanStack) {
+ booleanStack.Push(stack.IsEmpty);
+ }
+ }
+
+ [StorableClass]
+ [PushExpression(StackTypes.Exec, "EXEC.EMPTY", StackTypes.Boolean)]
+ public class ExecEmptyExpression : EmptyExpression {
+ public ExecEmptyExpression() { }
+ [StorableConstructor]
+ protected ExecEmptyExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
+ [PushExpression(StackTypes.Code, "CODE.EMPTY", StackTypes.Boolean)]
+ public class CodeEmptyExpression : EmptyExpression {
+ public CodeEmptyExpression() { }
+ [StorableConstructor]
+ protected CodeEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
+ [PushExpression(StackTypes.Integer, "INTEGER.EMPTY", StackTypes.Boolean)]
+ public class IntegerEmptyExpression : EmptyExpression {
+ public IntegerEmptyExpression() { }
+ [StorableConstructor]
+ protected IntegerEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.Float, "FLOAT.EMPTY", StackTypes.Boolean)]
+ public class FloatEmptyExpression : EmptyExpression {
+ public FloatEmptyExpression() { }
+ [StorableConstructor]
+ protected FloatEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.Boolean, "BOOLEAN.EMPTY", StackTypes.Boolean)]
+ public class BooleanEmptyExpression : EmptyExpression {
+ public BooleanEmptyExpression() { }
+ [StorableConstructor]
+ protected BooleanEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.Char, "CHAR.EMPTY", StackTypes.Boolean)]
+ public class CharEmptyExpression : EmptyExpression {
+ public CharEmptyExpression() { }
+ [StorableConstructor]
+ protected CharEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.String, "STRING.EMPTY", StackTypes.Boolean)]
+ public class StringEmptyExpression : EmptyExpression {
+ public StringEmptyExpression() { }
+ [StorableConstructor]
+ protected StringEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.IntegerVector, "INTEGER[].EMPTY", StackTypes.Boolean)]
+ public class IntegerVectorEmptyExpression : EmptyExpression> {
+ public IntegerVectorEmptyExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.FloatVector, "FLOAT[].EMPTY", StackTypes.Boolean)]
+ public class FloatVectorEmptyExpression : EmptyExpression> {
+ public FloatVectorEmptyExpression() { }
+ [StorableConstructor]
+ protected FloatVectorEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].EMPTY", StackTypes.Boolean)]
+ public class BooleanVectorEmptyExpression : EmptyExpression> {
+ public BooleanVectorEmptyExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [PushExpression(StackTypes.StringVector, "STRING[].EMPTY", StackTypes.Boolean)]
+ public class StringVectorEmptyExpression : EmptyExpression> {
+ public StringVectorEmptyExpression() { }
+ [StorableConstructor]
+ protected StringVectorEmptyExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
+ }
+ }
+}
Index: anches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EmptyExpresssion.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EmptyExpresssion.cs (revision 14951)
+++ (revision )
@@ -1,96 +1,0 @@
-namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
- using System.Collections.Generic;
-
- using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
- using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
-
- using Stack;
-
- ///
- /// Tells whether that stack is empty.
- ///
- public abstract class EmptyExpresssion : StatelessExpression {
- public bool Eval(IPushStack stack, IPushStack booleanStack) {
- booleanStack.Push(stack.IsEmpty);
-
- return true;
- }
- }
-
- [PushExpression(StackTypes.Exec, "EXEC.EMPTY", StackTypes.Boolean)]
- public class ExecEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.Code, "CODE.EMPTY", StackTypes.Boolean)]
- public class CodeEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.Integer, "INTEGER.EMPTY", StackTypes.Boolean)]
- public class IntegerEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.Float, "FLOAT.EMPTY", StackTypes.Boolean)]
- public class FloatEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.Boolean, "BOOLEAN.EMPTY", StackTypes.Boolean)]
- public class BooleanEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.Char, "CHAR.EMPTY", StackTypes.Boolean)]
- public class CharEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.String, "STRING.EMPTY", StackTypes.Boolean)]
- public class StringEmptyExpression : EmptyExpresssion {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.IntegerVector, "INTEGER[].EMPTY", StackTypes.Boolean)]
- public class IntegerVectorEmptyExpression : EmptyExpresssion> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.FloatVector, "FLOAT[].EMPTY", StackTypes.Boolean)]
- public class FloatVectorEmptyExpression : EmptyExpresssion> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].EMPTY", StackTypes.Boolean)]
- public class BooleanVectorEmptyExpression : EmptyExpresssion> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
- }
- }
-
- [PushExpression(StackTypes.StringVector, "STRING[].EMPTY", StackTypes.Boolean)]
- public class StringVectorEmptyExpression : EmptyExpresssion> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
- }
- }
-}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EqualsExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EqualsExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/EqualsExpressions.cs (revision 14952)
@@ -2,5 +2,7 @@
using System.Collections.Generic;
using Attributes;
- using Common;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
@@ -10,8 +12,11 @@
///
/// Stacktype
+ [StorableClass]
public abstract class EqualsExpression : StatelessExpression {
- public bool Eval(IPushStack stack, IPushStack booleanStack) {
- if (stack.Count < 2) return false;
-
+ protected EqualsExpression() { }
+ [StorableConstructor]
+ protected EqualsExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack, IPushStack booleanStack) {
var first = stack[1];
var second = stack.Top;
@@ -19,97 +24,196 @@
booleanStack.Push(first.Equals(second));
-
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Integer, "INTEGER.=", StackTypes.Boolean)]
public class IntegerEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack, interpreter.BooleanStack);
- }
- }
-
+ public IntegerEqualsExpression() { }
+ [StorableConstructor]
+ protected IntegerEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Float, "FLOAT.=", StackTypes.Boolean)]
public class FloatEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2) return false;
-
- var first = interpreter.FloatStack[1];
- var second = interpreter.FloatStack.Top;
- interpreter.FloatStack.Remove(2);
-
- interpreter.BooleanStack.Push(first.IsAlmost(second));
- return true;
- }
- }
-
+ public FloatEqualsExpression() { }
+ [StorableConstructor]
+ protected FloatEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Boolean, "BOOLEAN.=", StackTypes.Boolean)]
public class BooleanEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack, interpreter.BooleanStack);
- }
- }
-
+ public BooleanEqualsExpression() { }
+ [StorableConstructor]
+ protected BooleanEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Name, "NAME.=", StackTypes.Boolean)]
public class NameEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack, interpreter.BooleanStack);
- }
- }
-
+ public NameEqualsExpression() { }
+ [StorableConstructor]
+ protected NameEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.=", StackTypes.Boolean)]
public class ExecEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack, interpreter.BooleanStack);
- }
- }
-
+ public ExecEqualsExpression() { }
+ [StorableConstructor]
+ protected ExecEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.=", StackTypes.Boolean)]
public class CodeEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack, interpreter.BooleanStack);
- }
- }
-
+ public CodeEqualsExpression() { }
+ [StorableConstructor]
+ protected CodeEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Char, "CHAR.=", StackTypes.Boolean)]
public class CharEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack, interpreter.BooleanStack);
- }
- }
-
+ public CharEqualsExpression() { }
+ [StorableConstructor]
+ protected CharEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.=", StackTypes.Boolean)]
public class StringEqualsExpression : EqualsExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack, interpreter.BooleanStack);
- }
- }
-
+ public StringEqualsExpression() { }
+ [StorableConstructor]
+ protected StringEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.IntegerVector, "INTEGER[].=", StackTypes.Boolean)]
public class IntegerVectorEqualsExpression : EqualsExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
- }
- }
-
+ public IntegerVectorEqualsExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.FloatVector, "FLOAT[].=", StackTypes.Boolean)]
public class FloatVectorEqualsExpression : EqualsExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
- }
- }
-
+ public FloatVectorEqualsExpression() { }
+ [StorableConstructor]
+ protected FloatVectorEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].=", StackTypes.Boolean)]
public class BooleanVectorEqualsExpression : EqualsExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
- }
- }
-
+ public BooleanVectorEqualsExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.StringVector, "STRING[].=", StackTypes.Boolean)]
public class StringVectorEqualsExpression : EqualsExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
+ public StringVectorEqualsExpression() { }
+ [StorableConstructor]
+ protected StringVectorEqualsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExecExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExecExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExecExpressions.cs (revision 14952)
@@ -1,4 +1,4 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
-
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
@@ -12,16 +12,20 @@
/// one item on the BOOLEAN stack.
///
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.IF", StackTypes.Boolean)]
public class ExecIfExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if ((interpreter.BooleanStack.Count == 0) || (interpreter.ExecStack.Count < 2)) return false;
-
+ public ExecIfExpression() { }
+ [StorableConstructor]
+ protected ExecIfExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return (interpreter.BooleanStack.Count == 0) || (interpreter.ExecStack.Count < 2);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var condition = interpreter.BooleanStack.Pop();
if (condition) interpreter.ExecStack.RemoveAt(interpreter.ExecStack.Count - 2);
else interpreter.ExecStack.RemoveTop();
-
- return true;
}
}
@@ -32,16 +36,18 @@
///
[PushExpression(StackTypes.Exec, "EXEC.Y")]
+ [StorableClass]
public class ExecYExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- // not enough arguments on stack
- if (interpreter.ExecStack.Count == 0 ||
- interpreter.Configuration.MaxPointsInProgram < 2)
- return false;
-
+ public ExecYExpression() { }
+ [StorableConstructor]
+ protected ExecYExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count == 0 ||
+ interpreter.Configuration.MaxPointsInProgram < 2 ||
+ (interpreter.ExecStack.Top.IsProgram && ((PushProgram)interpreter.ExecStack.Top).Depth == interpreter.Configuration.MaxDepth);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var top = interpreter.ExecStack.Top;
-
- if (top is PushProgram && ((PushProgram)top).Depth == interpreter.Configuration.MaxDepth)
- return false;
-
var execYExpression = ExpressionTable.GetStatelessExpression();
var expressions = interpreter.PoolContainer.ExpressionListPool.Get();
@@ -54,6 +60,4 @@
interpreter.ExecStack.SetTop(result);
interpreter.ExecStack.Add(top);
-
- return true;
}
}
@@ -63,12 +67,17 @@
///
[PushExpression(StackTypes.Exec, "EXEC.K")]
+ [StorableClass]
public class ExecKExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.Count < 2) return false;
-
+ public ExecKExpression() { }
+ [StorableConstructor]
+ protected ExecKExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var top = interpreter.ExecStack.Pop();
interpreter.ExecStack.SetTop(top);
-
- return true;
}
}
@@ -80,13 +89,17 @@
///
[PushExpression(StackTypes.Exec, "EXEC.S")]
+ [StorableClass]
public class ExecSExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.Count < 3) return false;
-
- // check max depth
- if ((interpreter.ExecStack.Top is PushProgram && ((PushProgram)interpreter.ExecStack.Top).Depth == interpreter.Configuration.MaxDepth) ||
- (interpreter.ExecStack[1] is PushProgram && ((PushProgram)interpreter.ExecStack[1]).Depth == interpreter.Configuration.MaxDepth))
- return false;
-
+ public ExecSExpression() { }
+ [StorableConstructor]
+ protected ExecSExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count < 3 ||
+ (interpreter.ExecStack.Top is PushProgram && ((PushProgram)interpreter.ExecStack.Top).Depth == interpreter.Configuration.MaxDepth) ||
+ (interpreter.ExecStack[1] is PushProgram && ((PushProgram)interpreter.ExecStack[1]).Depth == interpreter.Configuration.MaxDepth);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var a = interpreter.ExecStack.Top;
var b = interpreter.ExecStack[1];
@@ -102,28 +115,41 @@
interpreter.ExecStack.SetTop(newTop);
interpreter.ExecStack.Push(c, a);
-
+ }
+ }
+
+ ///
+ /// Does nothing.
+ ///
+ [PushExpression(StackTypes.Exec, "EXEC.NOOP")]
+ [StorableClass]
+ public class ExecNoopExpression : StatelessExpression {
+ public ExecNoopExpression() { }
+ [StorableConstructor]
+ protected ExecNoopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
return true;
}
- }
-
- ///
- /// Does nothing.
- ///
- [PushExpression(StackTypes.Exec, "EXEC.NOOP")]
- public class ExecNoopExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return false;
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ // do nothing
}
}
[PushExpression(StackTypes.Exec, "EXEC.WHILE", StackTypes.Boolean)]
+ [StorableClass]
public class ExecWhileExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.IsEmpty)
- return false;
-
+ public ExecWhileExpression() { }
+ [StorableConstructor]
+ protected ExecWhileExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
if (interpreter.BooleanStack.IsEmpty) {
interpreter.ExecStack.Pop();
- return true;
+ return;
}
@@ -132,30 +158,40 @@
if (!booleanTop) {
interpreter.ExecStack.Pop();
- return true;
+ return;
}
interpreter.ExecStack.Push(this, interpreter.ExecStack.Top);
- return true;
}
}
[PushExpression(StackTypes.Exec, "EXEC.DO*WHILE")]
+ [StorableClass]
public class ExecDoWhileExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.IsEmpty)
- return false;
-
+ public ExecDoWhileExpression() { }
+ [StorableConstructor]
+ protected ExecDoWhileExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.ExecStack.Push(this, interpreter.ExecStack.Top);
- return true;
}
}
[PushExpression(StackTypes.Exec, "EXEC.WHEN", StackTypes.Boolean)]
+ [StorableClass]
public class ExecWhenExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.ExecStack.IsEmpty ||
- interpreter.BooleanStack.IsEmpty)
- return false;
-
+ public ExecWhenExpression() { }
+ [StorableConstructor]
+ protected ExecWhenExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty ||
+ interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var when = interpreter.BooleanStack.Pop();
@@ -163,6 +199,4 @@
interpreter.ExecStack.Pop();
}
-
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/Expression.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/Expression.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/Expression.cs (revision 14952)
@@ -2,4 +2,7 @@
using System;
using System.Collections.Generic;
+
+ using HeuristicLab.Common;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
@@ -7,5 +10,12 @@
[Serializable]
- public abstract class Expression : IPooledObject {
+ [StorableClass]
+ public abstract class Expression : IDeepCloneable, IPooledObject {
+
+ protected Expression() { }
+
+ [StorableConstructor]
+ protected Expression(bool deserializing) { }
+
public bool IsProgram { get { return GetType() == typeof(PushProgram); } }
@@ -20,7 +30,14 @@
}
- //public abstract bool IsNoop(IInternalPushInterpreter interpreter);
+ public abstract bool IsNoop(IInternalPushInterpreter interpreter);
+ public abstract void Eval(IInternalPushInterpreter interpreter);
- public abstract bool Eval(IInternalPushInterpreter interpreter);
+ public bool TryEval(IInternalPushInterpreter interpreter) {
+ if (IsNoop(interpreter))
+ return false;
+
+ Eval(interpreter);
+ return true;
+ }
public override string ToString() {
@@ -28,4 +45,12 @@
}
+ public object Clone() {
+ return this;
+ }
+
+ public IDeepCloneable Clone(Cloner cloner) {
+ return this;
+ }
+
void IPooledObject.Reset() { }
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExpressionTable.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExpressionTable.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ExpressionTable.cs (revision 14952)
@@ -9,6 +9,6 @@
public static class ExpressionTable {
- public static readonly IReadOnlyDictionary StatelessExpressionTable;
- public static readonly IReadOnlyDictionary> StatefulExpressionFactory;
+ public static readonly IReadOnlyDictionary StatelessExpressionTable;
+ public static readonly IReadOnlyDictionary> StatefulExpressionFactory;
public static readonly IReadOnlyList ExpressionNames;
public static readonly int ExpressionCount;
@@ -30,5 +30,9 @@
StatelessExpressionTable = GetStatelessExpressionTable();
StatefulExpressionFactory = GetStatefulExpressionFactory();
- ExpressionNames = StatelessExpressionTable.Keys.Concat(StatefulExpressionFactory.Keys).ToArray();
+
+ ExpressionNames = StatelessExpressionTable.Keys
+ .Concat(StatefulExpressionFactory.Keys)
+ .Select(type => typeToNameTable[type])
+ .ToArray();
ExpressionCount = StatelessExpressionTable.Count + StatefulExpressionFactory.Count;
@@ -42,6 +46,6 @@
public static IReadOnlyDictionary TypeToAttributeTable { get { return typeToAttributeTable; } }
- private static Dictionary GetStatelessExpressionTable() {
- var dictionary = new Dictionary();
+ private static Dictionary GetStatelessExpressionTable() {
+ var dictionary = new Dictionary();
foreach (var type in StatelessExpressionTypes) {
@@ -50,5 +54,5 @@
typeToAttributeTable.Add(type, attribute);
- dictionary.Add(attribute.ExpressionName, expression);
+ dictionary.Add(type, expression);
indexToNameTable.Add(indexToNameTable.Keys.Count, attribute.ExpressionName);
typeToNameTable.Add(type, attribute.ExpressionName);
@@ -72,6 +76,6 @@
}
- private static Dictionary> GetStatefulExpressionFactory() {
- var dictionary = new Dictionary>();
+ private static Dictionary> GetStatefulExpressionFactory() {
+ var dictionary = new Dictionary>();
foreach (var type in StatefulExpressionTypes) {
@@ -84,5 +88,5 @@
typeToAttributeTable.Add(type, attribute);
- dictionary.Add(attribute.ExpressionName, creator);
+ dictionary.Add(type, creator);
indexToNameTable.Add(indexToNameTable.Keys.Count, attribute.ExpressionName);
typeToNameTable.Add(type, attribute.ExpressionName);
@@ -180,17 +184,16 @@
public static Expression GetStatelessExpression(string name) {
- if (StatelessExpressionTable.ContainsKey(name))
- return StatelessExpressionTable[name];
+ if (NameToTypeTable.ContainsKey(name) && StatelessExpressionTable.ContainsKey(NameToTypeTable[name]))
+ return StatelessExpressionTable[NameToTypeTable[name]];
throw new NotSupportedException("Expression not supported: " + name);
}
public static bool TryGetStatelessExpression(string name, out Expression expression) {
- if (!StatelessExpressionTable.ContainsKey(name)) {
+ if (!NameToTypeTable.ContainsKey(name) || !StatelessExpressionTable.ContainsKey(NameToTypeTable[name])) {
expression = null;
return false;
}
- expression = StatelessExpressionTable[name];
-
+ expression = StatelessExpressionTable[NameToTypeTable[name]];
return true;
}
@@ -201,13 +204,18 @@
public static Expression GetStatefulExpression(string name) {
- Func creator;
- if (StatefulExpressionFactory.TryGetValue(name, out creator))
- return creator();
+ if (NameToTypeTable.ContainsKey(name)) {
+ Func creator;
+ var type = NameToTypeTable[name];
+
+ if (StatefulExpressionFactory.TryGetValue(type, out creator))
+ return creator();
+ }
+
throw new NotSupportedException("Expression not supported: " + name);
}
public static bool TryGetStatefulExpression(string name, out Expression expression) {
- if (StatefulExpressionFactory.ContainsKey(name)) {
- expression = StatefulExpressionFactory[name]();
+ if (NameToTypeTable.ContainsKey(name)) {
+ expression = StatefulExpressionFactory[NameToTypeTable[name]]();
return true;
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FloatExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FloatExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FloatExpressions.cs (revision 14952)
@@ -2,4 +2,6 @@
using System;
using Common;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
@@ -10,9 +12,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.+")]
+ [StorableClass]
public class FloatAddExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatAddExpression() { }
+ [StorableConstructor]
+ protected FloatAddExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -23,5 +31,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -31,9 +38,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.-")]
+ [StorableClass]
public class FloatSubtractExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatSubtractExpression() { }
+ [StorableConstructor]
+ protected FloatSubtractExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -44,5 +57,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -52,9 +64,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.*")]
+ [StorableClass]
public class FloatMultiplyExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatMultiplyExpression() { }
+ [StorableConstructor]
+ protected FloatMultiplyExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -65,5 +83,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -74,10 +91,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT./")]
+ [StorableClass]
public class FloatDivideExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2 ||
- interpreter.FloatStack.Top.IsAlmost(0))
- return false;
-
+ public FloatDivideExpression() { }
+ [StorableConstructor]
+ protected FloatDivideExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2 || interpreter.FloatStack.Top.IsAlmost(0);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -88,5 +110,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -100,10 +121,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.%")]
+ [StorableClass]
public class FloatModuloExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2 ||
- interpreter.FloatStack.Top.IsAlmost(0))
- return false;
-
+ public FloatModuloExpression() { }
+ [StorableConstructor]
+ protected FloatModuloExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2 || interpreter.FloatStack.Top.IsAlmost(0);
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -111,5 +137,4 @@
interpreter.FloatStack.SetTop(result);
- return true; ;
}
}
@@ -119,9 +144,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.MIN")]
+ [StorableClass]
public class FloatMinExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatMinExpression() { }
+ [StorableConstructor]
+ protected FloatMinExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -129,5 +160,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -137,9 +167,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.MAX")]
+ [StorableClass]
public class FloatMaxExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatMaxExpression() { }
+ [StorableConstructor]
+ protected FloatMaxExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Pop();
var second = interpreter.FloatStack.Top;
@@ -147,5 +183,4 @@
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -155,9 +190,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.<", StackTypes.Boolean)]
+ [StorableClass]
public class FloatSmallerThanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatSmallerThanExpression() { }
+ [StorableConstructor]
+ protected FloatSmallerThanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Top;
var second = interpreter.FloatStack[1];
@@ -166,5 +207,4 @@
var result = second < first;
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -174,9 +214,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.<=", StackTypes.Boolean)]
+ [StorableClass]
public class FloatSmallerThanOrEqualExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatSmallerThanOrEqualExpression() { }
+ [StorableConstructor]
+ protected FloatSmallerThanOrEqualExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Top;
var second = interpreter.FloatStack[1];
@@ -185,5 +231,4 @@
var result = second < first || second.IsAlmost(first);
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -193,9 +238,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.>", StackTypes.Boolean)]
+ [StorableClass]
public class FloatGreaterThanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatGreaterThanExpression() { }
+ [StorableConstructor]
+ protected FloatGreaterThanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Top;
var second = interpreter.FloatStack[1];
@@ -204,5 +255,4 @@
var result = second > first;
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -212,9 +262,15 @@
///
[PushExpression(StackTypes.Float, "FLOAT.>=", StackTypes.Boolean)]
+ [StorableClass]
public class FloatGreaterThanOrEqualExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count < 2)
- return false;
-
+ public FloatGreaterThanOrEqualExpression() { }
+ [StorableConstructor]
+ protected FloatGreaterThanOrEqualExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.FloatStack.Top;
var second = interpreter.FloatStack[1];
@@ -223,5 +279,4 @@
var result = second > first || second.IsAlmost(first);
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -231,12 +286,17 @@
///
[PushExpression(StackTypes.Float, "FLOAT.SIN")]
+ [StorableClass]
public class FloatSineExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.IsEmpty)
- return false;
-
+ public FloatSineExpression() { }
+ [StorableConstructor]
+ protected FloatSineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var result = Math.Sin(interpreter.FloatStack.Top);
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -247,11 +307,15 @@
[PushExpression(StackTypes.Float, "FLOAT.COS")]
public class FloatCosineExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.IsEmpty)
- return false;
-
+ public FloatCosineExpression() { }
+ [StorableConstructor]
+ protected FloatCosineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var result = Math.Cos(interpreter.FloatStack.Top);
interpreter.FloatStack.SetTop(result);
- return true;
}
}
@@ -261,14 +325,19 @@
///
[PushExpression(StackTypes.Float, "FLOAT.FROMBOOLEAN", StackTypes.Boolean)]
+ [StorableClass]
public class FloatFromBooleanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count == 0) return false;
-
+ public FloatFromBooleanExpression() { }
+ [StorableConstructor]
+ protected FloatFromBooleanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var condition = interpreter.BooleanStack.Pop();
var value = condition ? 1 : 0;
interpreter.FloatStack.Push(value);
-
- return true;
}
}
@@ -278,13 +347,17 @@
///
[PushExpression(StackTypes.Float, "FLOAT.FROMINTEGER", StackTypes.Integer)]
+ [StorableClass]
public class FloatFromIntegerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0) return false;
-
+ public FloatFromIntegerExpression() { }
+ [StorableConstructor]
+ protected FloatFromIntegerExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = (double)interpreter.IntegerStack.Pop();
-
interpreter.FloatStack.Push(value);
-
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FlushExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FlushExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/FlushExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
@@ -11,92 +12,204 @@
///
/// Stacktype
+ [StorableClass]
public abstract class FlushExpression : StatelessExpression {
- public bool Eval(IPushStack stack) {
+ protected FlushExpression() { }
+ [StorableConstructor]
+ protected FlushExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack) {
stack.Clear();
- return true;
}
}
[PushExpression(StackTypes.Integer, "INTEGER.FLUSH")]
+ [StorableClass]
public class IntegerFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
+ public IntegerFlushExpression() { }
+ [StorableConstructor]
+ protected IntegerFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Float, "FLOAT.FLUSH")]
+ [StorableClass]
public class FloatFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
+ public FloatFlushExpression() { }
+ [StorableConstructor]
+ protected FloatFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
}
}
[PushExpression(StackTypes.Boolean, "BOOLEAN.FLUSH")]
+ [StorableClass]
public class BooleanFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack);
+ public BooleanFlushExpression() { }
+ [StorableConstructor]
+ protected BooleanFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack);
}
}
[PushExpression(StackTypes.Name, "NAME.FLUSH")]
+ [StorableClass]
public class NameFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack);
+ public NameFlushExpression() { }
+ [StorableConstructor]
+ protected NameFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack);
}
}
[PushExpression(StackTypes.Exec, "EXEC.FLUSH")]
+ [StorableClass]
public class ExecFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack);
+ public ExecFlushExpression() { }
+ [StorableConstructor]
+ protected ExecFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack);
}
}
[PushExpression(StackTypes.Code, "CODE.FLUSH")]
+ [StorableClass]
public class CodeFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack);
+ public CodeFlushExpression() { }
+ [StorableConstructor]
+ protected CodeFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack);
}
}
[PushExpression(StackTypes.Char, "CHAR.FLUSH")]
+ [StorableClass]
public class CharFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack);
+ public CharFlushExpression() { }
+ [StorableConstructor]
+ protected CharFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack);
}
}
[PushExpression(StackTypes.String, "STRING.FLUSH")]
+ [StorableClass]
public class StringFlushExpression : FlushExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack);
+ public StringFlushExpression() { }
+ [StorableConstructor]
+ protected StringFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack);
}
}
[PushExpression(StackTypes.IntegerVector, "INTEGER[].FLUSH")]
+ [StorableClass]
public class IntegerVectorFlushExpression : FlushExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack);
+ public IntegerVectorFlushExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack);
}
}
[PushExpression(StackTypes.FloatVector, "FLOAT[].FLUSH")]
+ [StorableClass]
public class FloatVectorFlushExpression : FlushExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack);
+ public FloatVectorFlushExpression() { }
+ [StorableConstructor]
+ protected FloatVectorFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack);
}
}
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].FLUSH")]
+ [StorableClass]
public class BooleanVectorFlushExpression : FlushExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack);
+ public BooleanVectorFlushExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack);
}
}
[PushExpression(StackTypes.StringVector, "STRING[].FLUSH")]
+ [StorableClass]
public class StringVectorFlushExpression : FlushExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack);
+ public StringVectorFlushExpression() { }
+ [StorableConstructor]
+ protected StringVectorFlushExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/IntegerExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/IntegerExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/IntegerExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
@@ -11,9 +12,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.+")]
+ [StorableClass]
public class IntegerAddExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerAddExpression() { }
+ [StorableConstructor]
+ protected IntegerAddExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -21,5 +28,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -29,9 +35,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.-")]
+ [StorableClass]
public class IntegerSubtractExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerSubtractExpression() { }
+ [StorableConstructor]
+ protected IntegerSubtractExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -39,5 +51,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -47,9 +58,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.*")]
+ [StorableClass]
public class IntegerMultiplyExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerMultiplyExpression() { }
+ [StorableConstructor]
+ protected IntegerMultiplyExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -57,5 +74,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -66,10 +82,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER./")]
+ [StorableClass]
public class IntegerDivideExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2 ||
- interpreter.IntegerStack.Top == 0)
- return false;
-
+ public IntegerDivideExpression() { }
+ [StorableConstructor]
+ protected IntegerDivideExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2 || interpreter.IntegerStack.Top == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -77,5 +98,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -88,10 +108,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.%")]
+ [StorableClass]
public class IntegerModuloExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2 ||
- interpreter.IntegerStack.Top == 0)
- return false;
-
+ public IntegerModuloExpression() { }
+ [StorableConstructor]
+ protected IntegerModuloExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2 || interpreter.IntegerStack.Top == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -99,5 +124,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -107,9 +131,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.MIN")]
+ [StorableClass]
public class IntegerMinExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerMinExpression() { }
+ [StorableConstructor]
+ protected IntegerMinExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -117,5 +147,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -125,9 +154,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.MAX")]
+ [StorableClass]
public class IntegerMaxExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerMaxExpression() { }
+ [StorableConstructor]
+ protected IntegerMaxExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Pop();
var second = interpreter.IntegerStack.Top;
@@ -135,5 +170,4 @@
interpreter.IntegerStack.SetTop(result);
- return true;
}
}
@@ -143,9 +177,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.<", StackTypes.Boolean)]
+ [StorableClass]
public class IntegerSmallerThanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerSmallerThanExpression() { }
+ [StorableConstructor]
+ protected IntegerSmallerThanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Top;
var second = interpreter.IntegerStack[1];
@@ -154,5 +194,4 @@
var result = second < first;
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -162,9 +201,15 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.>", StackTypes.Boolean)]
+ [StorableClass]
public class IntegerGreaterThanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count < 2)
- return false;
-
+ public IntegerGreaterThanExpression() { }
+ [StorableConstructor]
+ protected IntegerGreaterThanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.IntegerStack.Top;
var second = interpreter.IntegerStack[1];
@@ -173,5 +218,4 @@
var result = second > first;
interpreter.BooleanStack.Push(result);
- return true;
}
}
@@ -181,13 +225,18 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.FROMBOOLEAN", StackTypes.Boolean)]
+ [StorableClass]
public class IntegerFromBooleanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.Count == 0)
- return false;
-
+ public IntegerFromBooleanExpression() { }
+ [StorableConstructor]
+ protected IntegerFromBooleanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var condition = interpreter.BooleanStack.Pop();
var value = condition ? 1 : 0;
interpreter.IntegerStack.Push(value);
- return true;
}
}
@@ -197,12 +246,17 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.FROMFLOAT", StackTypes.Float)]
+ [StorableClass]
public class IntegerFromFloatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.Count == 0)
- return false;
-
+ public IntegerFromFloatExpression() { }
+ [StorableConstructor]
+ protected IntegerFromFloatExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = (int)interpreter.FloatStack.Pop();
interpreter.IntegerStack.Push(value);
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/LoopExpression.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/LoopExpression.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/LoopExpression.cs (revision 14952)
@@ -2,4 +2,6 @@
using System;
+ using HeuristicLab.Common;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
@@ -8,5 +10,6 @@
[Serializable]
- public class LoopState : IPooledObject {
+ [StorableClass]
+ public class LoopState : IDeepCloneable, IPooledObject {
public static LoopState Create(
IManagedPool pool,
@@ -25,4 +28,15 @@
}
+ public LoopState() { }
+
+ [StorableConstructor]
+ protected LoopState(bool deserializing) { }
+ protected LoopState(LoopState origin, Cloner cloner) {
+ Body = origin.Body;
+ CurrentIndex = origin.CurrentIndex;
+ DestinationIndex = origin.DestinationIndex;
+ Incrementor = origin.Incrementor;
+ }
+
public Expression Body { get; private set; }
public long CurrentIndex { get; private set; }
@@ -35,4 +49,6 @@
return hashCode.Value;
}
+
+
public void Reset() {
@@ -55,15 +71,26 @@
return hash;
}
+
+ public object Clone() {
+ return Clone(new Cloner());
+ }
+
+ public IDeepCloneable Clone(Cloner cloner) {
+ return new LoopState(this, cloner);
+ }
}
[Serializable]
+ [StorableClass]
public abstract class LoopExpression : StatefulExpression {
protected LoopExpression() : base(new LoopState()) { }
protected LoopExpression(LoopState state) : base(state) { }
+ [StorableConstructor]
+ protected LoopExpression(bool deserializing) : base(deserializing) { }
- protected bool Eval(IInternalPushInterpreter interpreter, IPushStack sourceStack, bool pushCurrentIndex = false) {
+ protected void Eval(IInternalPushInterpreter interpreter, IPushStack sourceStack, bool pushCurrentIndex = false) {
// if not initialized
if (State.Body == null) {
- if (HasInsufficientArguments(interpreter, sourceStack)) return false;
+ if (HasInsufficientArguments(interpreter, sourceStack)) return;
var state = InitState(interpreter, sourceStack);
@@ -71,5 +98,5 @@
interpreter.ExecStack.Push(initLoopExpression, state.Body);
- return true;
+ return;
}
@@ -77,10 +104,8 @@
if (State.DestinationIndex == State.CurrentIndex) {
PushLastIteration(interpreter);
- return true;
+ return;
}
PushIteration(interpreter);
-
- return true;
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/NameExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/NameExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/NameExpressions.cs (revision 14952)
@@ -1,12 +1,21 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
using System.Linq;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
using Interpreter;
+ [StorableClass]
public class NameDefineXExecExpression : StatefulExpression {
public NameDefineXExecExpression(string state) : base(state) { }
+ [StorableConstructor]
+ protected NameDefineXExecExpression(bool deserializing) : base(deserializing) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return false;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
Expression expression;
if (!interpreter.IsNameQuoteFlagSet &&
@@ -17,6 +26,4 @@
interpreter.IsNameQuoteFlagSet = false;
}
-
- return true;
}
}
@@ -30,10 +37,16 @@
///
[PushExpression(StackTypes.Name, "NAME.QUOTE")]
+ [StorableClass]
public class NameQuoteExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IsNameQuoteFlagSet) return false;
+ public NameQuoteExpression() { }
+ [StorableConstructor]
+ protected NameQuoteExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IsNameQuoteFlagSet;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.IsNameQuoteFlagSet = true;
- return true;
}
}
@@ -43,9 +56,15 @@
///
[PushExpression(StackTypes.Name, "NAME.RANDBOUNDNAME")]
+ [StorableClass]
public class NameRandBoundNameExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CustomExpressions.Count == 0)
- return false;
+ public NameRandBoundNameExpression() { }
+ [StorableConstructor]
+ protected NameRandBoundNameExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CustomExpressions.Count == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var index = interpreter.CustomExpressions.Keys.Count == 1
? 0
@@ -53,8 +72,5 @@
var state = interpreter.CustomExpressions.Keys.ElementAt(index);
-
interpreter.NameStack.Push(state);
-
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PopExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PopExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PopExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
@@ -7,97 +8,204 @@
using Stack;
+ [StorableClass]
public abstract class PopExpression : StatelessExpression {
- public bool Eval(IPushStack stack) {
- if (stack.Count == 0) return false;
-
+ protected PopExpression() { }
+ [StorableConstructor]
+ protected PopExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack) {
stack.Pop();
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Integer, "INTEGER.POP")]
public class IntegerPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
- }
- }
-
+ public IntegerPopExpression() { }
+ [StorableConstructor]
+ protected IntegerPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Float, "FLOAT.POP")]
public class FloatPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
- }
- }
-
+ public FloatPopExpression() { }
+ [StorableConstructor]
+ protected FloatPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Boolean, "BOOLEAN.POP")]
public class BooleanPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack);
- }
- }
-
+ public BooleanPopExpression() { }
+ [StorableConstructor]
+ protected BooleanPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Name, "NAME.POP")]
public class NamePopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack);
- }
- }
-
+ public NamePopExpression() { }
+ [StorableConstructor]
+ protected NamePopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.POP")]
public class ExecPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack);
- }
- }
-
+ public ExecPopExpression() { }
+ [StorableConstructor]
+ protected ExecPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.POP")]
public class CodePopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack);
- }
- }
-
+ public CodePopExpression() { }
+ [StorableConstructor]
+ protected CodePopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Char, "CHAR.POP")]
public class CharPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack);
- }
- }
-
+ public CharPopExpression() { }
+ [StorableConstructor]
+ protected CharPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.POP")]
public class StringPopExpression : PopExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack);
- }
- }
-
+ public StringPopExpression() { }
+ [StorableConstructor]
+ protected StringPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.IntegerVector, "INTEGER[].POP")]
public class IntegerVectorPopExpression : PopExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack);
- }
- }
-
-
+ public IntegerVectorPopExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.FloatVector, "FLOAT[].POP")]
public class FloatVectorPopExpression : PopExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack);
- }
- }
-
-
+ public FloatVectorPopExpression() { }
+ [StorableConstructor]
+ protected FloatVectorPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].POP")]
public class BooleanVectorPopExpression : PopExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack);
- }
- }
-
-
+ public BooleanVectorPopExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.StringVector, "STRING[].POP")]
public class StringVectorPopExpression : PopExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack);
+ public StringVectorPopExpression() { }
+ [StorableConstructor]
+ protected StringVectorPopExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PrintExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PrintExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PrintExpressions.cs (revision 14952)
@@ -4,34 +4,38 @@
using System.Collections.Generic;
using System.Text;
-
using Attributes;
-
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Constants;
-
using Interpreter;
using Stack;
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.NEWLINE")]
public class PrintNewLineExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- interpreter.PrintStack.Push(Environment.NewLine);
- return true;
- }
- }
-
+ public PrintNewLineExpression() { }
+ [StorableConstructor]
+ protected PrintNewLineExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return false;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ interpreter.PrintStack.Push(PushEnvironment.NewLine);
+ }
+ }
+
+ [StorableClass]
public abstract class PrintExpression : StatelessExpression {
- protected bool Eval(IInternalPushInterpreter interpreter, IPushStack stack) {
- if (stack.IsEmpty)
- return false;
-
+ protected PrintExpression() { }
+ [StorableConstructor]
+ protected PrintExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IInternalPushInterpreter interpreter, IPushStack stack) {
var value = stack.Pop().ToString();
interpreter.PrintStack.Push(value);
- return true;
- }
-
- protected bool EvalVector(IInternalPushInterpreter interpreter, IPushStack> vectorStack) {
- if (vectorStack.IsEmpty)
- return false;
-
+ }
+
+ protected void EvalVector(IInternalPushInterpreter interpreter, IPushStack> vectorStack) {
var sb = new StringBuilder();
var vector = vectorStack.Pop();
@@ -52,75 +56,164 @@
var value = sb.ToString();
interpreter.PrintStack.Push(value);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTBOOLEAN", StackTypes.Boolean)]
public class BooleanPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.BooleanStack);
- }
- }
-
+ public BooleanPrintExpression() { }
+ [StorableConstructor]
+ protected BooleanPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTCHAR", StackTypes.Char)]
public class CharPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.CharStack);
- }
- }
-
+ public CharPrintExpression() { }
+ [StorableConstructor]
+ protected CharPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.CharStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTEXEC", StackTypes.Exec)]
public class ExecPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.ExecStack);
- }
- }
-
+ public ExecPrintExpression() { }
+ [StorableConstructor]
+ protected ExecPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.ExecStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTFLOAT", StackTypes.Float)]
public class FloatPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.FloatStack);
- }
- }
-
+ public FloatPrintExpression() { }
+ [StorableConstructor]
+ protected FloatPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.FloatStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTINTEGER", StackTypes.Integer)]
public class IntegerPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.IntegerStack);
- }
- }
-
+ public IntegerPrintExpression() { }
+ [StorableConstructor]
+ protected IntegerPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.IntegerStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTSTRING", StackTypes.String)]
public class StringPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter, interpreter.StringStack);
- }
- }
-
+ public StringPrintExpression() { }
+ [StorableConstructor]
+ protected StringPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter, interpreter.StringStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTINTEGERVECTOR", StackTypes.IntegerVector)]
public class IntegerVectorPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return EvalVector(interpreter, interpreter.IntegerVectorStack);
- }
- }
-
+ public IntegerVectorPrintExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ EvalVector(interpreter, interpreter.IntegerVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTFLOATVECTOR", StackTypes.FloatVector)]
public class FloatVectorPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return EvalVector(interpreter, interpreter.FloatVectorStack);
- }
- }
-
+ public FloatVectorPrintExpression() { }
+ [StorableConstructor]
+ protected FloatVectorPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ EvalVector(interpreter, interpreter.FloatVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTSTRINGVECTOR", StackTypes.StringVector)]
public class StringVectorPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return EvalVector(interpreter, interpreter.StringVectorStack);
- }
- }
-
+ public StringVectorPrintExpression() { }
+ [StorableConstructor]
+ protected StringVectorPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ EvalVector(interpreter, interpreter.StringVectorStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Print, "PRINT.PRINTBOOLEANVECTOR", StackTypes.BooleanVector)]
public class BooleanVectorPrintExpression : PrintExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return EvalVector(interpreter, interpreter.BooleanVectorStack);
+ public BooleanVectorPrintExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorPrintExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ EvalVector(interpreter, interpreter.BooleanVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushExpressions.cs (revision 14952)
@@ -2,14 +2,21 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
+ [StorableClass]
public abstract class PushExpression : StatefulExpression {
-
- protected PushExpression(T state) : base(state) { }
-
- protected bool Eval(IPushStack stack) {
+ [StorableConstructor]
+ protected PushExpression(bool deserializing) : base(deserializing) { }
+
+ protected PushExpression(T state, object other) : base(state) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return false;
+ }
+
+ protected void Eval(IPushStack stack) {
stack.Push(State);
- return true;
}
@@ -17,111 +24,243 @@
}
+ [StorableClass]
public class IntegerPushExpression : PushExpression {
+ [StorableConstructor]
+ protected IntegerPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static IntegerPushExpression Create(IManagedPool statefulExpressionPool, long state) {
+ // var expression = (IntegerPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public IntegerPushExpression(long state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
+ }
+ }
+
+ [StorableClass]
public class FloatPushExpression : PushExpression {
+ [StorableConstructor]
+ protected FloatPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static FloatPushExpression Create(IManagedPool statefulExpressionPool, double state) {
+ // var expression = (FloatPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public FloatPushExpression(double state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
+ }
+ }
+
+ [StorableClass]
public class BooleanPushExpression : PushExpression {
+ [StorableConstructor]
+ protected BooleanPushExpression(bool deserializing, object other) : base(deserializing) { }
+
+ // not supported so far
+ //public static BooleanPushExpression Create(IManagedPool statefulExpressionPool, bool state) {
+ // var expression = (BooleanPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public BooleanPushExpression(bool state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack);
+ }
+ }
+
+ [StorableClass]
public class NamePushExpression : PushExpression {
+ [StorableConstructor]
+ protected NamePushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static NamePushExpression Create(IManagedPool statefulExpressionPool, string state) {
+ // var expression = (NamePushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public NamePushExpression(string state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack);
+ }
+ }
+
+ [StorableClass]
public class ExecPushExpression : PushExpression {
+ [StorableConstructor]
+ protected ExecPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static ExecPushExpression Create(IManagedPool statefulExpressionPool, Expression state) {
+ // var expression = (ExecPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public ExecPushExpression(Expression state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack);
+ }
+ }
+
+ [StorableClass]
public class CharPushExpression : PushExpression {
+ [StorableConstructor]
+ protected CharPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static CharPushExpression Create(IManagedPool statefulExpressionPool, char state) {
+ // var expression = (CharPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public CharPushExpression(char state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack);
+ }
+ }
+
+ [StorableClass]
public class StringPushExpression : PushExpression {
+ [StorableConstructor]
+ protected StringPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static StringPushExpression Create(IManagedPool statefulExpressionPool, string state) {
+ // var expression = (StringPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public StringPushExpression(string state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack);
+ }
+ }
+
+ [StorableClass]
public class IntegerVectorPushExpression : PushExpression> {
+ [StorableConstructor]
+ protected IntegerVectorPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static IntegerVectorPushExpression Create(IManagedPool statefulExpressionPool, List state) {
+ // var expression = (IntegerVectorPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public IntegerVectorPushExpression(List state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack);
+ }
+ }
+
+ [StorableClass]
public class FloatVectorPushExpression : PushExpression> {
+ [StorableConstructor]
+ protected FloatVectorPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static FloatVectorPushExpression Create(IManagedPool statefulExpressionPool, List state) {
+ // var expression = (FloatVectorPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public FloatVectorPushExpression(List state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack);
+ }
+ }
+
+ [StorableClass]
public class BooleanVectorPushExpression : PushExpression> {
+ [StorableConstructor]
+ protected BooleanVectorPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static BooleanVectorPushExpression Create(IManagedPool statefulExpressionPool, List state) {
+ // var expression = (BooleanVectorPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public BooleanVectorPushExpression(List state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack);
- }
- }
-
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack);
+ }
+ }
+
+ [StorableClass]
public class StringVectorPushExpression : PushExpression> {
+ [StorableConstructor]
+ protected StringVectorPushExpression(bool deserializing) : base(deserializing) { }
+
+ // not supported so far
+ //public static StringVectorPushExpression Create(IManagedPool statefulExpressionPool, List state) {
+ // var expression = (StringVectorPushExpression)statefulExpressionPool.Get();
+ // expression.State = state;
+
+ // return expression;
+ //}
+
public StringVectorPushExpression(List state)
- : base(state) {
- }
-
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack);
+ : base(state, null) {
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushProgram.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushProgram.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/PushProgram.cs (revision 14952)
@@ -6,4 +6,5 @@
using System.Diagnostics;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
@@ -15,4 +16,5 @@
[Serializable]
+ [StorableClass]
public sealed class PushProgram : Expression, IPooledObject, IMutablePushProgram {
#if DEBUG
@@ -31,8 +33,11 @@
private const string Delimiter = " ";
+ [Storable]
private IReadOnlyList expressions;
- public PushProgram() : this(EmptyExpressions) {
- }
+ public PushProgram() : this(EmptyExpressions) { }
+
+ [StorableConstructor]
+ public PushProgram(bool deserializing) : this(EmptyExpressions) { }
public PushProgram(IReadOnlyList expressions) {
@@ -167,7 +172,10 @@
}
- public override bool Eval(IInternalPushInterpreter interpreter) {
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.ExecStack.Push(expressions);
- return true;
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RandExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RandExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RandExpressions.cs (revision 14952)
@@ -1,3 +1,4 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using HeuristicLab.Problems.ProgramSynthesis.Push.Generators.CodeGenerator;
@@ -9,12 +10,17 @@
///
[PushExpression(StackTypes.Name, "NAME.RAND")]
+ [StorableClass]
public class NameRandExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (!interpreter.Configuration.ErcOptions.NameErcOptions.IsEnabled)
- return false;
+ public NameRandExpression() { }
+ [StorableConstructor]
+ protected NameRandExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return !interpreter.Configuration.ErcOptions.NameErcOptions.IsEnabled;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var name = interpreter.Configuration.ErcOptions.NameErcOptions.GetErcValue(interpreter.Random);
interpreter.NameStack.Push(name);
- return true;
}
}
@@ -24,12 +30,17 @@
///
[PushExpression(StackTypes.Integer, "INTEGER.RAND")]
+ [StorableClass]
public class IntegerRandExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (!interpreter.Configuration.ErcOptions.IntegerErcOptions.IsEnabled)
- return false;
+ public IntegerRandExpression() { }
+ [StorableConstructor]
+ protected IntegerRandExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return !interpreter.Configuration.ErcOptions.IntegerErcOptions.IsEnabled;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.Configuration.ErcOptions.IntegerErcOptions.GetErcValue(interpreter.Random);
interpreter.IntegerStack.Push(value);
- return true;
}
}
@@ -39,12 +50,17 @@
///
[PushExpression(StackTypes.Float, "FLOAT.RAND")]
+ [StorableClass]
public class FloatRandExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (!interpreter.Configuration.ErcOptions.FloatErcOptions.IsEnabled)
- return false;
+ public FloatRandExpression() { }
+ [StorableConstructor]
+ protected FloatRandExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return !interpreter.Configuration.ErcOptions.FloatErcOptions.IsEnabled;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.Configuration.ErcOptions.FloatErcOptions.GetErcValue(interpreter.Random);
interpreter.FloatStack.Push(value);
- return true;
}
}
@@ -54,12 +70,17 @@
///
[PushExpression(StackTypes.Boolean, "BOOLEAN.RAND")]
+ [StorableClass]
public class BooleanRandExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (!interpreter.Configuration.ErcOptions.BooleanErcOptions.IsEnabled)
- return false;
+ public BooleanRandExpression() { }
+ [StorableConstructor]
+ protected BooleanRandExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return !interpreter.Configuration.ErcOptions.BooleanErcOptions.IsEnabled;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.Configuration.ErcOptions.BooleanErcOptions.GetErcValue(interpreter.Random);
interpreter.BooleanStack.Push(value);
- return true;
}
}
@@ -69,9 +90,15 @@
///
[PushExpression(StackTypes.Code, "CODE.RAND")]
+ [StorableClass]
public class CodeRandExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.Count == 0 ||
- interpreter.IntegerStack.Top < 1) return false;
+ public CodeRandExpression() { }
+ [StorableConstructor]
+ protected CodeRandExpression(bool deserializing) : base(deserializing) { }
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count == 0 || interpreter.IntegerStack.Top < 1;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var size = (int)(interpreter.IntegerStack.Pop() % interpreter.Configuration.MaxPointsInRandomExpression);
var program = LinearCodeGenerator.RandomProgram(
@@ -84,5 +111,4 @@
interpreter.CodeStack.Push(program);
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RotateExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RotateExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/RotateExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
@@ -7,10 +8,12 @@
using Stack;
+ [StorableClass]
public abstract class RotateExpression : StatelessExpression {
- public bool Eval(IPushStack stack) {
- if (stack.Count < 3) return false;
-
+ protected RotateExpression() { }
+ [StorableConstructor]
+ protected RotateExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack) {
stack.Swap(3);
- return true;
}
}
@@ -18,84 +21,192 @@
[PushExpression(StackTypes.Integer, "INTEGER.ROT")]
+ [StorableClass]
public class IntegerRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
+ public IntegerRotateExpression() { }
+ [StorableConstructor]
+ protected IntegerRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Float, "FLOAT.ROT")]
+ [StorableClass]
public class FloatRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
+ public FloatRotateExpression() { }
+ [StorableConstructor]
+ protected FloatRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
}
}
[PushExpression(StackTypes.Boolean, "BOOLEAN.ROT")]
+ [StorableClass]
public class BooleanRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack);
+ public BooleanRotateExpression() { }
+ [StorableConstructor]
+ protected BooleanRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack);
}
}
[PushExpression(StackTypes.Name, "NAME.ROT")]
+ [StorableClass]
public class NameRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack);
+ public NameRotateExpression() { }
+ [StorableConstructor]
+ protected NameRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.NameStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack);
}
}
[PushExpression(StackTypes.Exec, "EXEC.ROT")]
+ [StorableClass]
public class ExecRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack);
+ public ExecRotateExpression() { }
+ [StorableConstructor]
+ protected ExecRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.ExecStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack);
}
}
[PushExpression(StackTypes.Code, "CODE.ROT")]
+ [StorableClass]
public class CodeRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack);
+ public CodeRotateExpression() { }
+ [StorableConstructor]
+ protected CodeRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CodeStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack);
}
}
[PushExpression(StackTypes.Char, "CHAR.ROT")]
+ [StorableClass]
public class CharRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack);
+ public CharRotateExpression() { }
+ [StorableConstructor]
+ protected CharRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack);
}
}
[PushExpression(StackTypes.String, "STRING.ROT")]
+ [StorableClass]
public class StringRotateExpression : RotateExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack);
+ public StringRotateExpression() { }
+ [StorableConstructor]
+ protected StringRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack);
}
}
[PushExpression(StackTypes.IntegerVector, "INTEGER[].ROT")]
+ [StorableClass]
public class IntegerVectorRotateExpression : RotateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack);
+ public IntegerVectorRotateExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerVectorStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack);
}
}
[PushExpression(StackTypes.FloatVector, "FLOAT[].ROT")]
+ [StorableClass]
public class FloatVectorRotateExpression : RotateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack);
+ public FloatVectorRotateExpression() { }
+ [StorableConstructor]
+ protected FloatVectorRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatVectorStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack);
}
}
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].ROT")]
+ [StorableClass]
public class BooleanVectorRotateExpression : RotateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack);
+ public BooleanVectorRotateExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanVectorStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack);
}
}
[PushExpression(StackTypes.StringVector, "STRING[].ROT")]
+ [StorableClass]
public class StringVectorRotateExpression : RotateExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack);
+ public StringVectorRotateExpression() { }
+ [StorableConstructor]
+ protected StringVectorRotateExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringVectorStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ShoveExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ShoveExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ShoveExpressions.cs (revision 14952)
@@ -4,101 +4,212 @@
using Attributes;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
+ [StorableClass]
public abstract class ShoveExpression : StatelessExpression {
- protected bool Eval(IPushStack stack, IPushStack integerStack) {
- if ((stack == integerStack && integerStack.Count < 3) ||
- (stack != integerStack && (integerStack.IsEmpty || stack.Count < 2)))
- return false;
-
+ protected ShoveExpression() { }
+ [StorableConstructor]
+ protected ShoveExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack, IPushStack integerStack) {
var index = (int)Math.Abs(integerStack.Pop() % stack.Count);
var item = stack.Pop();
stack.Insert(index, item);
- return true;
}
}
[PushExpression(StackTypes.Integer, "INTEGER.SHOVE")]
+ [StorableClass]
public class IntegerShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack, interpreter.IntegerStack);
+ public IntegerShoveExpression() { }
+ [StorableConstructor]
+ protected IntegerShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Float, "FLOAT.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class FloatShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack, interpreter.IntegerStack);
+ public FloatShoveExpression() { }
+ [StorableConstructor]
+ protected FloatShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Boolean, "BOOLEAN.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class BooleanShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack, interpreter.IntegerStack);
+ public BooleanShoveExpression() { }
+ [StorableConstructor]
+ protected BooleanShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.BooleanStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Name, "NAME.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class NameShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack, interpreter.IntegerStack);
+ public NameShoveExpression() { }
+ [StorableConstructor]
+ protected NameShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.NameStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Exec, "EXEC.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class ExecShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack, interpreter.IntegerStack);
+ public ExecShoveExpression() { }
+ [StorableConstructor]
+ protected ExecShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.ExecStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Code, "CODE.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class CodeShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack, interpreter.IntegerStack);
+ public CodeShoveExpression() { }
+ [StorableConstructor]
+ protected CodeShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.CodeStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.Char, "CHAR.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class CharShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack, interpreter.IntegerStack);
+ public CharShoveExpression() { }
+ [StorableConstructor]
+ protected CharShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.CharStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.String, "STRING.SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class StringShoveExpression : ShoveExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack, interpreter.IntegerStack);
+ public StringShoveExpression() { }
+ [StorableConstructor]
+ protected StringShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.StringStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.IntegerVector, "INTEGER[].SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class IntegerVectorShoveExpression : ShoveExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
+ public IntegerVectorShoveExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.IntegerVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.FloatVector, "FLOAT[].SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class FloatVectorShoveExpression : ShoveExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
+ public FloatVectorShoveExpression() { }
+ [StorableConstructor]
+ protected FloatVectorShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.FloatVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class BooleanVectorShoveExpression : ShoveExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
+ public BooleanVectorShoveExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.BooleanVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
}
}
[PushExpression(StackTypes.StringVector, "STRING[].SHOVE", StackTypes.Integer)]
+ [StorableClass]
public class StringVectorShoveExpression : ShoveExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
+ public StringVectorShoveExpression() { }
+ [StorableConstructor]
+ protected StringVectorShoveExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty || interpreter.StringVectorStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StackdepthExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StackdepthExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StackdepthExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
@@ -11,97 +12,161 @@
///
/// Stacktype
+ [StorableClass]
public abstract class StackdepthExpression : StatelessExpression {
- public bool Eval(IPushStack stack, IPushStack integerStack, bool incremental = false) {
+ protected StackdepthExpression() { }
+ [StorableConstructor]
+ protected StackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return false;
+ }
+
+ protected void Eval(IPushStack stack, IPushStack integerStack, bool incremental = false) {
var count = stack.Count;
-
if (incremental) count += 1;
-
integerStack.Push(count);
- return true;
}
}
+ [StorableClass]
[PushExpression(StackTypes.Integer, "INTEGER.STACKDEPTH")]
public class IntegerStackdepthExpression : StackdepthExpression {
+ public IntegerStackdepthExpression() { }
+ [StorableConstructor]
+ protected IntegerStackdepthExpression(bool deserializing) : base(deserializing) { }
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack, interpreter.IntegerStack, true);
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack, interpreter.IntegerStack, true);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Float, "FLOAT.STACKDEPTH", StackTypes.Integer)]
public class FloatStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack, interpreter.IntegerStack);
+ public FloatStackdepthExpression() { }
+ [StorableConstructor]
+ protected FloatStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Boolean, "BOOLEAN.STACKDEPTH", StackTypes.Integer)]
public class BooleanStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanStack, interpreter.IntegerStack);
+ public BooleanStackdepthExpression() { }
+ [StorableConstructor]
+ protected BooleanStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Name, "NAME.STACKDEPTH", StackTypes.Integer)]
public class NameStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.NameStack, interpreter.IntegerStack);
+ public NameStackdepthExpression() { }
+ [StorableConstructor]
+ protected NameStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.NameStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Exec, "EXEC.STACKDEPTH", StackTypes.Integer)]
public class ExecStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.ExecStack, interpreter.IntegerStack);
+ public ExecStackdepthExpression() { }
+ [StorableConstructor]
+ protected ExecStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.ExecStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Code, "CODE.STACKDEPTH", StackTypes.Integer)]
public class CodeStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CodeStack, interpreter.IntegerStack);
+ public CodeStackdepthExpression() { }
+ [StorableConstructor]
+ protected CodeStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CodeStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.Char, "CHAR.STACKDEPTH", StackTypes.Integer)]
public class CharStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.CharStack, interpreter.IntegerStack);
+ public CharStackdepthExpression() { }
+ [StorableConstructor]
+ protected CharStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.CharStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.STACKDEPTH", StackTypes.Integer)]
public class StringStackdepthExpression : StackdepthExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringStack, interpreter.IntegerStack);
+ public StringStackdepthExpression() { }
+ [StorableConstructor]
+ protected StringStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.IntegerVector, "INTEGER[].STACKDEPTH", StackTypes.Integer)]
public class IntegerVectorStackdepthExpression : StackdepthExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
+ public IntegerVectorStackdepthExpression() { }
+ [StorableConstructor]
+ protected IntegerVectorStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.FloatVector, "FLOAT[].STACKDEPTH", StackTypes.Integer)]
public class FloatVectorStackdepthExpression : StackdepthExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
+ public FloatVectorStackdepthExpression() { }
+ [StorableConstructor]
+ protected FloatVectorStackdepthExpression(bool deserializing) : base(deserializing) { }
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.BooleanVector, "BOOLEAN[].STACKDEPTH", StackTypes.Integer)]
public class BooleanVectorStackdepthExpression : StackdepthExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
+ public BooleanVectorStackdepthExpression() { }
+ [StorableConstructor]
+ protected BooleanVectorStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
}
}
+ [StorableClass]
[PushExpression(StackTypes.StringVector, "STRING[].STACKDEPTH", StackTypes.Integer)]
public class StringVectorStackdepthExpression : StackdepthExpression> {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
+ public StringVectorStackdepthExpression() { }
+ [StorableConstructor]
+ protected StringVectorStackdepthExpression(bool deserializing) : base(deserializing) { }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatefulExpression.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatefulExpression.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatefulExpression.cs (revision 14952)
@@ -1,9 +1,11 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
using System;
-
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
[Serializable]
+ [StorableClass]
public abstract class StatefulExpression : Expression, IPooledObject {
+ [Storable]
public T State { get; protected set; }
private int? hashCode;
@@ -13,4 +15,7 @@
State = state;
}
+
+ [StorableConstructor]
+ protected StatefulExpression(bool deserializing) : base(deserializing) { }
protected virtual int CalcHashCode() {
@@ -22,6 +27,5 @@
get
{
- if (stringRepresentation == null) stringRepresentation = State.ToString();
- return stringRepresentation;
+ return stringRepresentation ?? (stringRepresentation = State.ToString());
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatelessExpression.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatelessExpression.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StatelessExpression.cs (revision 14952)
@@ -1,9 +1,15 @@
namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+ [StorableClass]
public abstract class StatelessExpression : Expression {
- private int hashCode;
+ private readonly int hashCode;
protected StatelessExpression() {
hashCode = GetType().GetHashCode();
}
+
+ [StorableConstructor]
+ protected StatelessExpression(bool deserializing) : base(deserializing) { }
public override int GetHashCode() {
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StringExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StringExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/StringExpressions.cs (revision 14952)
@@ -4,65 +4,93 @@
using Attributes;
+
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
using Interpreter;
using Stack;
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.FROMINTEGER", StackTypes.Integer)]
public class StringFromIntegerExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.IntegerStack.IsEmpty)
- return false;
-
+ public StringFromIntegerExpression() { }
+ [StorableConstructor]
+ protected StringFromIntegerExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.IntegerStack.Pop();
interpreter.StringStack.Push(value.ToString());
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.FROMFLOAT", StackTypes.Float)]
public class StringFromFloatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.FloatStack.IsEmpty)
- return false;
-
+ public StringFromFloatExpression() { }
+ [StorableConstructor]
+ protected StringFromFloatExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.FloatStack.Pop();
interpreter.StringStack.Push(value.ToString());
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.FROMBOOLEAN", StackTypes.Boolean)]
public class StringFromBooleanExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.BooleanStack.IsEmpty)
- return false;
-
+ public StringFromBooleanExpression() { }
+ [StorableConstructor]
+ protected StringFromBooleanExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.BooleanStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.BooleanStack.Pop();
interpreter.StringStack.Push(value.ToString());
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.FROMCHAR", StackTypes.Char)]
public class StringFromCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.CharStack.IsEmpty)
- return false;
-
+ public StringFromCharExpression() { }
+ [StorableConstructor]
+ protected StringFromCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.CharStack.Pop();
interpreter.StringStack.Push(value.ToString());
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.CONCAT")]
public class StringConcatExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.Count < 2 ||
- interpreter.StringStack.Top.Length + interpreter.StringStack[1].Length >= interpreter.Configuration.MaxStringLength)
- return false;
-
+ public StringConcatExpression() { }
+ [StorableConstructor]
+ protected StringConcatExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 2 ||
+ interpreter.StringStack.Top.Length + interpreter.StringStack[1].Length >= interpreter.Configuration.MaxStringLength;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
interpreter.StringStack.SetTop(str + interpreter.StringStack.Top);
- return true;
}
}
@@ -71,49 +99,60 @@
/// Conj char onto string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.CONJCHAR", StackTypes.Char)]
public class StringConjCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty ||
- interpreter.StringStack.Top.Length + 1 >= interpreter.Configuration.MaxStringLength)
- return false;
-
+ public StringConjCharExpression() { }
+ [StorableConstructor]
+ protected StringConjCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty ||
+ interpreter.StringStack.Top.Length + 1 >= interpreter.Configuration.MaxStringLength;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var c = interpreter.CharStack.Pop();
interpreter.StringStack.SetTop(interpreter.StringStack.Top + c);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.TAKE", StackTypes.Integer)]
public class StringTakeExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.IntegerStack.IsEmpty)
- return false;
-
+ public StringTakeExpression() { }
+ [StorableConstructor]
+ protected StringTakeExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var value = interpreter.IntegerStack.Pop();
-
- if (value < 0) {
- return true;
- }
-
- var str = interpreter.StringStack.Top;
-
- if (str.Length > 0) {
- value = Math.Min(str.Length - 1, value);
- interpreter.StringStack.SetTop(str.Substring(0, (int)value));
- }
-
- return true;
- }
- }
-
+ var str = interpreter.StringStack.Top;
+
+ if (str.Length == 0)
+ return;
+
+ value = Math.Abs(value) % str.Length;
+ interpreter.StringStack.SetTop(str.Substring(0, (int)value));
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.SUBSTRING", StackTypes.Integer)]
public class StringSubstringExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.IntegerStack.Count < 2)
- return false;
-
+ public StringSubstringExpression() { }
+ [StorableConstructor]
+ protected StringSubstringExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
var firstValue = interpreter.IntegerStack[1];
@@ -127,110 +166,148 @@
if (length > 0)
interpreter.StringStack.SetTop(str.Substring((int)first, (int)length));
-
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.FIRST")]
public class StringFirstExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.StringStack.Top.Length == 0)
- return false;
-
+ public StringFirstExpression() { }
+ [StorableConstructor]
+ protected StringFirstExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.StringStack.Top.Length == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.StringStack.SetTop(interpreter.StringStack.Top[0].ToString());
- return true;
- }
- }
-
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.LAST")]
public class StringLastExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.StringStack.Top.Length == 0)
- return false;
-
+ public StringLastExpression() { }
+ [StorableConstructor]
+ protected StringLastExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.StringStack.Top.Length == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
var c = str[str.Length - 1].ToString();
interpreter.StringStack.SetTop(c);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.NTH", StackTypes.Integer)]
public class StringNthExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.IntegerStack.IsEmpty ||
- interpreter.StringStack.Top.Length == 0)
- return false;
-
- var str = interpreter.StringStack.Top;
- var index = str.Length == 1 ? 0 : (int)Math.Abs(interpreter.IntegerStack.Pop() % (str.Length - 1));
+ public StringNthExpression() { }
+ [StorableConstructor]
+ protected StringNthExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.IntegerStack.IsEmpty ||
+ interpreter.StringStack.Top.Length == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ var str = interpreter.StringStack.Top;
+ var index = str.Length == 1 ? 0 : (int)Math.Abs(interpreter.IntegerStack.Pop()) % str.Length;
var c = str[index].ToString();
interpreter.StringStack.SetTop(c);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REST")]
public class StringRestExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.StringStack.Top.Length == 0)
- return false;
-
+ public StringRestExpression() { }
+ [StorableConstructor]
+ protected StringRestExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.StringStack.Top.Length == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
interpreter.StringStack.SetTop(str.Length == 1 ? string.Empty : str.Substring(1, str.Length - 1));
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.BUTLAST")]
public class StringButLastExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.StringStack.Top.Length == 0)
- return false;
-
+ public StringButLastExpression() { }
+ [StorableConstructor]
+ protected StringButLastExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.StringStack.Top.Length == 0;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
interpreter.StringStack.SetTop(str.Length == 1 ? string.Empty : str.Substring(0, str.Length - 1));
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.LENGTH", StackTypes.Integer)]
public class StringLengthExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty)
- return false;
-
+ public StringLengthExpression() { }
+ [StorableConstructor]
+ protected StringLengthExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
interpreter.IntegerStack.Push(str.Length);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REVERSE")]
public class StringReverseExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty)
- return false;
-
+ public StringReverseExpression() { }
+ [StorableConstructor]
+ protected StringReverseExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
interpreter.StringStack.SetTop(interpreter.StringStack.Top.Reverse().ToString());
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.PARSETOCHARS")]
public class StringParseToCharsExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty)
- return false;
-
+ public StringParseToCharsExpression() { }
+ [StorableConstructor]
+ protected StringParseToCharsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
if (interpreter.StringStack.Top.Length == 0) {
interpreter.StringStack.Pop();
- return true;
+ return;
}
@@ -246,26 +323,24 @@
interpreter.StringStack.Push(chars);
}
-
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.SPLIT")]
public class StringSplitExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty)
- return false;
-
+ public StringSplitExpression() { }
+ [StorableConstructor]
+ protected StringSplitExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.StringStack.Top.Trim().Split().Length <= 1;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var words = interpreter.StringStack.Top.Trim().Split();
- if (words.Length == 0)
- return false;
-
interpreter.StringStack.SetTop(words[0]);
-
- if (words.Length > 1)
- interpreter.StringStack.Push(words, 1);
-
- return true;
+ interpreter.StringStack.Push(words, 1);
}
}
@@ -274,14 +349,18 @@
/// True if top string is empty
///
-
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.EMPTYSTRING", StackTypes.Boolean)]
public class StringEmptyStringExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty)
- return false;
-
+ public StringEmptyStringExpression() { }
+ [StorableConstructor]
+ protected StringEmptyStringExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
interpreter.BooleanStack.Push(str.Length == 0);
- return true;
}
}
@@ -290,10 +369,16 @@
/// True if top string is a substring of second string; false otherwise
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.CONTAINS", StackTypes.Boolean)]
public class StringContainsExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.Count < 2)
- return false;
-
+ public StringContainsExpression() { }
+ [StorableConstructor]
+ protected StringContainsExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.StringStack[1];
var second = interpreter.StringStack.Top;
@@ -301,5 +386,4 @@
interpreter.BooleanStack.Push(first.IndexOf(second, StringComparison.Ordinal) >= 0);
- return true;
}
}
@@ -308,16 +392,21 @@
/// True if the top char is in the top string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.CONTAINSCHAR", StackTypes.Boolean | StackTypes.Char)]
public class StringContainsCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty)
- return false;
-
+ public StringContainsCharExpression() { }
+ [StorableConstructor]
+ protected StringContainsCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
var c = interpreter.CharStack.Pop();
interpreter.BooleanStack.Push(str.IndexOf(c) >= 0);
- return true;
}
}
@@ -326,16 +415,21 @@
/// Puts on the integer stack the index of the top char in the top string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.INDEXOFCHAR", StackTypes.Integer | StackTypes.Char)]
public class StringIndexOfCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty)
- return false;
-
+ public StringIndexOfCharExpression() { }
+ [StorableConstructor]
+ protected StringIndexOfCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
var c = interpreter.CharStack.Pop();
interpreter.IntegerStack.Push(str.IndexOf(c));
- return true;
}
}
@@ -344,11 +438,17 @@
/// The number of times the top char is in the top string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.OCCURENCESOFCHAR", StackTypes.Integer | StackTypes.Char)]
public class StringOccurrencesOfCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty)
- return false;
-
+ public StringOccurrencesOfCharExpression() { }
+ [StorableConstructor]
+ protected StringOccurrencesOfCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Pop();
var c = interpreter.CharStack.Pop();
@@ -359,5 +459,4 @@
interpreter.IntegerStack.Push(count);
- return true;
}
}
@@ -366,10 +465,16 @@
/// In third string on stack, replaces second string with first string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REPLACE")]
public class StringReplaceExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.Count < 3)
- return false;
-
+ public StringReplaceExpression() { }
+ [StorableConstructor]
+ protected StringReplaceExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.StringStack[1];
var second = interpreter.StringStack.Top;
@@ -382,6 +487,4 @@
interpreter.StringStack.SetTop(result);
}
-
- return true;
}
}
@@ -390,10 +493,16 @@
/// In third string on stack, replaces first occurence of second string with first string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REPLACEFIRST")]
public class StringReplaceLastExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.Count < 3)
- return false;
-
+ public StringReplaceLastExpression() { }
+ [StorableConstructor]
+ protected StringReplaceLastExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.Count < 3;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.StringStack[0];
var second = interpreter.StringStack[1];
@@ -403,5 +512,4 @@
var result = ReplaceFirst(third, second, first);
interpreter.StringStack.SetTop(result);
- return true;
}
@@ -418,11 +526,17 @@
/// In top string on stack, replaces all occurences of second char with first char
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REPLACECHAR", StackTypes.Char)]
public class StringReplaceCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.Count < 2)
- return false;
-
+ public StringReplaceCharExpression() { }
+ [StorableConstructor]
+ protected StringReplaceCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var first = interpreter.CharStack[1];
var second = interpreter.CharStack.Top;
@@ -431,5 +545,4 @@
var result = interpreter.StringStack.Top.Replace(first, second);
interpreter.StringStack.SetTop(result);
- return true;
}
}
@@ -438,11 +551,17 @@
/// In top string on stack, replaces first occurence of second char with first char
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REPLACEFIRSTCHAR", StackTypes.Char)]
public class StringReplaceLastCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.Count < 2)
- return false;
-
+ public StringReplaceLastCharExpression() { }
+ [StorableConstructor]
+ protected StringReplaceLastCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
var first = interpreter.CharStack[1];
@@ -453,5 +572,5 @@
if (pos < 0)
- return true;
+ return;
var result = str.Substring(0, pos) +
@@ -460,5 +579,4 @@
interpreter.StringStack.SetTop(result);
- return true;
}
}
@@ -467,15 +585,20 @@
/// In top string on stack, remove all occurences of char
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.REMOVECHAR", StackTypes.Char)]
public class StringRemoveCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty)
- return false;
-
+ public StringRemoveCharExpression() { }
+ [StorableConstructor]
+ protected StringRemoveCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var c = interpreter.CharStack.Pop();
var result = interpreter.StringStack.Top.Trim(c);
interpreter.StringStack.SetTop(result);
- return true;
}
}
@@ -484,12 +607,18 @@
/// Returns a function that sets char at index in string
///
+ [StorableClass]
[PushExpression(StackTypes.String, "STRING.SETCHAR", StackTypes.Char | StackTypes.Integer)]
public class StringSetCharExpression : StatelessExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- if (interpreter.StringStack.IsEmpty ||
- interpreter.CharStack.IsEmpty ||
- interpreter.IntegerStack.IsEmpty)
- return false;
-
+ public StringSetCharExpression() { }
+ [StorableConstructor]
+ protected StringSetCharExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.StringStack.IsEmpty ||
+ interpreter.CharStack.IsEmpty ||
+ interpreter.IntegerStack.IsEmpty;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
var str = interpreter.StringStack.Top;
var i = (int)interpreter.IntegerStack.Pop();
@@ -498,5 +627,5 @@
if (str.Length == 0) {
interpreter.StringStack.Pop();
- return true;
+ return;
}
@@ -505,5 +634,4 @@
interpreter.StringStack.SetTop(result);
- return true;
}
}
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/SwapExpressions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/SwapExpressions.cs (revision 14951)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/SwapExpressions.cs (revision 14952)
@@ -2,4 +2,5 @@
using System.Collections.Generic;
+ using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
@@ -11,95 +12,204 @@
///
/// Stacktype
+ [StorableClass]
public abstract class SwapExpression : StatelessExpression {
- public bool Eval(IPushStack stack) {
- if (stack.Count < 2)
- return false;
-
+ protected SwapExpression() { }
+ [StorableConstructor]
+ protected SwapExpression(bool deserializing) : base(deserializing) { }
+
+ protected void Eval(IPushStack stack) {
stack.Swap(2);
- return true;
- }
- }
-
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Integer, "INTEGER.SWAP")]
public class IntegerSwapExpression : SwapExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.IntegerStack);
- }
- }
-
+ public IntegerSwapExpression() { }
+ [StorableConstructor]
+ protected IntegerSwapExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.IntegerStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.IntegerStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Float, "FLOAT.SWAP")]
public class FloatSwapExpression : SwapExpression {
- public override bool Eval(IInternalPushInterpreter interpreter) {
- return Eval(interpreter.FloatStack);
- }
- }
-
+ public FloatSwapExpression() { }
+ [StorableConstructor]
+ protected FloatSwapExpression(bool deserializing) : base(deserializing) { }
+
+ public override bool IsNoop(IInternalPushInterpreter interpreter) {
+ return interpreter.FloatStack.Count < 2;
+ }
+
+ public override void Eval(IInternalPushInterpreter interpreter) {
+ Eval(interpreter.FloatStack);
+ }
+ }
+
+ [StorableClass]
[PushExpression(StackTypes.Boolean, "BOOLEAN.SWAP")]
public class BooleanSwapExpression : SwapExpression