changeset 29279:e4c152e827aa

Visibility: Forward declare template classes with visibility attributes (patch #8919). * Array.h, MArray.h, Sparse.h: Forward declare template classes with visibility attributes before template class definition. * Array-i.cc: Instantiate Array<T> template class with more integer types.
author Markus Mützel <markus.muetzel@gmx.de>
date Thu, 07 Jan 2021 18:34:18 +0100
parents 7bfc454b9e08
children 448bbc1f99a1
files liboctave/array/Array-i.cc liboctave/array/Array.h liboctave/array/MArray.h liboctave/array/Sparse.h
diffstat 4 files changed, 27 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/Array-i.cc	Thu Jan 07 11:11:39 2021 -0800
+++ b/liboctave/array/Array-i.cc	Thu Jan 07 18:34:18 2021 +0100
@@ -43,18 +43,37 @@
 
 extern template class Array<idx_vector>;
 
+template class octave_sort<signed char>;
+//template class octave_sort<short>;
 template class octave_sort<int>;
 template class octave_sort<long>;
 #if defined (OCTAVE_HAVE_LONG_LONG_INT)
 template class octave_sort<long long>;
 #endif
 
+INSTANTIATE_ARRAY (signed char, OCTAVE_API);
+//INSTANTIATE_ARRAY (short, OCTAVE_API);
 INSTANTIATE_ARRAY (int, OCTAVE_API);
 INSTANTIATE_ARRAY (long, OCTAVE_API);
 #if defined (OCTAVE_HAVE_LONG_LONG_INT)
 INSTANTIATE_ARRAY (long long, OCTAVE_API);
 #endif
 
+template class octave_sort<unsigned char>;
+template class octave_sort<unsigned short>;
+template class octave_sort<unsigned int>;
+template class octave_sort<unsigned long>;
+#if defined (OCTAVE_HAVE_UNSIGNED_LONG_LONG_INT)
+template class octave_sort<unsigned long long>;
+#endif
+
+INSTANTIATE_ARRAY (unsigned char, OCTAVE_API);
+INSTANTIATE_ARRAY (unsigned short, OCTAVE_API);
+INSTANTIATE_ARRAY (unsigned int, OCTAVE_API);
+#if defined (OCTAVE_HAVE_UNSIGNED_LONG_LONG_INT)
+INSTANTIATE_ARRAY (unsigned long long, OCTAVE_API);
+#endif
+
 template class octave_sort<octave_int8>;
 template class octave_sort<octave_int16>;
 template class octave_sort<octave_int32>;
--- a/liboctave/array/Array.h	Thu Jan 07 11:11:39 2021 -0800
+++ b/liboctave/array/Array.h	Thu Jan 07 18:34:18 2021 +0100
@@ -122,6 +122,9 @@
 //!   - string_vector: Array<std::string> with 1 column
 //!   - Cell: Array<octave_value>, equivalent to an Octave cell.
 
+// forward declare template with visibility attribute
+template <typename T> class OCTARRAY_API Array;
+
 template <typename T>
 class
 Array
--- a/liboctave/array/MArray.h	Thu Jan 07 11:11:39 2021 -0800
+++ b/liboctave/array/MArray.h	Thu Jan 07 18:34:18 2021 +0100
@@ -31,7 +31,8 @@
 #include "Array.h"
 #include "mx-inlines.cc"
 
-template <typename T> class MArray;
+// forward declare template with visibility attribute
+template <typename T> class OCTAVE_API MArray;
 
 template <typename T> MArray<T>& operator += (MArray<T>&, const T&);
 template <typename T> MArray<T>& operator -= (MArray<T>&, const T&);
--- a/liboctave/array/Sparse.h	Thu Jan 07 11:11:39 2021 -0800
+++ b/liboctave/array/Sparse.h	Thu Jan 07 18:34:18 2021 +0100
@@ -43,6 +43,9 @@
 // Two dimensional sparse class.  Handles the reference counting for
 // all the derived classes.
 
+// forward declare template with visibility attribute
+template <typename T> class OCTAVE_API Sparse;
+
 template <typename T>
 class
 Sparse