Björn Esser 7a8b51f
From 83e6a93e40cd224a10a66ec725b5f7a29be6de8f Mon Sep 17 00:00:00 2001
Björn Esser 3c457eb
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <me@besser82.io>
Björn Esser 3c457eb
Date: Tue, 18 Oct 2016 12:16:58 +0200
Björn Esser 3c457eb
Subject: [PATCH] Fix build with JSONcpp >= 1.7.7, specialized template
Björn Esser 3c457eb
 (#16938)
Björn Esser 3c457eb
Björn Esser 3c457eb
---
Björn Esser 7a8b51f
 ParaViewCore/ServerManager/Core/vtkSMSettings.cxx | 40 +++++++++++++++++++++++
Björn Esser 7a8b51f
 1 file changed, 40 insertions(+)
Björn Esser 3c457eb
Björn Esser 3c457eb
diff --git a/ParaViewCore/ServerManager/Core/vtkSMSettings.cxx b/ParaViewCore/ServerManager/Core/vtkSMSettings.cxx
Björn Esser 7a8b51f
index 1684e40..ca86118 100644
Björn Esser 3c457eb
--- a/ParaViewCore/ServerManager/Core/vtkSMSettings.cxx
Björn Esser 3c457eb
+++ b/ParaViewCore/ServerManager/Core/vtkSMSettings.cxx
Björn Esser 7a8b51f
@@ -1410,6 +1410,46 @@ Json::Value vtkConvertXMLElementToJSON(
Björn Esser 7a8b51f
   return value;
Björn Esser 3c457eb
 }
Björn Esser 3c457eb
 
Björn Esser 360df38
+// We need a specialized template for `vtkIdType`, if compiling
Björn Esser 360df38
+// with `VTK_USE_64BIT_IDS=ON`, because JSONcpp >= 1.7.7 switched
Björn Esser 7a8b51f
+// from at-least width (long long int) to fixed width (Int64)
Björn Esser 360df38
+// integers.  If compiling with `VTK_USE_64BIT_IDS=OFF` this is
Björn Esser 7a8b51f
+// not needed, because `vtkIdType` represents plain (Int32)
Björn Esser 7a8b51f
+// integers in this case.
Björn Esser 360df38
+//
Björn Esser 360df38
+// See: https://gitlab.kitware.com/paraview/paraview/issues/16938
Björn Esser 3c457eb
+#ifdef VTK_USE_64BIT_IDS
Björn Esser 3c457eb
+template <>
Björn Esser 3c457eb
+Json::Value vtkConvertXMLElementToJSON <vtkIdType>(
Björn Esser 7a8b51f
+  vtkSMVectorProperty* vp, const std::vector<vtkSmartPointer<vtkPVXMLElement> >& elements)
Björn Esser 3c457eb
+{
Björn Esser 3c457eb
+  // Since we need to handle enumeration domain :/.
Björn Esser 7a8b51f
+  vtkSMEnumerationDomain* enumDomain =
Björn Esser 7a8b51f
+    vtkSMEnumerationDomain::SafeDownCast(vp->FindDomain("vtkSMEnumerationDomain"));
Björn Esser 3c457eb
+  Json::Value value(Json::arrayValue);
Björn Esser 7a8b51f
+  for (size_t cc = 0; cc < elements.size(); ++cc)
Björn Esser 7a8b51f
+  {
Björn Esser 3c457eb
+    vtkIdType xmlValue;
Björn Esser 3c457eb
+    elements[cc]->GetScalarAttribute("value", &xmlValue);
Björn Esser 7a8b51f
+    const char* txt = enumDomain ? enumDomain->GetEntryTextForValue(xmlValue) : NULL;
Björn Esser 3c457eb
+    if (txt)
Björn Esser 7a8b51f
+    {
Björn Esser 3c457eb
+      value[static_cast<unsigned int>(cc)] = Json::Value(txt);
Björn Esser 3c457eb
+    }
Björn Esser 7a8b51f
+    else
Björn Esser 3c457eb
+    {
Björn Esser 7a8b51f
+      // We need to cast from `vtkIdType` to `Int64`-type explicitly.
Björn Esser 7a8b51f
+      value[static_cast<unsigned int>(cc)] = Json::Value(static_cast<Json::Value::Int64>(xmlValue));
Björn Esser 3c457eb
+    }
Björn Esser 7a8b51f
+  }
Björn Esser 7a8b51f
+  if (vp->GetNumberOfElements() == 1 && vp->GetRepeatCommand() == 0 && value.size() == 1)
Björn Esser 7a8b51f
+  {
Björn Esser 7a8b51f
+    return value[0];
Björn Esser 7a8b51f
+  }
Björn Esser 7a8b51f
+  return value;
Björn Esser 3c457eb
+}
Björn Esser 3c457eb
+#endif // VTK_USE_64BIT_IDS
Björn Esser 3c457eb
+
Björn Esser 3c457eb
 template <>
Björn Esser 3c457eb
 Json::Value vtkConvertXMLElementToJSON<vtkStdString>(
Björn Esser 7a8b51f
   vtkSMVectorProperty* vp, const std::vector<vtkSmartPointer<vtkPVXMLElement> >& elements)
Björn Esser 3c457eb
-- 
Björn Esser 3c457eb
2.7.4
Björn Esser 3c457eb