From 9fd34b8cdc98ee757fc047216bd51c698cb7b82f Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Wed, 2 May 2012 00:03:59 +1000 Subject: Fix up some memory leaking issues. --- impl/EquationSystem.hpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'impl/EquationSystem.hpp') diff --git a/impl/EquationSystem.hpp b/impl/EquationSystem.hpp index adc608b..00916d0 100644 --- a/impl/EquationSystem.hpp +++ b/impl/EquationSystem.hpp @@ -11,6 +11,9 @@ struct EquationSystem { for (int i = 0, size = _vars.size(); i < size; ++i) { delete _vars[i]; } + for (int i = 0, size = _expressions.size(); i < size; ++i) { + delete _expressions[i]; + } } Variable* newVariable(const std::string&) { _vars.push_back(new Variable(_vars.size())); @@ -20,10 +23,17 @@ struct EquationSystem { return _vars.size(); } + Expression* newExpression(Operator* op, const std::vector*>& args) { + Expression* expr = new Expression(op, args); + _expressions.push_back(expr); + return expr; + } + MaxExpression* newMaxExpression(const std::vector*>& args) { MaxExpression* expr = new MaxExpression(args); expr->id(_max_expressions.size()); _max_expressions.push_back(expr); + _expressions.push_back(expr); return expr; } unsigned int maxCount() const { @@ -42,23 +52,23 @@ struct EquationSystem { } Expression*& operator[] (const Variable& v) { - if (_expressions.size() <= v.id()) { - _expressions.resize(v.id()+1); + if (_right_expressions.size() <= v.id()) { + _right_expressions.resize(v.id()+1); } - return _expressions[v.id()]; + return _right_expressions[v.id()]; } const Expression*& operator[] (const Variable& v) const { - if (_expressions.size() <= v.id()) { + if (_right_expressions.size() <= v.id()) { throw "Out of range"; } - return _expressions[v.id()]; + return _right_expressions[v.id()]; } template VariableAssignment foreach(F op, const VariableAssignment& rho) const { VariableAssignment result(_vars.size()); for (unsigned int i = 0, size = _vars.size(); i < size; ++i) { - result[*_vars[i]] = op(*_expressions[i], rho); + result[*_vars[i]] = op(*_right_expressions[i], rho); } return result; } @@ -66,7 +76,7 @@ struct EquationSystem { VariableAssignment operator() (const VariableAssignment& rho) const { VariableAssignment result(_vars.size()); for (unsigned int i = 0, size = _vars.size(); i < size; ++i) { - result[*_vars[i]] = (*_expressions[i])(rho); + result[*_vars[i]] = (*_right_expressions[i])(rho); } return result; } @@ -112,6 +122,7 @@ struct EquationSystem { std::vector*> _vars; std::vector*> _max_expressions; std::vector*> _expressions; + std::vector*> _right_expressions; }; #include "MaxStrategy.hpp" -- cgit v1.2.3