From 4508cf4ea174337aef3972e470b2d615b9ad4c79 Mon Sep 17 00:00:00 2001 From: Antoine Regimbeau <antoine.regimbeau@c-s.fr> Date: Thu, 14 Dec 2017 10:11:13 +0100 Subject: [PATCH] REFAC: replace file after POC --- .../include/otbDefaultConvertNewImpl.h | 220 --------- .../include/otbDefaultConvertPixelTraits.h | 466 +++++++----------- .../include/otbConvertTypeFunctor.h | 10 +- .../IO/ImageIO/include/otbImageFileReader.h | 4 +- .../IO/ImageIO/include/otbImageFileReader.txx | 4 +- 5 files changed, 182 insertions(+), 522 deletions(-) delete mode 100644 Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h diff --git a/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h b/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h deleted file mode 100644 index 60bd0726ad..0000000000 --- a/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h +++ /dev/null @@ -1,220 +0,0 @@ -/*========================================================================= - * - * Copyright Insight Software Consortium - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0.txt - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - *=========================================================================*/ -#ifndef otbDefaultConvertNewImp_h -#define otbDefaultConvertNewImp_h - -#include "itkDefaultConvertPixelTraits.h" - -// #include "itkOffset.h" -// #include "itkVector.h" -// #include "itkMatrix.h" -// #include "itkVariableLengthVector.h" -// #include "itkVariableSizeMatrix.h" - -namespace otb -{ - - -template < typename PixelType> -class DefaultConvertPixelTraitsTest -: public itk::DefaultConvertPixelTraits < PixelType > -{ -public: - typedef itk::DefaultConvertPixelTraits < PixelType > SuperClass; - using SuperClass::ComponentType; - - using SuperClass::SetNthComponent; - - static void SetNthComponent(int , PixelType & pixel, const PixelType & v) - { - pixel = v; - } -}; - -// We might not need this specialization if the compileur allow -// us to declare to function with same signature in some case : -// see "SetNthComponent" -/* -#define OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(type) \ - template< > \ - class DefaultConvertPixelTraitsTest < type > \ - : public itk::DefaultConvertPixelTraits < type > \ - { \ -public: \ - typedef itk::DefaultConvertPixelTraits < type > SuperClass; \ - using typename SuperClass::ComponentType; \ - }; -*/ -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(float) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(double) -// Warning long double is not in itk < 4.11 -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long double) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(int) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(char) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(short) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned int) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(signed char) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned char) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned short) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long long) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long long) -// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(bool) - -// #undef OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL - -// -// Default traits for the Offset<> pixel type -// - -// template<unsigned int VDimension> -// class DefaultConvertPixelTraitsTest < itk::Offset< VDimension > > : -// public itk::DefaultConvertPixelTraits< itk::Offset< VDimension > > -// { -// public: -// typedef itk::DefaultConvertPixelTraits < itk::Offset< VDimension > > SuperClass; -// using typename SuperClass::ComponentType; - -// using SuperClass::SetNthComponent; - -// static void SetNthComponent(int , TargetType & pixel, const TargetType& v) -// { -// pixel = v; -// } -// }; - -// -// Default traits for the pixel types deriving from FixedArray<> -// - -/* -define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(type) \ -template < typename TComponentType , unsigned VDimension > \ -class DefaultConvertPixelTraitsTest < type < TComponentType , VDimension > > \ -: public itk::DefaultConvertPixelTraits < type < TComponentType , VDimension > > \ -{ \ -public: \ - typedef itk::DefaultConvertPixelTraits < type < TComponentType , VDimension > > SuperClass;\ - typedef typename SuperClass::TargetType TargetType; \ - static void SetNthComponent(int , TargetType & pixel, const TargetType & v) \ - { \ - pixel = v; \ - } \ -} \ -*/ -// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::FixedArray); -// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Vector); -// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::CovariantVector); -// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Point); - -// #undef OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE - -// -// Default traits for pixel types deriving from VariableLengthVector<> -// - -// template < typename T > -// class DefaultConvertPixelTraitsTest < itk::VariableLengthVector < T > > -// : public itk::DefaultConvertPixelTraits < itk::VariableLengthVector< T > > -// { -// public: -// typedef itk::DefaultConvertPixelTraits< itk::VariableLengthVector < T > > SuperClass; -// using typename SuperClass::TargetType; -// using typename SuperClass::ComponentType; -// }; - -// -// Default traits for the pixel types deriving from Matrix<> -// - -// template<typename VComponent, unsigned VRows, unsigned VCols > -// class DefaultConvertPixelTraitsTest < itk::Matrix< VComponent, VRows, VCols > > -// : public itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > -// { -// public: -// typedef itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > SuperClass; -// using typename SuperClass::TargetType; -// using typename SuperClass::ComponentType; - - -// using SuperClass::SetNthComponent; - -// static void SetNthComponent(int , TargetType & pixel, const TargetType& v) -// { -// pixel = v; -// } -// }; - -// -// Default traits for pixel types deriving from VariableSizeMatrix<> -// - -// template < typename T > -// class DefaultConvertPixelTraitsTest< itk::VariableSizeMatrix< T > > -// : public itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix< T > > -// { -// public: -// typedef itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix < T > > SuperClass; -// using typename SuperClass::TargetType; -// using typename SuperClass::ComponentType; -// }; - -// -// Default traits for pixel types deriving from std::complex<> -// - -template < typename T > -class DefaultConvertPixelTraitsTest < ::std::complex < T > > -: public itk::DefaultConvertPixelTraits < ::std::complex < T > > -{ -public: - - typedef itk::DefaultConvertPixelTraits < ::std::complex < T > > SuperClass; - using typename SuperClass::TargetType ; - using typename SuperClass::ComponentType ; - - using SuperClass::SetNthComponent ; - - static void SetNthComponent(int , TargetType & pixel, const TargetType & v) - { - pixel = v; - } - - static TargetType GetNthComponent ( int , const TargetType & pixel ) - { - return pixel; - } - - static ComponentType GetScalarValue(const TargetType& pixel) - { - /* - * This seems to be dead code, since the complex to scalar - * conversion is done by ConvertPixelBuffer - * - * Historically, it was returning std::norm, which causes - * compilation error on MacOSX 10.9. - * Now returns the equivalent implementation of std::norm. - */ - return static_cast<ComponentType>( pixel.real()*pixel.real() - + pixel.imag()*pixel.imag() ); - } -}; - -} // end namespace -#endif diff --git a/Modules/Core/ImageBase/include/otbDefaultConvertPixelTraits.h b/Modules/Core/ImageBase/include/otbDefaultConvertPixelTraits.h index 3339a54a1a..29ed2b3fee 100644 --- a/Modules/Core/ImageBase/include/otbDefaultConvertPixelTraits.h +++ b/Modules/Core/ImageBase/include/otbDefaultConvertPixelTraits.h @@ -1,340 +1,220 @@ -/* - * Copyright (C) 1999-2011 Insight Software Consortium - * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) +/*========================================================================= * - * This file is part of Orfeo Toolbox + * Copyright Insight Software Consortium * - * https://www.orfeo-toolbox.org/ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0.txt * - * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - + *=========================================================================*/ #ifndef otbDefaultConvertPixelTraits_h #define otbDefaultConvertPixelTraits_h -#include "itkOffset.h" -#include "itkVector.h" -#include "itkMatrix.h" +#include "itkDefaultConvertPixelTraits.h" -namespace otb -{ +// #include "itkOffset.h" +// #include "itkVector.h" +// #include "itkMatrix.h" +// #include "itkVariableLengthVector.h" +// #include "itkVariableSizeMatrix.h" -/** \class DefaultConvertPixelTraits - * \brief Traits class used to by ConvertPixels to convert blocks of pixels. - * - * TOutputPixelType is the destination type. The input type is inferred - * by the templated static function Convert. - * - * This implementation does a simple assignment operator, so if you are - * going from a higher bit representation to a lower bit one (int to - * char), you may want to specialize and add some sort of transfer function. - * - * \ingroup OTBImageBase - */ -template<typename PixelType> -class DefaultConvertPixelTraits +namespace otb { -public: - /** Determine the pixel data type. */ - typedef typename PixelType::ComponentType ComponentType; - - /** Return the number of components per pixel. */ - static unsigned int GetNumberOfComponents() - { return PixelType::GetNumberOfComponents(); } - - /** Return the nth component of the pixel. */ - static ComponentType GetNthComponent(int c, const PixelType& pixel) - { return pixel.GetNthComponent(c); } - /** Set the nth component of the pixel. */ - static void SetNthComponent(int c, PixelType& pixel, const ComponentType& v) - { pixel.SetNthComponent(c, v); } - static void SetNthComponent(int itkNotUsed(c), PixelType & pixel, const PixelType& v) - { pixel = v; } - /** Return a single scalar value from this pixel. */ - static ComponentType GetScalarValue(const PixelType& pixel) - { return pixel.GetScalarValue(); } +template < typename PixelType> +class DefaultConvertPixelTraits +: public itk::DefaultConvertPixelTraits < PixelType > +{ +public: + typedef itk::DefaultConvertPixelTraits < PixelType > SuperClass; + using SuperClass::ComponentType; -}; + using SuperClass::SetNthComponent; -#define OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(type) \ -template<> \ -class DefaultConvertPixelTraits<type> \ -{ \ -public: \ - typedef type ComponentType; \ - static unsigned int GetNumberOfComponents() \ - { \ - return 1; \ - } \ - static void SetNthComponent(int , type& pixel, const ComponentType& v) \ - { \ - pixel = v; \ - } \ - static type GetScalarValue(const type& pixel) \ - { \ - return pixel; \ - } \ + static void SetNthComponent(int , PixelType & pixel, const PixelType & v) + { + pixel = v; + } }; -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(float) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(double) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(int) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(char) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(short) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned int) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(signed char) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned char) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned short) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long) -OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(bool) - -#undef OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL +// We might not need this specialization if the compileur allow +// us to declare to function with same signature in some case : +// see "SetNthComponent" +/* +#define OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(type) \ + template< > \ + class DefaultConvertPixelTraits < type > \ + : public itk::DefaultConvertPixelTraits < type > \ + { \ +public: \ + typedef itk::DefaultConvertPixelTraits < type > SuperClass; \ + using typename SuperClass::ComponentType; \ + }; +*/ +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(float) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(double) +// Warning long double is not in itk < 4.11 +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long double) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(int) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(char) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(short) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned int) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(signed char) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned char) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned short) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long long) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long long) +// OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(bool) + +// #undef OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL // // Default traits for the Offset<> pixel type // -#define OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(dimension) \ -template<> \ -class DefaultConvertPixelTraits< itk::Offset<dimension> > \ -{ \ -public: \ - typedef itk::Offset<dimension> TargetType; \ - typedef TargetType::OffsetValueType ComponentType; \ - static unsigned int GetNumberOfComponents() \ - { \ - return dimension; \ - } \ - static void SetNthComponent(int i, TargetType & pixel, const ComponentType& v) \ - { \ - pixel[i] = v; \ - } \ - static void SetNthComponent(int , TargetType & pixel, const TargetType& v) \ - { \ - pixel = v; \ - } \ - static ComponentType GetScalarValue(const TargetType& pixel) \ - { \ - return pixel[0]; \ - } \ -}; +// template<unsigned int VDimension> +// class DefaultConvertPixelTraits < itk::Offset< VDimension > > : +// public itk::DefaultConvertPixelTraits< itk::Offset< VDimension > > +// { +// public: +// typedef itk::DefaultConvertPixelTraits < itk::Offset< VDimension > > SuperClass; +// using typename SuperClass::ComponentType; +// using SuperClass::SetNthComponent; -// Define traits for Offset<> from dimensions 1 to 5 - OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(1) - OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(2) - OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(3) - OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(4) - OTB_DEFAULTCONVERTTRAITS_OFFSET_TYPE(5) +// static void SetNthComponent(int , TargetType & pixel, const TargetType& v) +// { +// pixel = v; +// } +// }; // // Default traits for the pixel types deriving from FixedArray<> // -#define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(type,componenttype, dimension) \ -template<> \ -class DefaultConvertPixelTraits< type< componenttype, dimension> > \ -{ \ -public: \ - typedef type< componenttype, dimension > TargetType; \ - typedef componenttype ComponentType; \ - static unsigned int GetNumberOfComponents() \ - { \ - return dimension; \ - } \ - static void SetNthComponent(int i, TargetType & pixel, const ComponentType& v) \ - { \ - pixel[i] = v; \ - } \ - static void SetNthComponent(int , TargetType & pixel, const TargetType& v) \ - { \ - pixel = v; \ - } \ - static ComponentType GetScalarValue(const TargetType& pixel) \ - { \ - return pixel[0]; \ - } \ -}; \ - -// -// -// Define traits for Classed deriving from FixedArray from dimensions 1 to 6 -// These classes include: Vector, CovariantVector and Point. -// -// -#define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, Type) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,1) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,2) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,3) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,4) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,5) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(ArrayType,Type,6) - -#define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_TYPES_MACRO(ArrayType) \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, char); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, signed char); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, unsigned char); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, short); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, unsigned short); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, int); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, unsigned int); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, long); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, unsigned long); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, float); \ - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_MACRO(ArrayType, double); - - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_TYPES_MACRO(itk::Vector); - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_TYPES_MACRO(itk::CovariantVector); - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_TYPES_MACRO(itk::Point); - OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE_ALL_TYPES_MACRO(itk::FixedArray); - -// -// End of Traits for the classes deriving from FixedArray. -// -// - +/* +define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(type) \ +template < typename TComponentType , unsigned VDimension > \ +class DefaultConvertPixelTraits < type < TComponentType , VDimension > > \ +: public itk::DefaultConvertPixelTraits < type < TComponentType , VDimension > > \ +{ \ +public: \ + typedef itk::DefaultConvertPixelTraits < type < TComponentType , VDimension > > SuperClass;\ + typedef typename SuperClass::TargetType TargetType; \ + static void SetNthComponent(int , TargetType & pixel, const TargetType & v) \ + { \ + pixel = v; \ + } \ +} \ +*/ +// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::FixedArray); +// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Vector); +// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::CovariantVector); +// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Point); + +// #undef OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE + +// +// Default traits for pixel types deriving from VariableLengthVector<> +// + +// template < typename T > +// class DefaultConvertPixelTraits < itk::VariableLengthVector < T > > +// : public itk::DefaultConvertPixelTraits < itk::VariableLengthVector< T > > +// { +// public: +// typedef itk::DefaultConvertPixelTraits< itk::VariableLengthVector < T > > SuperClass; +// using typename SuperClass::TargetType; +// using typename SuperClass::ComponentType; +// }; // // Default traits for the pixel types deriving from Matrix<> // -#define OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(type,componenttype,rows,cols) \ -template<> \ -class DefaultConvertPixelTraits< type< componenttype, rows, cols > > \ -{ \ -public: \ - typedef type< componenttype, rows, cols > TargetType; \ - typedef componenttype ComponentType; \ - static unsigned int GetNumberOfComponents() \ - { \ - return rows * cols; \ - } \ - static void SetNthComponent(int i, TargetType & pixel, const ComponentType& v) \ - { \ - const unsigned int row = i / cols; \ - const unsigned int col = i % cols; \ - pixel[row][col] = v; \ - } \ - static void SetNthComponent(int , TargetType & pixel, const TargetType& v) \ - { \ - pixel = v; \ - } \ - static ComponentType GetScalarValue(const TargetType& pixel) \ - { \ - return pixel[0][0]; \ - } \ -}; \ +// template<typename VComponent, unsigned VRows, unsigned VCols > +// class DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > +// : public itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > +// { +// public: +// typedef itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > SuperClass; +// using typename SuperClass::TargetType; +// using typename SuperClass::ComponentType; -// -// -// Define traits for Classed deriving from Matrix from dimensions 1 to 6 -// -// -#define OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, Type) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,1,1) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,2,2) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,3,3) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,4,4) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,5,5) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE(ArrayType,Type,6,6) - -#define OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_TYPES_MACRO(ArrayType) \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, char); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, signed char); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, unsigned char); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, short); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, unsigned short); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, int); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, unsigned int); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, long); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, unsigned long); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, float); \ - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_MACRO(ArrayType, double); -// -// Add here other classes that derive from Matrix or that have the same API -// - OTB_DEFAULTCONVERTTRAITS_MATRIX_TYPE_ALL_TYPES_MACRO(itk::Matrix); +// using SuperClass::SetNthComponent; + +// static void SetNthComponent(int , TargetType & pixel, const TargetType& v) +// { +// pixel = v; +// } +// }; // -// End of Traits for the classes deriving from Matrix. -// +// Default traits for pixel types deriving from VariableSizeMatrix<> // +// template < typename T > +// class DefaultConvertPixelTraits< itk::VariableSizeMatrix< T > > +// : public itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix< T > > +// { +// public: +// typedef itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix < T > > SuperClass; +// using typename SuperClass::TargetType; +// using typename SuperClass::ComponentType; +// }; // -// Default traits for the pixel types deriving from std::complex<> +// Default traits for pixel types deriving from std::complex<> // -#define OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE( componenttype ) \ -template<> \ -class DefaultConvertPixelTraits< ::std::complex< componenttype > > \ -{ \ -public: \ - typedef ::std::complex< componenttype> TargetType; \ - typedef componenttype ComponentType; \ - static unsigned int GetNumberOfComponents() \ - { \ - return 2; \ - } \ - static void SetNthComponent(int i, TargetType & pixel, const ComponentType& v) \ - { \ - if( i == 0 ) \ - { \ - pixel = TargetType( v, pixel.imag() ); \ - } \ - else \ - { \ - pixel = TargetType( pixel.real(), v ); \ - } \ - } \ - static void SetNthComponent(int , TargetType & pixel, const TargetType& v) \ - { \ - pixel = v; \ - } \ - static ComponentType GetScalarValue(const TargetType& pixel) \ - { \ - /* \ - * This seems to be dead code, since the complex to scalar \ - * conversion is done by ConvertPixelBuffer \ - * \ - * Historically, it was returning std::norm, which causes \ - * compilation error on MacOSX 10.9. \ - * Now returns the equivalent implementation of std::norm. \ - */ \ - return static_cast<ComponentType>( pixel.real()*pixel.real() \ - + pixel.imag()*pixel.imag() ); \ - } \ -}; \ - -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(float); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(double); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(signed int); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(unsigned int); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(short int); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(signed char); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(unsigned char); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(signed long); -OTB_DEFAULTCONVERTTRAITS_COMPLEX_TYPE(unsigned long); +template < typename T > +class DefaultConvertPixelTraits < ::std::complex < T > > +: public itk::DefaultConvertPixelTraits < ::std::complex < T > > +{ +public: -// -// End of Traits for the classes deriving from std::complex. -// -// + typedef itk::DefaultConvertPixelTraits < ::std::complex < T > > SuperClass; + using typename SuperClass::TargetType ; + using typename SuperClass::ComponentType ; + + using SuperClass::SetNthComponent ; + + static void SetNthComponent(int , TargetType & pixel, const TargetType & v) + { + pixel = v; + } + + static TargetType GetNthComponent ( int , const TargetType & pixel ) + { + return pixel; + } + + static ComponentType GetScalarValue(const TargetType& pixel) + { + /* + * This seems to be dead code, since the complex to scalar + * conversion is done by ConvertPixelBuffer + * + * Historically, it was returning std::norm, which causes + * compilation error on MacOSX 10.9. + * Now returns the equivalent implementation of std::norm. + */ + return static_cast<ComponentType>( pixel.real()*pixel.real() + + pixel.imag()*pixel.imag() ); + } +}; -} // end namespace otb +} // end namespace #endif diff --git a/Modules/Filtering/ImageManipulation/include/otbConvertTypeFunctor.h b/Modules/Filtering/ImageManipulation/include/otbConvertTypeFunctor.h index 49358d4169..bb2da54df7 100644 --- a/Modules/Filtering/ImageManipulation/include/otbConvertTypeFunctor.h +++ b/Modules/Filtering/ImageManipulation/include/otbConvertTypeFunctor.h @@ -28,7 +28,7 @@ #include "itkVariableLengthVector.h" #include "itkNumericTraits.h" -#include "otbDefaultConvertNewImpl.h" +#include "otbDefaultConvertPixelTraits.h" namespace otb { @@ -126,7 +126,7 @@ protected: std::enable_if_t < std::is_arithmetic < PixelType > ::value , int > = 2 > void FillIn( unsigned int i , InputPixelType const & pix , std::vector < double > & vPix ) const { - vPix.push_back( DefaultConvertPixelTraitsTest < InputPixelType > :: + vPix.push_back( DefaultConvertPixelTraits < InputPixelType > :: GetNthComponent( i , pix ) ); } @@ -134,7 +134,7 @@ protected: std::enable_if_t < boost::is_complex < PixelType > :: value , int > = 1 > void FillIn( unsigned int i , InputPixelType const & pix , std::vector < double > & vPix ) const { - PixelType comp = DefaultConvertPixelTraitsTest < InputPixelType > :: + PixelType comp = DefaultConvertPixelTraits < InputPixelType > :: GetNthComponent( i , pix ); vPix.push_back( static_cast < double > ( real( comp ) ) ); vPix.push_back( static_cast < double > ( imag( comp ) ) ); @@ -163,7 +163,7 @@ protected: std::enable_if_t < std::is_arithmetic < PixelType > ::value , int > = 2 > void FillOut( unsigned int i , OutputPixelType & pix , std::vector < double > & vPix ) const { - DefaultConvertPixelTraitsTest < OutputPixelType > :: + DefaultConvertPixelTraits < OutputPixelType > :: SetNthComponent( i , pix , vPix[i] ); } @@ -171,7 +171,7 @@ protected: std::enable_if_t < boost::is_complex < PixelType > :: value , int > = 1 > void FillOut( unsigned int i , OutputPixelType & pix , std::vector < double > & vPix ) const { - DefaultConvertPixelTraitsTest < OutputPixelType > :: + DefaultConvertPixelTraits < OutputPixelType > :: SetNthComponent( i , pix , PixelType ( vPix[ 2 * i] , vPix[ 2 * i + 1] ) ); } diff --git a/Modules/IO/ImageIO/include/otbImageFileReader.h b/Modules/IO/ImageIO/include/otbImageFileReader.h index 8843e4bb2b..631f9d7dc2 100644 --- a/Modules/IO/ImageIO/include/otbImageFileReader.h +++ b/Modules/IO/ImageIO/include/otbImageFileReader.h @@ -33,7 +33,7 @@ #include "itkExceptionObject.h" #include "itkImageRegion.h" -#include "otbDefaultConvertNewImpl.h" +#include "otbDefaultConvertPixelTraits.h" #include "otbImageKeywordlist.h" #include "otbExtendedFilenameToReaderOptions.h" @@ -86,7 +86,7 @@ public: * \ingroup OTBImageIO */ template <class TOutputImage, - class ConvertPixelTraits=DefaultConvertPixelTraitsTest< + class ConvertPixelTraits=DefaultConvertPixelTraits< typename TOutputImage::IOPixelType > > class ITK_EXPORT ImageFileReader : public itk::ImageSource<TOutputImage> { diff --git a/Modules/IO/ImageIO/include/otbImageFileReader.txx b/Modules/IO/ImageIO/include/otbImageFileReader.txx index 1c67d82e00..98a37bf87b 100644 --- a/Modules/IO/ImageIO/include/otbImageFileReader.txx +++ b/Modules/IO/ImageIO/include/otbImageFileReader.txx @@ -179,8 +179,8 @@ ImageFileReader<TOutputImage, ConvertPixelTraits> this->m_ImageIO->SetIORegion(ioRegion); - typedef otb::DefaultConvertPixelTraitsTest<typename TOutputImage::IOPixelType> ConvertIOPixelTraits; - typedef otb::DefaultConvertPixelTraitsTest<typename TOutputImage::PixelType> ConvertOutputPixelTraits; + typedef otb::DefaultConvertPixelTraits<typename TOutputImage::IOPixelType> ConvertIOPixelTraits; + typedef otb::DefaultConvertPixelTraits<typename TOutputImage::PixelType> ConvertOutputPixelTraits; if (this->m_ImageIO->GetComponentTypeInfo() == typeid(typename ConvertOutputPixelTraits::ComponentType) -- GitLab