diff --git a/Unstructured_mesh/Vector.h b/Unstructured_mesh/Vector.h index 4bf7860e1658a8fbf02cb1adba82700cf9189289..58ae583d25793c84b7f80c6f77b4c70c973d3853 100644 --- a/Unstructured_mesh/Vector.h +++ b/Unstructured_mesh/Vector.h @@ -5,7 +5,7 @@ #include <iostream> #include <initializer_list> #include "InlineArrayOperations.h" - +#include <array> template <unsigned int Dim, typename Real = double> @@ -13,7 +13,7 @@ class Vector { /** * @brief coordinates */ - Real coordinates[Dim] = {}; + std::array<Real, Dim> coordinates = {}; public: Vector(){} @@ -27,6 +27,11 @@ public: coordinates[pos] = coord; } + + std::array<Real, Dim>& getCoordinates() { + return coordinates; + } + Real& operator[](unsigned int pos){ return coordinates[pos]; } @@ -38,7 +43,7 @@ public: Real normEukleid(); inline Real sumOfSquares() { - return inlineScalarProduct<Dim, Real>::computation(coordinates, coordinates); + return inlineScalarProduct<Dim, Real>::computation(coordinates.data(), coordinates.data()); } Vector<Dim, Real> operator-(const Vector<Dim, Real>&) const; @@ -119,7 +124,7 @@ Real Vector<Dim, Real>::normEukleid(){ template <unsigned int Dim, typename Real> Vector<Dim, Real> Vector<Dim, Real>::operator -(const Vector<Dim, Real>& v) const { Vector<Dim, Real> res; - inlineSubtraction<Dim, Real>::computation(res.coordinates, this->coordinates, v.coordinates); + inlineSubtraction<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), v.coordinates.data()); return res; } @@ -127,7 +132,7 @@ Vector<Dim, Real> Vector<Dim, Real>::operator -(const Vector<Dim, Real>& v) cons template <unsigned int Dim, typename Real> Vector<Dim, Real> Vector<Dim, Real>::operator +(const Vector<Dim, Real>& v) const { Vector<Dim, Real> res; - inlineAddition<Dim, Real>::computation(res.coordinates, this->coordinates, v.coordinates); + inlineAddition<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), v.coordinates.data()); return res; } @@ -135,7 +140,7 @@ Vector<Dim, Real> Vector<Dim, Real>::operator +(const Vector<Dim, Real>& v) cons template <unsigned int Dim, typename Real> Vector<Dim, Real> Vector<Dim, Real>::operator *(const Real& x) const { Vector<Dim, Real> res; - inlineMultiplication<Dim, Real>::computation(res.coordinates, this->coordinates, x); + inlineMultiplication<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), x); return res; } @@ -152,20 +157,20 @@ Vector<Dim, Real> Vector<Dim, Real>::operator /(const Real& x) const { template<unsigned int Dim, typename Real> Real Vector<Dim, Real>::operator*(const Vector &v) { - return inlineScalarProduct<Dim, Real>::computation(coordinates, v.coordinates); + return inlineScalarProduct<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); } // Adds value of coordinates of another Point template <unsigned int Dim, typename Real> Vector<Dim, Real>& Vector<Dim, Real>::operator +=(const Vector<Dim, Real>& v){ - inlineAddition<Dim, Real>::computation(coordinates, v.coordinates); + inlineAddition<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); return *this; } // Subtracts value of coordinates of another Point template <unsigned int Dim, typename Real> Vector<Dim, Real>& Vector<Dim, Real>::operator -=(const Vector<Dim, Real>& v){ - inlineSubtraction<Dim, Real>::computation(coordinates, v.coordinates); + inlineSubtraction<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); return *this; } @@ -173,7 +178,7 @@ Vector<Dim, Real>& Vector<Dim, Real>::operator -=(const Vector<Dim, Real>& v){ // Adds value of coordinates of another Point template <unsigned int Dim, typename Real> Vector<Dim, Real>& Vector<Dim, Real>::operator *=(const Real& x){ - inlineMultiplication<Dim, Real>::computation(coordinates, x); + inlineMultiplication<Dim, Real>::computation(coordinates.data(), x); return *this; } diff --git a/Unstructured_mesh/Vertex.h b/Unstructured_mesh/Vertex.h index f033dc6098c39dbf59b5a0f56cd1889e3162f031..80c071cc04d7c8d144a3212b8b2080c8e0104ac4 100644 --- a/Unstructured_mesh/Vertex.h +++ b/Unstructured_mesh/Vertex.h @@ -4,7 +4,7 @@ #include <iostream> #include <initializer_list> #include "InlineArrayOperations.h" - +#include <array> template <unsigned int Dim, typename Real = double> class Vertex { @@ -12,7 +12,7 @@ class Vertex { * @brief coordinates<HR> * coordinates of the vertex in the space */ - Real coordinates[Dim] = {}; + std::array<Real, Dim> coordinates = {}; public: Vertex(){} @@ -26,6 +26,10 @@ public: coordinates[pos] = coord; } + std::array<Real, Dim>& getCoordinates() { + return coordinates; + } + Real& operator[](unsigned int pos){ return coordinates[pos]; } @@ -37,7 +41,7 @@ public: Real normEukleid(); inline Real sumOfSquares() { - return inlineScalarProduct<Dim, Real>::computation(coordinates, coordinates); + return inlineScalarProduct<Dim, Real>::computation(coordinates.data(), coordinates.data()); } Vertex<Dim, Real> operator-(const Vertex<Dim, Real>&) const; @@ -105,7 +109,7 @@ Real Vertex<Dim, Real>::normEukleid(){ template <unsigned int Dim, typename Real> Vertex<Dim, Real> Vertex<Dim, Real>::operator -(const Vertex<Dim, Real>& v) const { Vertex<Dim, Real> res; - inlineSubtraction<Dim, Real>::computation(res.coordinates, this->coordinates, v.coordinates); + inlineSubtraction<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), v.coordinates.data()); return res; } @@ -113,7 +117,7 @@ Vertex<Dim, Real> Vertex<Dim, Real>::operator -(const Vertex<Dim, Real>& v) cons template <unsigned int Dim, typename Real> Vertex<Dim, Real> Vertex<Dim, Real>::operator +(const Vertex<Dim, Real>& v) const { Vertex<Dim, Real> res; - inlineAddition<Dim, Real>::computation(res.coordinates, this->coordinates, v.coordinates); + inlineAddition<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), v.coordinates.data()); return res; } @@ -121,7 +125,7 @@ Vertex<Dim, Real> Vertex<Dim, Real>::operator +(const Vertex<Dim, Real>& v) cons template <unsigned int Dim, typename Real> Vertex<Dim, Real> Vertex<Dim, Real>::operator *(const Real& x) const { Vertex<Dim, Real> res; - inlineMultiplication<Dim, Real>::computation(res.coordinates, this->coordinates, x); + inlineMultiplication<Dim, Real>::computation(res.coordinates.data(), this->coordinates.data(), x); return res; } @@ -136,7 +140,7 @@ Vertex<Dim, Real> Vertex<Dim, Real>::operator /(const Real& x) const { template<unsigned int Dim, typename Real> Real Vertex<Dim, Real>::operator*(const Vertex<Dim, Real> &v) { - return inlineScalarProduct<Dim, Real>::computation(coordinates, v.coordinates); + return inlineScalarProduct<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); } @@ -144,14 +148,14 @@ Real Vertex<Dim, Real>::operator*(const Vertex<Dim, Real> &v) // Adds value of coordinates of another Point template <unsigned int Dim, typename Real> Vertex<Dim, Real>& Vertex<Dim, Real>::operator +=(const Vertex<Dim, Real>& v){ - inlineAddition<Dim, Real>::computation(coordinates, v.coordinates); + inlineAddition<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); return *this; } // Subtracts value of coordinates of another Point template <unsigned int Dim, typename Real> Vertex<Dim, Real>& Vertex<Dim, Real>::operator -=(const Vertex<Dim, Real>& v){ - inlineSubtraction<Dim, Real>::computation(coordinates, v.coordinates); + inlineSubtraction<Dim, Real>::computation(coordinates.data(), v.coordinates.data()); return *this; } @@ -159,7 +163,7 @@ Vertex<Dim, Real>& Vertex<Dim, Real>::operator -=(const Vertex<Dim, Real>& v){ // Adds value of coordinates of another Point template <unsigned int Dim, typename Real> Vertex<Dim, Real>& Vertex<Dim, Real>::operator *=(const Real& x){ - inlineMultiplication<Dim, Real>::computation(coordinates, x); + inlineMultiplication<Dim, Real>::computation(coordinates.data(), x); return *this; } diff --git a/Unstructured_mesh/main.cpp b/Unstructured_mesh/main.cpp index af79e473fdabccffd2b06fc69bd37bd28efa3824..a360ddffc41e8bbe5e2467800e9bb6e9eea418ab 100644 --- a/Unstructured_mesh/main.cpp +++ b/Unstructured_mesh/main.cpp @@ -695,6 +695,9 @@ void testDebug() { ConsoleLogger::writeVar(__LINE__, __FILE__, "r", r, "i", i, "c", c, "list", list, "vec", vec, "b", b, "map", m); ConsoleLogger::writeVar(__LINE__, __FILE__,"---", {5,4,3,2}); DBGVAR(r, i, c, list, vec, b, m); + + Vertex<7, double> vert; + DBGVAR(vert.getCoordinates()); } @@ -710,6 +713,6 @@ int main() //testTemplate(); //UnstructuredMesh<5, size_t, double, 6,5,4> m; //m.ComputeElementMeasures(); - testDebug(); + //testDebug(); } diff --git a/debug/consolelogger.h b/debug/consolelogger.h index d1b4d5155ad69b3b2cc881dee5846beec69c2f4b..4f6672d0186d92e6ecffb413b694e7736d5380ed 100644 --- a/debug/consolelogger.h +++ b/debug/consolelogger.h @@ -76,8 +76,11 @@ class ConsoleLogger { template<typename T> static auto _writeWar(const T &list) - -> typename std::enable_if<std::is_class< - decltype(std::declval<const T&>().begin())>::value && + -> typename std::enable_if< + !std::is_same< + decltype(std::declval<const T&>().begin()), + void + >::value && !std::is_same<T, std::string>::value >::type {