[Bf-blender-cvs] [7206226ee0c] soc-2020-io-performance: Importer: Use switch-case instead of else-if chain in main code.

Ankit Meel noreply at git.blender.org
Fri Dec 4 19:57:27 CET 2020


Commit: 7206226ee0cc328ba3a0d3443e23f4d4e4e754c7
Author: Ankit Meel
Date:   Tue Dec 1 22:46:56 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB7206226ee0cc328ba3a0d3443e23f4d4e4e754c7

Importer: Use switch-case instead of else-if chain in main code.

===================================================================

M	source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
M	source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh

===================================================================

diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
index 2af5c1a612b..9a909504b50 100644
--- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
+++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
@@ -328,69 +328,89 @@ void OBJParser::parse(Vector<std::unique_ptr<Geometry>> &r_all_geometries,
       continue;
     }
 
-    if (line_key == "v") {
-      OBJStorer storer(*current_geometry);
-      storer.add_vertex(rest_line, r_global_vertices);
-    }
-    else if (line_key == "vn") {
-      OBJStorer storer(*current_geometry);
-      storer.add_vertex_normal(rest_line, r_global_vertices);
-    }
-    else if (line_key == "vt") {
-      OBJStorer storer(*current_geometry);
-      storer.add_uv_vertex(rest_line, r_global_vertices);
-    }
-    else if (line_key == "f") {
-      OBJStorer storer(*current_geometry);
-      storer.add_polygon(rest_line,
-                         offsets,
-                         r_global_vertices,
-                         state_material_name,
-                         state_material_name,
-                         state_shaded_smooth);
-    }
-    else if (line_key == "l") {
-      OBJStorer storer(*current_geometry);
-      storer.add_edge(rest_line, offsets, r_global_vertices);
-    }
-    else if (line_key == "mtllib") {
-      mtl_libraries_.append(string(rest_line));
-    }
-    else if (line_key == "o") {
-      state_shaded_smooth = false;
-      state_object_group = "";
-      state_material_name = "";
-      current_geometry = create_geometry(
-          current_geometry, GEOM_MESH, rest_line, r_global_vertices, r_all_geometries, offsets);
-    }
-    else if (line_key == "cstype") {
-      OBJStorer storer(*current_geometry);
-      storer.set_curve_type(
-          rest_line, r_global_vertices, state_object_group, offsets, r_all_geometries);
-    }
-    else if (line_key == "deg") {
-      OBJStorer storer(*current_geometry);
-      storer.set_curve_degree(rest_line);
-    }
-    else if (line_key == "curv") {
-      OBJStorer storer(*current_geometry);
-      storer.add_curve_vertex_indices(rest_line, r_global_vertices);
-    }
-    else if (line_key == "parm") {
-      OBJStorer storer(*current_geometry);
-      storer.add_curve_parameters(rest_line);
-    }
-    else if (line_key == "g") {
-      OBJStorer storer(*current_geometry);
-      storer.update_object_group(rest_line, state_object_group);
-    }
-    else if (line_key == "s") {
-      OBJStorer storer(*current_geometry);
-      storer.update_smooth_group(rest_line, state_shaded_smooth);
-    }
-    else if (line_key == "usemtl") {
-      OBJStorer storer(*current_geometry);
-      storer.update_polygon_material(rest_line, state_material_name);
+    switch (line_key_str_to_enum(line_key)) {
+      case eOBJLineKey::V: {
+        OBJStorer storer(*current_geometry);
+        storer.add_vertex(rest_line, r_global_vertices);
+        break;
+      }
+      case eOBJLineKey::VN: {
+        OBJStorer storer(*current_geometry);
+        storer.add_vertex_normal(rest_line, r_global_vertices);
+        break;
+      }
+      case eOBJLineKey::VT: {
+        OBJStorer storer(*current_geometry);
+        storer.add_uv_vertex(rest_line, r_global_vertices);
+        break;
+      }
+      case eOBJLineKey::F: {
+        OBJStorer storer(*current_geometry);
+        storer.add_polygon(rest_line,
+                           offsets,
+                           r_global_vertices,
+                           state_material_name,
+                           state_material_name,
+                           state_shaded_smooth);
+        break;
+      }
+      case eOBJLineKey::L: {
+        OBJStorer storer(*current_geometry);
+        storer.add_edge(rest_line, offsets, r_global_vertices);
+        break;
+      }
+      case eOBJLineKey::CSTYPE: {
+        OBJStorer storer(*current_geometry);
+        storer.set_curve_type(
+            rest_line, r_global_vertices, state_object_group, offsets, r_all_geometries);
+        break;
+      }
+      case eOBJLineKey::DEG: {
+        OBJStorer storer(*current_geometry);
+        storer.set_curve_degree(rest_line);
+        break;
+      }
+      case eOBJLineKey::CURV: {
+        OBJStorer storer(*current_geometry);
+        storer.add_curve_vertex_indices(rest_line, r_global_vertices);
+        break;
+      }
+      case eOBJLineKey::PARM: {
+        OBJStorer storer(*current_geometry);
+        storer.add_curve_parameters(rest_line);
+        break;
+      }
+      case eOBJLineKey::O: {
+        state_shaded_smooth = false;
+        state_object_group = "";
+        state_material_name = "";
+        current_geometry = create_geometry(
+            current_geometry, GEOM_MESH, rest_line, r_global_vertices, r_all_geometries, offsets);
+        break;
+      }
+      case eOBJLineKey::G: {
+        OBJStorer storer(*current_geometry);
+        storer.update_object_group(rest_line, state_object_group);
+        break;
+      }
+      case eOBJLineKey::S: {
+        OBJStorer storer(*current_geometry);
+        storer.update_smooth_group(rest_line, state_shaded_smooth);
+        break;
+      }
+      case eOBJLineKey::USEMTL: {
+        OBJStorer storer(*current_geometry);
+        storer.update_polygon_material(rest_line, state_material_name);
+        break;
+      }
+      case eOBJLineKey::MTLLIB: {
+        mtl_libraries_.append(string(rest_line));
+        break;
+      }
+      case eOBJLineKey::COMMENT:
+        ATTR_FALLTHROUGH;
+      default:
+        break;
     }
   }
 }
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
index 48fa2df6096..359aa93f06f 100644
--- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
+++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
@@ -80,6 +80,75 @@ class OBJStorer {
                                std::string &r_state_material_name) const;
   void update_smooth_group(const StringRef rest_line, bool &r_state_shaded_smooth) const;
 };
