From 8fb97b141ba9bbaf33ca5286eafe91c76c90e654 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Mon, 25 Feb 2013 20:19:32 +0100 Subject: [PATCH] Add std::array ctors to TemplateEdge and Quad. --- MeshLib/Elements/TemplateEdge.h | 4 ++++ MeshLib/Elements/TemplateEdge.tpp | 13 ++++++++++++- MeshLib/Elements/TemplateQuad.h | 7 +++++++ MeshLib/Elements/TemplateQuad.tpp | 18 +++++++++++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/MeshLib/Elements/TemplateEdge.h b/MeshLib/Elements/TemplateEdge.h index c4662ff019c..0a6d35265d9 100644 --- a/MeshLib/Elements/TemplateEdge.h +++ b/MeshLib/Elements/TemplateEdge.h @@ -15,6 +15,7 @@ #ifndef TEMPLATEEDGE_H_ #define TEMPLATEEDGE_H_ +#include <array> #include <limits> #include "MshEnums.h" @@ -39,6 +40,9 @@ public: /// Constructor with an array of mesh nodes. TemplateEdge(Node* nodes[NNODES], unsigned value = 0); + /// Constructs an edge from array of Node pointers. + TemplateEdge(std::array<Node*, NNODES> const& nodes, unsigned value = 0); + /// Copy constructor TemplateEdge(const TemplateEdge &edge); diff --git a/MeshLib/Elements/TemplateEdge.tpp b/MeshLib/Elements/TemplateEdge.tpp index 1fe174047bc..0b31fed5de5 100644 --- a/MeshLib/Elements/TemplateEdge.tpp +++ b/MeshLib/Elements/TemplateEdge.tpp @@ -12,7 +12,18 @@ * */ -namespace MeshLib { +namespace MeshLib +{ +template<unsigned NNODES, CellType::type CELLEDGETYPE> +TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(std::array<Node*, NNODES> const& nodes, + unsigned value) + : Element(value) +{ + _nodes = new Node*[NNODES]; + std::copy(nodes.begin(), nodes.end(), _nodes); + + this->_length = this->computeVolume(); +} template<unsigned NNODES, CellType::type CELLEDGETYPE> TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(Node* nodes[NNODES], unsigned value) : diff --git a/MeshLib/Elements/TemplateQuad.h b/MeshLib/Elements/TemplateQuad.h index 6e1e5320a5b..528fd5ea52e 100644 --- a/MeshLib/Elements/TemplateQuad.h +++ b/MeshLib/Elements/TemplateQuad.h @@ -42,6 +42,13 @@ public: /// Constructor with an array of mesh nodes. TemplateQuad(Node* nodes[NNODES], unsigned value = 0); + /// Constructs an edge from array of Node pointers. + TemplateQuad(std::array<Node*, NNODES> const& nodes, unsigned value = 0); + + /// Constructs a quad from NNODES of Nodes initializing Face with + // value = 0. + TemplateQuad(Node* n0, Node* n1, Node* n2, Node* n3, ...); + /// Copy constructor TemplateQuad(const TemplateQuad &quad); diff --git a/MeshLib/Elements/TemplateQuad.tpp b/MeshLib/Elements/TemplateQuad.tpp index e79a85a2d87..fcd938744c5 100644 --- a/MeshLib/Elements/TemplateQuad.tpp +++ b/MeshLib/Elements/TemplateQuad.tpp @@ -12,6 +12,8 @@ * */ +#include <array> + #include "Node.h" #include "Tri.h" @@ -19,7 +21,21 @@ #include "MathTools.h" #include "AnalyticalGeometry.h" -namespace MeshLib { +namespace MeshLib +{ +template<unsigned NNODES, CellType::type CELLQUADTYPE> +TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(std::array<Node*, NNODES> const& nodes, + unsigned value) + : Face(value) +{ + _nodes = new Node*[NNODES]; + std::copy(nodes.begin(), nodes.end(), _nodes); + + _neighbors = new Element*[4]; + std::fill(_neighbors, _neighbors + 4, nullptr); + + this->_area = this->computeVolume(); +} template <unsigned NNODES, CellType::type CELLQUADTYPE> TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned value) -- GitLab