//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ #ifndef vtk_m_cont_SerializableTypeString_h #define vtk_m_cont_SerializableTypeString_h #include #include namespace vtkm { namespace cont { /// \brief A traits class that gives a unique name for a type. This class /// should be specialized for every type that has to be serialized by diy. template struct SerializableTypeString #ifdef VTKM_DOXYGEN_ONLY { static VTKM_CONT const std::string& Get() { static std::string name = "TypeName"; return name; } } #endif ; namespace internal { template std::string GetVariadicSerializableTypeString(const T&, const Ts&... ts) { return SerializableTypeString::Get() + "," + GetVariadicSerializableTypeString(ts...); } template std::string GetVariadicSerializableTypeString(const T&) { return SerializableTypeString::Get(); } } // internal /// @cond SERIALIZATION template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "I8"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "U8"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "I16"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "U16"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "I32"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "U32"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "I64"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "U64"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "F32"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "F64"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "B8"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "C8"; return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "L" + std::to_string(sizeof(VTKM_UNUSED_INT_TYPE) * 8); return name; } }; template <> struct SerializableTypeString { static VTKM_CONT const std::string& Get() { static std::string name = "UL" + std::to_string(sizeof(unsigned VTKM_UNUSED_INT_TYPE) * 8); return name; } }; template struct SerializableTypeString> { static VTKM_CONT const std::string& Get() { static std::string name = "V<" + SerializableTypeString::Get() + "," + std::to_string(NumComponents) + ">"; return name; } }; template struct SerializableTypeString> { static VTKM_CONT const std::string& Get() { static std::string name = "vtkm::Pair<" + SerializableTypeString::Get() + "," + SerializableTypeString::Get() + ">"; return name; } }; } } // vtkm::cont /// @endcond SERIALIZATION #endif // vtk_m_cont_SerializableTypeString_h