+
+enum class eOBJLineKey {
+  V,
+  VN,
+  VT,
+  F,
+  L,
+  CSTYPE,
+  DEG,
+  CURV,
+  PARM,
+  O,
+  G,
+  S,
+  USEMTL,
+  MTLLIB,
+  COMMENT
+};
+
+constexpr eOBJLineKey line_key_str_to_enum(const std::string_view key_str)
+{
+  if (key_str == "v" || key_str == "V") {
+    return eOBJLineKey::V;
+  }
+  if (key_str == "vn" || key_str == "VN") {
+    return eOBJLineKey::VN;
+  }
+  if (key_str == "vt" || key_str == "VT") {
+    return eOBJLineKey::VT;
+  }
+  if (key_str == "f" || key_str == "F") {
+    return eOBJLineKey::F;
+  }
+  if (key_str == "l" || key_str == "L") {
+    return eOBJLineKey::L;
+  }
+  if (key_str == "cstype" || key_str == "CSTYPE") {
+    return eOBJLineKey::CSTYPE;
+  }
+  if (key_str == "deg" || key_str == "DEG") {
+    return eOBJLineKey::DEG;
+  }
+  if (key_str == "curv" || key_str == "CURV") {
+    return eOBJLineKey::CURV;
+  }
+  if (key_str == "parm" || key_str == "PARM") {
+    return eOBJLineKey::PARM;
+  }
+  if (key_str == "o" || key_str == "O") {
+    return eOBJLineKey::O;
+  }
+  if (key_str == "g" || key_str == "G") {
+    return eOBJLineKey::G;
+  }
+  if (key_str == "s" || key_str == "S") {
+    return eOBJLineKey::S;
+  }
+  if (key_str == "usemtl" || key_str == "USEMTL") {
+    return eOBJLineKey::USEMTL;
+  }
+  if (key_str == "mtllib" || key_str == "MTLLIB") {
+    return eOBJLineKey::MTLLIB;
+  }
+  if (key_str == "#") {
+    return eOBJLineKey::COMMENT;
+  }
+  return eOBJLineKey::COMMENT;
+}
+
 /**
  * All texture map options with number of arguments they accept.
  */



More information about the Bf-blender-cvs mailing list