diff --git a/Attractor.cpp b/Attractor.cpp index aad04cb..7d2c7b1 100644 --- a/Attractor.cpp +++ b/Attractor.cpp @@ -90,6 +90,10 @@ Attractor::Attractor(const char* const fileName) { std::cout << std::endl << " Reading file complete" << std::endl; } +Attractor::~Attractor(){ + delete myAttractor; +} + // this should probably done in the projector section void Attractor::init_range() { diff --git a/Attractor.hpp b/Attractor.hpp index ab435b7..a35f279 100644 --- a/Attractor.hpp +++ b/Attractor.hpp @@ -18,13 +18,15 @@ public: Attractor(); Attractor(const char* const filename); - + ~Attractor(); + void init_range(); bool is_chaos(); void iterate(); void plot(); void output(); + }; #endif // ATTRACTOR_HPP diff --git a/AttractorKernel.hpp b/AttractorKernel.hpp index e303dcf..dc71523 100644 --- a/AttractorKernel.hpp +++ b/AttractorKernel.hpp @@ -25,6 +25,9 @@ public: virtual unsigned int dimension() const = 0; + // dtor, default is generally good + virtual ~AttractorKernel() {}; + }; #endif // ATTRACTORKERNEL_HPP diff --git a/defines.hpp b/defines.hpp index b054c15..aff37f6 100644 --- a/defines.hpp +++ b/defines.hpp @@ -1,7 +1,7 @@ //TODO: do this with files -#define ATTRACTOR_FILE "attractors/testLorenz.stf" +#define ATTRACTOR_FILE "attractors/testPolynomial.stf" #ifdef UNI_BUILD #warning Building for the RU, are you sure? @@ -11,5 +11,5 @@ #else #define WIDTH 800 #define HEIGHT 800 - #define ITERATIONS 20000 + #define ITERATIONS 1000000 #endif diff --git a/kernels/KernelBasicParameter.cpp b/kernels/KernelBasicParameter.cpp index e837e6f..59e8276 100644 --- a/kernels/KernelBasicParameter.cpp +++ b/kernels/KernelBasicParameter.cpp @@ -8,12 +8,27 @@ */ #include "KernelBasicParameter.hpp" +#include + + +#pragma mark - +#pragma mark Memory managment KernelBasicParameter::KernelBasicParameter(const unsigned int numberOfParameters): myNumberOfParameters(numberOfParameters){ init(); } +void KernelBasicParameter::resetNumberOfParameters(const unsigned int numberOfParameters){ + dealloc(); + myNumberOfParameters = numberOfParameters; + init(); +} + +KernelBasicParameter::~KernelBasicParameter(){ + dealloc(); +} + void KernelBasicParameter::init(){ parameters = new double[myNumberOfParameters]; @@ -22,14 +37,14 @@ void KernelBasicParameter::init(){ } } -void KernelBasicParameter::resetNumberOfParameters(const unsigned int numberOfParameters){ +void KernelBasicParameter::dealloc(){ delete parameters; - - myNumberOfParameters = numberOfParameters; - - init(); } + +#pragma mark - +#pragma mark Implementation + double & KernelBasicParameter::operator[](const unsigned int index){ return parameters[index]; } diff --git a/kernels/KernelBasicParameter.hpp b/kernels/KernelBasicParameter.hpp index f7cba04..320cf87 100644 --- a/kernels/KernelBasicParameter.hpp +++ b/kernels/KernelBasicParameter.hpp @@ -20,14 +20,15 @@ class KernelBasicParameter : virtual public AttractorKernel { private: void init(); + void dealloc(); protected: unsigned int myNumberOfParameters; - double * parameters; KernelBasicParameter(const unsigned int numberOfParameters); + virtual ~KernelBasicParameter(); void resetNumberOfParameters(const unsigned int numberOfParameters); diff --git a/kernels/KernelBasicVector.cpp b/kernels/KernelBasicVector.cpp index 2bdf990..4bdf8f9 100644 --- a/kernels/KernelBasicVector.cpp +++ b/kernels/KernelBasicVector.cpp @@ -8,17 +8,39 @@ */ #include "KernelBasicVector.hpp" +#include + + +#pragma mark - +#pragma mark Memory Managment KernelBasicVector::KernelBasicVector(const unsigned int dimension): myDimension(dimension){ - vectorNew = new double[dimension]; - vectorOld = new double[dimension]; + init(); +} + +KernelBasicVector::~KernelBasicVector(){ + dealloc(); +} + +void KernelBasicVector::init(){ + vectorNew = new double[myDimension]; + vectorOld = new double[myDimension]; for ( unsigned int i = 0; i < myDimension; i++ ) { vectorNew[i] = vectorOld[i] = 0.0; } } +void KernelBasicVector::dealloc(){ + delete vectorOld; + delete vectorNew; +} + + +#pragma mark - +#pragma mark Implementation + double * & KernelBasicVector::vector(){ return vectorNew; } diff --git a/kernels/KernelBasicVector.hpp b/kernels/KernelBasicVector.hpp index 28c14c3..a37ce14 100644 --- a/kernels/KernelBasicVector.hpp +++ b/kernels/KernelBasicVector.hpp @@ -17,6 +17,10 @@ you can easily use the constructor to initialise the vectors and stuff... */ class KernelBasicVector : virtual public AttractorKernel { +private: + + void init(); + void dealloc(); protected: @@ -26,6 +30,7 @@ protected: double * vectorOld; KernelBasicVector(const unsigned int dimension); + virtual ~KernelBasicVector(); public: diff --git a/kernels/Logistic.hpp b/kernels/Logistic.hpp index 73e4d0a..3cbe0e4 100644 --- a/kernels/Logistic.hpp +++ b/kernels/Logistic.hpp @@ -4,7 +4,7 @@ #include "KernelBasicParameter.hpp" #include "KernelBasicVector.hpp" -class Logistic : virtual public KernelBasicParameter, virtual public KernelBasicVector { +class Logistic : public KernelBasicParameter, public KernelBasicVector { private: void init(); diff --git a/kernels/Lorenz3D.hpp b/kernels/Lorenz3D.hpp index 579d64f..69f90b5 100644 --- a/kernels/Lorenz3D.hpp +++ b/kernels/Lorenz3D.hpp @@ -4,7 +4,7 @@ #include "KernelBasicParameter.hpp" #include "KernelBasicVector.hpp" -class Lorenz3D : virtual public KernelBasicParameter, virtual public KernelBasicVector { +class Lorenz3D : public KernelBasicParameter, public KernelBasicVector { private: void init(); diff --git a/kernels/Polynomial.cpp b/kernels/Polynomial.cpp index 7c6a9f1..abf523b 100644 --- a/kernels/Polynomial.cpp +++ b/kernels/Polynomial.cpp @@ -30,6 +30,7 @@ void Polynomial::init() { KernelBasicParameter::resetNumberOfParameters(number); } +// i want to has constexpr, so the ctor can be clean :] unsigned int Polynomial::calculateNumberOfParameters() { double n_coef = orde + 1; for (unsigned int i = 2; i <= myDimension; i++) { @@ -46,10 +47,6 @@ void Polynomial::operator()() { unsigned int m = 0; for ( unsigned int i = 0; i < myDimension; i++ ) { -#ifdef HARDDEBUG - cout << "Entering new dimension: " << i << " With m = " << m << endl; -#endif - vectorNew[i] = parameters[m]; m++; recur(i, 0, 1, m); @@ -61,12 +58,6 @@ void Polynomial::recur(unsigned int curr_dimension, unsigned int prev_i, unsigne double product; for (unsigned int i = prev_i; i < myDimension; i++) { -#ifdef HARDDEBUG - for ( unsigned int j = 0; j < n; j++ ) - cout << " "; - cout << "Calculation in dimension: " << i << " With m = " << m << " And depth = " << n << endl; -#endif - product = prev_product * vectorOld[i]; vectorNew[curr_dimension] += parameters[m] * product; m++; diff --git a/kernels/Polynomial.hpp b/kernels/Polynomial.hpp index 0d9705f..4f73fbd 100644 --- a/kernels/Polynomial.hpp +++ b/kernels/Polynomial.hpp @@ -4,7 +4,7 @@ #include "KernelBasicParameter.hpp" #include "KernelBasicVector.hpp" -class Polynomial : virtual public KernelBasicParameter, virtual public KernelBasicVector { +class Polynomial : public KernelBasicParameter, public KernelBasicVector { private: unsigned int orde; diff --git a/kernels/PolynomialA3D.hpp b/kernels/PolynomialA3D.hpp index 024a384..0ff2a00 100644 --- a/kernels/PolynomialA3D.hpp +++ b/kernels/PolynomialA3D.hpp @@ -4,7 +4,7 @@ #include "KernelBasicParameter.hpp" #include "KernelBasicVector.hpp" -class PolynomialA3D : virtual public KernelBasicParameter, virtual public KernelBasicVector { +class PolynomialA3D : public KernelBasicParameter, public KernelBasicVector { private: void init(); diff --git a/kernels/Unravel3D.hpp b/kernels/Unravel3D.hpp index 42d8743..32e060c 100644 --- a/kernels/Unravel3D.hpp +++ b/kernels/Unravel3D.hpp @@ -4,7 +4,7 @@ #include "KernelBasicParameter.hpp" #include "KernelBasicVector.hpp" -class Unravel3D : virtual public KernelBasicParameter, virtual public KernelBasicVector { +class Unravel3D : public KernelBasicParameter, public KernelBasicVector { public: Unravel3D();