From 1c4764436e0df0a3cf8176be60166cd6aeca3ef9 Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Thu, 7 Feb 2019 10:57:59 +0100 Subject: [PATCH] ENH: fix export macros for Image and VectorImage, add complex --- Modules/Core/ImageBase/include/otbImage.h | 25 ++++++++++++------- .../Core/ImageBase/include/otbVectorImage.h | 25 ++++++++++++------- Modules/Core/ImageBase/src/otbImage.cxx | 20 +++++++++------ Modules/Core/ImageBase/src/otbVectorImage.cxx | 20 +++++++++------ 4 files changed, 56 insertions(+), 34 deletions(-) diff --git a/Modules/Core/ImageBase/include/otbImage.h b/Modules/Core/ImageBase/include/otbImage.h index 32f177dc07..238c7c06fe 100644 --- a/Modules/Core/ImageBase/include/otbImage.h +++ b/Modules/Core/ImageBase/include/otbImage.h @@ -31,6 +31,7 @@ #endif #include "otbImageMetadataInterfaceBase.h" +#include "OTBImageBaseExport.h" namespace otb { @@ -85,7 +86,7 @@ namespace otb */ template <class TPixel, unsigned int VImageDimension = 2> -class ITK_EXPORT Image : public itk::Image<TPixel, VImageDimension> +class OTBImageBase_EXPORT_TEMPLATE Image : public itk::Image<TPixel, VImageDimension> { public: /** Standard class typedefs. */ @@ -274,18 +275,24 @@ private: #include "otbImage.hxx" #endif +#include <complex> + namespace otb { // Prevent implicit instanciation of common types to improve build performance // Explicit instanciations are provided in the .cxx -extern template class Image<unsigned int, 2>; -extern template class Image<int, 2>; -extern template class Image<unsigned char, 2>; -extern template class Image<char, 2>; -extern template class Image<unsigned short, 2>; -extern template class Image<short, 2>; -extern template class Image<float, 2>; -extern template class Image<double, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<unsigned int, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<int, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<unsigned char, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<char, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<unsigned short, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<short, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<float, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<double, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<std::complex<int> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<std::complex<short> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<std::complex<float> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE Image<std::complex<double> , 2>; } diff --git a/Modules/Core/ImageBase/include/otbVectorImage.h b/Modules/Core/ImageBase/include/otbVectorImage.h index 6c7d305c69..66f7ebe943 100644 --- a/Modules/Core/ImageBase/include/otbVectorImage.h +++ b/Modules/Core/ImageBase/include/otbVectorImage.h @@ -30,6 +30,7 @@ #include "itkVectorImage.h" #endif #include "otbImageMetadataInterfaceBase.h" +#include "OTBImageBaseExport.h" namespace otb { @@ -40,7 +41,7 @@ namespace otb * \ingroup OTBImageBase */ template <class TPixel, unsigned int VImageDimension = 2> -class ITK_EXPORT VectorImage : public itk::VectorImage<TPixel, VImageDimension> +class OTBImageBase_EXPORT_TEMPLATE VectorImage : public itk::VectorImage<TPixel, VImageDimension> { public: @@ -215,18 +216,24 @@ private: #include "otbVectorImage.hxx" #endif +#include <complex> + namespace otb { // Prevent implicit instanciation of common types to improve build performance // Explicit instanciations are provided in the .cxx -extern template class VectorImage<unsigned int, 2>; -extern template class VectorImage<int, 2>; -extern template class VectorImage<unsigned char, 2>; -extern template class VectorImage<char, 2>; -extern template class VectorImage<unsigned short, 2>; -extern template class VectorImage<short, 2>; -extern template class VectorImage<float, 2>; -extern template class VectorImage<double, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<unsigned int, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<int, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<unsigned char, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<char, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<unsigned short, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<short, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<float, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<double, 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<std::complex<int> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<std::complex<short> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<std::complex<float> , 2>; +extern template class OTBImageBase_EXPORT_TEMPLATE VectorImage<std::complex<double> , 2>; } diff --git a/Modules/Core/ImageBase/src/otbImage.cxx b/Modules/Core/ImageBase/src/otbImage.cxx index 5ca6443b65..af7d4ccdef 100644 --- a/Modules/Core/ImageBase/src/otbImage.cxx +++ b/Modules/Core/ImageBase/src/otbImage.cxx @@ -23,12 +23,16 @@ namespace otb { // Explicit instanciation of common types -template class Image<unsigned int, 2>; -template class Image<int, 2>; -template class Image<unsigned char, 2>; -template class Image<char, 2>; -template class Image<unsigned short, 2>; -template class Image<short, 2>; -template class Image<float, 2>; -template class Image<double, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<unsigned int, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<int, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<unsigned char, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<char, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<unsigned short, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<short, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<float, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<double, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<std::complex<int>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<std::complex<short>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<std::complex<float>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE Image<std::complex<double>, 2>; } diff --git a/Modules/Core/ImageBase/src/otbVectorImage.cxx b/Modules/Core/ImageBase/src/otbVectorImage.cxx index 46c827d4e0..f80d3df6f1 100644 --- a/Modules/Core/ImageBase/src/otbVectorImage.cxx +++ b/Modules/Core/ImageBase/src/otbVectorImage.cxx @@ -23,14 +23,18 @@ namespace otb { // Explicit instanciation of common types -template class VectorImage<unsigned int, 2>; -template class VectorImage<int, 2>; -template class VectorImage<unsigned char, 2>; -template class VectorImage<char, 2>; -template class VectorImage<unsigned short, 2>; -template class VectorImage<short, 2>; -template class VectorImage<float, 2>; -template class VectorImage<double, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<unsigned int, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<int, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<unsigned char, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<char, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<unsigned short, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<short, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<float, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<double, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<std::complex<int>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<std::complex<short>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<std::complex<float>, 2>; +template class OTBImageBase_EXPORT_EXPLICIT_TEMPLATE VectorImage<std::complex<double>, 2>; } -- GitLab