[dali_2.3.24] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / loader / json-util.cpp
index ec6e95f..88cfad7 100644 (file)
@@ -121,43 +121,47 @@ bool ReadQuadHelper(const TreeNode* tn, const std::array<T*, 4>& quad)
   return true;
 }
 
-const std::map<std::string, Property::Value (*)(const TreeNode*)> kTypeIds{
-  // NONE
-  {"boolean", [](const TreeNode* tn) {
-     return ReadPrimitiveHelper<bool>(tn, ReadBool);
-   }},
-  {"float", [](const TreeNode* tn) {
-     return ReadPrimitiveHelper<float>(tn, ReadFloat);
-   }},
-  {"integer", [](const TreeNode* tn) {
-     return ReadPrimitiveHelper<int>(tn, ReadInt);
-   }},
-  {"vector2", ReadVectorHelper<Vector2>},
-  {"vector3", ReadVectorHelper<Vector3>},
-  {"vector4", ReadVectorHelper<Vector4>},
-  {"matrix3", ReadVectorHelper<Matrix3>},
-  {"matrix", ReadVectorHelper<Matrix>},
-  {"rectangle", [](const TreeNode* tn) {
-     Rect<int> value;
-     if(ReadQuadHelper<int>(tn, {&value.x, &value.y, &value.width, &value.height}))
-     {
-       return Property::Value(value);
-     }
-     return Property::Value();
-   }},
-  {"rotation", ReadRotationHelper},
-  // STRING - not particularly animatable
-  // ARRAY - not particularly animatable
-  // MAP - not particularly animatable
-  {"extents", [](const TreeNode* tn) {
-     Extents value;
-     if(ReadQuadHelper<uint16_t>(tn, {&value.start, &value.end, &value.top, &value.bottom}))
-     {
-       return Property::Value(value);
-     }
-     return Property::Value();
-   }},
-};
+const std::map<std::string_view, Property::Value (*)(const TreeNode*)>& GetTypeIds()
+{
+  static const std::map<std::string_view, Property::Value (*)(const TreeNode*)> kTypeIds{
+    // NONE
+    {"boolean", [](const TreeNode* tn) {
+       return ReadPrimitiveHelper<bool>(tn, ReadBool);
+     }},
+    {"float", [](const TreeNode* tn) {
+       return ReadPrimitiveHelper<float>(tn, ReadFloat);
+     }},
+    {"integer", [](const TreeNode* tn) {
+       return ReadPrimitiveHelper<int>(tn, ReadInt);
+     }},
+    {"vector2", ReadVectorHelper<Vector2>},
+    {"vector3", ReadVectorHelper<Vector3>},
+    {"vector4", ReadVectorHelper<Vector4>},
+    {"matrix3", ReadVectorHelper<Matrix3>},
+    {"matrix", ReadVectorHelper<Matrix>},
+    {"rectangle", [](const TreeNode* tn) {
+       Rect<int> value;
+       if(ReadQuadHelper<int>(tn, {&value.x, &value.y, &value.width, &value.height}))
+       {
+         return Property::Value(value);
+       }
+       return Property::Value();
+     }},
+    {"rotation", ReadRotationHelper},
+    // STRING - not particularly animatable
+    // ARRAY - not particularly animatable
+    // MAP - not particularly animatable
+    {"extents", [](const TreeNode* tn) {
+       Extents value;
+       if(ReadQuadHelper<uint16_t>(tn, {&value.start, &value.end, &value.top, &value.bottom}))
+       {
+         return Property::Value(value);
+       }
+       return Property::Value();
+     }},
+  };
+  return kTypeIds;
+}
 
 Property::Value (*const kArrayPropertyProcessors[])(const TreeNode*){
   ReadVectorHelper<Matrix>,
@@ -469,8 +473,8 @@ Property::Value ReadPropertyValue(const Toolkit::TreeNode& tn)
     auto jsonType = tn.GetChild("type");
     if(jsonType && jsonType->GetType() == TreeNode::STRING)
     {
-      auto iFind = kTypeIds.find(jsonType->GetString());
-      if(iFind != kTypeIds.end())
+      auto iFind = GetTypeIds().find(jsonType->GetString());
+      if(iFind != GetTypeIds().end())
       {
         propValue = iFind->second(tn.GetChild("value"));
       }