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