summaryrefslogtreecommitdiff
path: root/impl/main.cpp
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@carlo-laptop>2012-05-02 00:03:59 +1000
committerCarlo Zancanaro <carlo@carlo-laptop>2012-05-02 00:03:59 +1000
commit9fd34b8cdc98ee757fc047216bd51c698cb7b82f (patch)
tree234e634fdaab8b2f021dab91922f4f771f0472c6 /impl/main.cpp
parenta26a426170bb0697115e6187887f18ad979b56f2 (diff)
Fix up some memory leaking issues.
Diffstat (limited to 'impl/main.cpp')
-rw-r--r--impl/main.cpp42
1 files changed, 27 insertions, 15 deletions
diff --git a/impl/main.cpp b/impl/main.cpp
index db3d0f7..a0c6bea 100644
--- a/impl/main.cpp
+++ b/impl/main.cpp
@@ -4,8 +4,8 @@
#include "Operator.hpp"
#include "Expression.hpp"
-#include "EquationSystem.hpp"
#include "MaxStrategy.hpp"
+#include "EquationSystem.hpp"
using namespace std;
@@ -17,39 +17,50 @@ typedef Minimum<float> Min;
std::vector< Expression<float>* > empty;
int main () {
+ {
EquationSystem<float> sys;
Variable<float>* x = sys.newVariable("x");
Variable<float>* y = sys.newVariable("y");
Variable<float>* z = sys.newVariable("z");
Args xPlusArgs;
- xPlusArgs.push_back(new E(x, empty));
+ xPlusArgs.push_back(sys.newExpression(x, empty));
+
Args xMinArgs;
- xMinArgs.push_back(new E(new A(-1), xPlusArgs));
- xMinArgs.push_back(new E(y, empty));
+ xMinArgs.push_back(sys.newExpression(new A(-1), xPlusArgs));
+ xMinArgs.push_back(sys.newExpression(y, empty));
+
Args xMaxArgs;
- xMaxArgs.push_back(new E(new C(0), empty));
- xMaxArgs.push_back(new E(new Min(), xMinArgs));
+ xMaxArgs.push_back(sys.newExpression(new C(0), empty));
+ xMaxArgs.push_back(sys.newExpression(new Min(), xMinArgs));
+
sys[*x] = sys.newMaxExpression(xMaxArgs);
// x = max(0, min(x-1, y))
+
Args yPlusArgs;
- yPlusArgs.push_back(new E(x, empty));
+ yPlusArgs.push_back(sys.newExpression(x, empty));
+
Args yMaxArgs;
- yMaxArgs.push_back(new E(new C(0), empty));
- yMaxArgs.push_back(new E(new A(5), yPlusArgs));
- yMaxArgs.push_back(new E(x, empty));
+ yMaxArgs.push_back(sys.newExpression(new C(0), empty));
+ yMaxArgs.push_back(sys.newExpression(new A(5), yPlusArgs));
+ yMaxArgs.push_back(sys.newExpression(x, empty));
+
sys[*y] = sys.newMaxExpression(yMaxArgs);
// y = max(0, x+5, x)
+
Args zPlusArgs1;
- zPlusArgs1.push_back(new E(z, empty));
+ zPlusArgs1.push_back(sys.newExpression(z, empty));
+
Args zPlusArgs2;
- zPlusArgs2.push_back(new E(x, empty));
+ zPlusArgs2.push_back(sys.newExpression(x, empty));
+
Args zMaxArgs;
- zMaxArgs.push_back(new E(new C(0), empty));
- zMaxArgs.push_back(new E(new A(1), zPlusArgs1));
- zMaxArgs.push_back(new E(new A(0), zPlusArgs2));
+ zMaxArgs.push_back(sys.newExpression(new C(0), empty));
+ zMaxArgs.push_back(sys.newExpression(new A(1), zPlusArgs1));
+ zMaxArgs.push_back(sys.newExpression(new A(0), zPlusArgs2));
+
sys[*z] = sys.newMaxExpression(zMaxArgs);
// z = max(0, z+1, x)
@@ -63,6 +74,7 @@ int main () {
cout << "x = " << fixpoint[*x] << endl;
cout << "y = " << fixpoint[*y] << endl;
cout << "z = " << fixpoint[*z] << endl;
+ }
return 0;
}