summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2017-07-06 16:57:28 +0200
committerStanislaw Halik <sthalik@misaki.pl>2017-07-06 16:57:28 +0200
commit93cd5c5f2f6c23bae83c907b6381dca9492e9eff (patch)
treeb19bb638d268169be6625d8dea69e867b1ae4876
parent06d9c2b77ac30250e1abba11b2e2a40c4ed4803a (diff)
options/value: try "extern template" for code size
-rw-r--r--compat/linkage-macros.hpp3
-rw-r--r--options/value.cpp3
-rw-r--r--options/value.hpp23
3 files changed, 29 insertions, 0 deletions
diff --git a/compat/linkage-macros.hpp b/compat/linkage-macros.hpp
index 460e7ee5..a4c4b351 100644
--- a/compat/linkage-macros.hpp
+++ b/compat/linkage-macros.hpp
@@ -7,3 +7,6 @@
# define OTR_GENERIC_EXPORT __attribute__ ((visibility ("default")))
# define OTR_GENERIC_IMPORT
#endif
+
+#define OTR_TEMPLATE_EXPORT template class OTR_GENERIC_EXPORT
+#define OTR_TEMPLATE_IMPORT extern template class OTR_GENERIC_IMPORT
diff --git a/options/value.cpp b/options/value.cpp
new file mode 100644
index 00000000..39bf0506
--- /dev/null
+++ b/options/value.cpp
@@ -0,0 +1,3 @@
+// instantiate the "template class" value<t> symbols
+#define OTR_OPT_VALUE_TMPL_EXPORT
+#include "value.hpp"
diff --git a/options/value.hpp b/options/value.hpp
index ba482cf7..be3e4be2 100644
--- a/options/value.hpp
+++ b/options/value.hpp
@@ -130,4 +130,27 @@ private:
const t def;
};
+#if defined OTR_OPT_VALUE_TMPL_EXPORT && defined BUILD_OPTIONS
+# define OTR_OPT_VALUE OTR_TEMPLATE_EXPORT
+#else
+# define OTR_OPT_VALUE OTR_TEMPLATE_IMPORT
+#endif
+
+OTR_OPT_VALUE value<double>;
+OTR_OPT_VALUE value<float>;
+OTR_OPT_VALUE value<int>;
+OTR_OPT_VALUE value<bool>;
+OTR_OPT_VALUE value<QString>;
+OTR_OPT_VALUE value<slider_value>;
+OTR_OPT_VALUE value<QPointF>;
+OTR_OPT_VALUE value<QVariant>;
+
+OTR_OPT_VALUE value<QList<double>>;
+OTR_OPT_VALUE value<QList<float>>;
+OTR_OPT_VALUE value<QList<int>>;
+OTR_OPT_VALUE value<QList<bool>>;
+OTR_OPT_VALUE value<QList<QString>>;
+OTR_OPT_VALUE value<QList<slider_value>>;
+OTR_OPT_VALUE value<QList<QPointF>>;
+
} // ns options