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