From 3a1475b0754ddfbcaadc82bdec63fca68bf3a42a Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Thu, 2 Jul 2015 20:01:53 +0200
Subject: [PATCH] [MeL] Explicit TemplateElement<Rule> instantiation

---
 MeshLib/Elements/Hex.h               |  3 +++
 MeshLib/Elements/Line.h              |  3 +++
 MeshLib/Elements/Prism.h             |  3 +++
 MeshLib/Elements/Pyramid.h           |  3 +++
 MeshLib/Elements/Quad.h              |  4 ++++
 MeshLib/Elements/TemplateElement.cpp | 34 ++++++++++++++++++++++++++++
 MeshLib/Elements/Tet.h               |  3 +++
 MeshLib/Elements/Tri.h               |  4 ++++
 8 files changed, 57 insertions(+)
 create mode 100644 MeshLib/Elements/TemplateElement.cpp

diff --git a/MeshLib/Elements/Hex.h b/MeshLib/Elements/Hex.h
index dab38b43091..f691bad8cc1 100644
--- a/MeshLib/Elements/Hex.h
+++ b/MeshLib/Elements/Hex.h
@@ -19,6 +19,9 @@
 #include "HexRule8.h"
 #include "HexRule20.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::HexRule20>;
+extern template class MeshLib::TemplateElement<MeshLib::HexRule8>;
+
 namespace MeshLib {
 typedef TemplateElement<HexRule8> Hex;
 typedef TemplateElement<HexRule20> Hex20;
diff --git a/MeshLib/Elements/Line.h b/MeshLib/Elements/Line.h
index 5616c32120a..392e3061be1 100644
--- a/MeshLib/Elements/Line.h
+++ b/MeshLib/Elements/Line.h
@@ -19,6 +19,9 @@
 #include "LineRule2.h"
 #include "LineRule3.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::LineRule2>;
+extern template class MeshLib::TemplateElement<MeshLib::LineRule3>;
+
 namespace MeshLib {
 
 typedef TemplateElement<LineRule2> Line;
diff --git a/MeshLib/Elements/Prism.h b/MeshLib/Elements/Prism.h
index 037f75200b0..82f8b23e001 100644
--- a/MeshLib/Elements/Prism.h
+++ b/MeshLib/Elements/Prism.h
@@ -19,6 +19,9 @@
 #include "PrismRule6.h"
 #include "PrismRule15.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::PrismRule15>;
+extern template class MeshLib::TemplateElement<MeshLib::PrismRule6>;
+
 namespace MeshLib {
 
 typedef TemplateElement<PrismRule6> Prism;
diff --git a/MeshLib/Elements/Pyramid.h b/MeshLib/Elements/Pyramid.h
index d4e1628bc6a..a2653d6eb87 100644
--- a/MeshLib/Elements/Pyramid.h
+++ b/MeshLib/Elements/Pyramid.h
@@ -19,6 +19,9 @@
 #include "PyramidRule5.h"
 #include "PyramidRule13.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::PyramidRule13>;
+extern template class MeshLib::TemplateElement<MeshLib::PyramidRule5>;
+
 namespace MeshLib {
 
 typedef TemplateElement<PyramidRule5> Pyramid;
diff --git a/MeshLib/Elements/Quad.h b/MeshLib/Elements/Quad.h
index c8bdb1d05da..750a436c3f6 100644
--- a/MeshLib/Elements/Quad.h
+++ b/MeshLib/Elements/Quad.h
@@ -20,6 +20,10 @@
 #include "QuadRule8.h"
 #include "QuadRule9.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule4>;
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule8>;
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule9>;
+
 namespace MeshLib
 {
 
diff --git a/MeshLib/Elements/TemplateElement.cpp b/MeshLib/Elements/TemplateElement.cpp
new file mode 100644
index 00000000000..134775fb3c5
--- /dev/null
+++ b/MeshLib/Elements/TemplateElement.cpp
@@ -0,0 +1,34 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2015, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "TemplateElement.h"
+
+#include "MeshLib/Elements/Hex.h"
+#include "MeshLib/Elements/Line.h"
+#include "MeshLib/Elements/Prism.h"
+#include "MeshLib/Elements/Pyramid.h"
+#include "MeshLib/Elements/Quad.h"
+#include "MeshLib/Elements/Tet.h"
+#include "MeshLib/Elements/Tri.h"
+
+template class MeshLib::TemplateElement<MeshLib::HexRule20    >;
+template class MeshLib::TemplateElement<MeshLib::HexRule8     >;
+template class MeshLib::TemplateElement<MeshLib::LineRule2    >;
+template class MeshLib::TemplateElement<MeshLib::LineRule3    >;
+template class MeshLib::TemplateElement<MeshLib::PrismRule15  >;
+template class MeshLib::TemplateElement<MeshLib::PrismRule6   >;
+template class MeshLib::TemplateElement<MeshLib::PyramidRule13>;
+template class MeshLib::TemplateElement<MeshLib::PyramidRule5 >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule4    >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule8    >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule9    >;
+template class MeshLib::TemplateElement<MeshLib::TetRule10    >;
+template class MeshLib::TemplateElement<MeshLib::TetRule4     >;
+template class MeshLib::TemplateElement<MeshLib::TriRule3     >;
+template class MeshLib::TemplateElement<MeshLib::TriRule6     >;
diff --git a/MeshLib/Elements/Tet.h b/MeshLib/Elements/Tet.h
index f8fd7b598d2..ad55b78c707 100644
--- a/MeshLib/Elements/Tet.h
+++ b/MeshLib/Elements/Tet.h
@@ -19,6 +19,9 @@
 #include "TetRule4.h"
 #include "TetRule10.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::TetRule10>;
+extern template class MeshLib::TemplateElement<MeshLib::TetRule4>;
+
 namespace MeshLib {
 
 typedef TemplateElement<TetRule4> Tet;
diff --git a/MeshLib/Elements/Tri.h b/MeshLib/Elements/Tri.h
index 80ea9c6e449..7bfc72ba7b6 100644
--- a/MeshLib/Elements/Tri.h
+++ b/MeshLib/Elements/Tri.h
@@ -19,6 +19,10 @@
 #include "TriRule3.h"
 #include "TriRule6.h"
 
+
+extern template class MeshLib::TemplateElement<MeshLib::TriRule3>;
+extern template class MeshLib::TemplateElement<MeshLib::TriRule6>;
+
 namespace MeshLib {
 
 typedef TemplateElement<TriRule3> Tri;
-- 
GitLab