From ea05c9c5fa30b8822f618e861d12a09df1f8f017 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Mon, 28 May 2012 13:00:50 +1000 Subject: Fix memory error and x = max(-inf, expr) stuff. --- impl/VariableAssignment.hpp | 78 +++------------------------------------------ 1 file changed, 5 insertions(+), 73 deletions(-) (limited to 'impl/VariableAssignment.hpp') diff --git a/impl/VariableAssignment.hpp b/impl/VariableAssignment.hpp index d604a74..9d8137a 100644 --- a/impl/VariableAssignment.hpp +++ b/impl/VariableAssignment.hpp @@ -2,84 +2,16 @@ #define VARIABLE_ASSIGNMENT_HPP #include "Variable.hpp" -#include +#include "IdMap.hpp" template -struct VariableAssignment { +struct VariableAssignment : public IdMap,T> { VariableAssignment(unsigned int length) - : _length(length), _assignment(new T[length]) { - for (unsigned int i = 0; i < _length; ++i) { - _assignment[i] = -infinity(); - } - } + : IdMap,T>(length, -infinity()) { } VariableAssignment(unsigned int length, const T& initial) - : _length(length), _assignment(new T[length]) { - for (unsigned int i = 0; i < _length; ++i) { - _assignment[i] = initial; - } - } + : IdMap,T>(length, initial) { } VariableAssignment(const VariableAssignment& other) - : _length(other._length), _assignment(new T[other._length]) { - for (unsigned int i = 0; i < _length; ++i) { - _assignment[i] = other._assignment[i]; - } - } - ~VariableAssignment() { - delete[] _assignment; - } - VariableAssignment& operator=(const VariableAssignment& other) { - delete[] _assignment; - _length = other._length; - _assignment = new T[_length]; - for (unsigned int i = 0; i < _length; ++i) { - _assignment[i] = other._assignment[i]; - } - return *this; - } - const T& operator[] (const Variable& x) const { - if (x.id() >= _length) { - throw "Array out of bounds"; - } - return _assignment[x.id()]; - } - T& operator[] (const Variable& x) { - if (x.id() >= _length) { - throw "Array out of bounds"; - } - return _assignment[x.id()]; - } - - VariableAssignment expand(const VariableAssignment& other) { - return expand(other, infinity()); - } - VariableAssignment expand(const VariableAssignment& other, const T& value) { - VariableAssignment expansion(_length); - for (unsigned int i = 0; i < _length; ++i) { - if (_assignment[i] == other._assignment[i]) { - expansion._assignment[i] = _assignment[i]; - } else { - expansion._assignment[i] = value; - } - } - return expansion; - } - - bool operator==(const VariableAssignment& other) const { - if (_length != other._length) - return false; - for (unsigned int i = 0; i < _length; ++i) { - if (_assignment[i] != other._assignment[i]) { - return false; - } - } - return true; - } - bool operator!=(const VariableAssignment& other) const { - return !(*this == other); - } - private: - unsigned int _length; - T* _assignment; + : IdMap,T>(other) { } }; #endif -- cgit v1.2.3